userroutes

package
v0.13.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2024 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AdminRoutes

type AdminRoutes struct {
	UserModel interface {
		GetAll() ([]domain.User, error)
		IsAdmin(userID domain.UserID) bool
		GetAllAdmins() ([]domain.UserID, error)
	} `checkinject:"required"`
	SettingsModel interface {
		Get() (domain.Settings, error)
		Set(domain.Settings) error
	} `checkinject:"required"`
	UserInvitationModel interface {
		GetAll() ([]domain.UserInvitation, error)
		Get(email string) (domain.UserInvitation, error)
		Create(email string) error
		Delete(email string) error
	} `checkinject:"required"`
}

AdminRoutes handles routes for applications uploading, creating, deleting.

type AppCommitResp

type AppCommitResp struct {
	AppID   domain.AppID   `json:"app_id"`
	Version domain.Version `json:"version"`
}

type ApplicationResp added in v0.11.0

type ApplicationResp struct {
	domain.App
	UrlData    *domain.AppURLData  `json:"url_data,omitempty"`
	CurVer     domain.Version      `json:"cur_ver"` // CurVer is the latest locally installed version
	VesionData domain.AppVersionUI `json:"ver_data"`
}

type ApplicationRoutes

type ApplicationRoutes struct {
	AppGetter interface {
		InstallFromURL(domain.UserID, string, domain.Version, bool) (domain.AppGetKey, error)
		InstallNewVersionFromURL(domain.UserID, domain.AppID, domain.Version) (domain.AppGetKey, error)
		InstallPackage(userID domain.UserID, locationKey string, appIDs ...domain.AppID) (domain.AppGetKey, error)
		GetUser(key domain.AppGetKey) (domain.UserID, bool)
		GetLocationKey(key domain.AppGetKey) (string, bool)
		GetLastEvent(key domain.AppGetKey) (domain.AppGetEvent, bool)
		GetResults(domain.AppGetKey) (domain.AppGetMeta, bool)
		Commit(domain.AppGetKey) (domain.AppID, domain.Version, error)
		Delete(domain.AppGetKey)
	} `checkinject:"required"`
	RemoteAppGetter interface {
		FetchValidListing(string) (domain.AppListingFetch, error)
		RefreshAppListing(domain.AppID) error
		FetchNewVersionManifest(domain.AppID, domain.Version) (domain.AppGetMeta, error)
		FetchUrlVersionManifest(string, domain.Version) (domain.AppGetMeta, error)
		FetchChangelog(listingURL string, version domain.Version) (string, error)
		FetchIcon(string, domain.Version) ([]byte, error)
		ChangeURL(appID domain.AppID, url string) error
	} `checkinject:"required"`
	DeleteApp interface {
		Delete(appID domain.AppID) error
		DeleteVersion(appID domain.AppID, version domain.Version) error
	} `checkinject:"required"`
	AppFilesModel interface {
		SavePackage(io.Reader) (string, error)
		GetVersionChangelog(locationKey string, version domain.Version) (string, error)
		GetLinkPath(string, string) string
	} `checkinject:"required"`
	AppModel interface {
		GetFromID(domain.AppID) (domain.App, error)
		GetForOwner(domain.UserID) ([]*domain.App, error)
		GetAppUrlData(appID domain.AppID) (domain.AppURLData, error)
		GetAppUrlListing(appID domain.AppID) (domain.AppListing, domain.AppURLData, error)
		UpdateAutomatic(appID domain.AppID, auto bool) error
		GetCurrentVersion(appID domain.AppID) (domain.Version, error)
		GetVersion(domain.AppID, domain.Version) (domain.AppVersion, error) // maybe no longer necessary?
		GetVersionForUI(appID domain.AppID, version domain.Version) (domain.AppVersionUI, error)
		GetVersionsForUIForApp(domain.AppID) ([]domain.AppVersionUI, error)
	} `checkinject:"required"`
	AppLogger interface {
		Get(locationKey string) domain.LoggerI
	} `checkinject:"required"`
}

ApplicationRoutes handles routes for applications uploading, creating, deleting.

type AppspaceBackupRoutes

type AppspaceBackupRoutes struct {
	AppspaceFilesModel interface {
		GetBackups(locationKey string) ([]string, error)
		DeleteBackup(locationKey string, filename string) error
	} `checkinject:"required"`
	BackupAppspace interface {
		CreateBackup(appspaceID domain.AppspaceID) (string, error)
	} `checkinject:"required"`
	AppspaceLocation2Path interface {
		Backup(string, string) string
	} `checkinject:"required"`
}

type AppspaceLoginRoutes

type AppspaceLoginRoutes struct {
	Config        *domain.RuntimeConfig `checkinject:"required"`
	AppspaceModel interface {
		GetFromDomain(dom string) (*domain.Appspace, error)
	} `checkinject:"required"`
	RemoteAppspaceModel interface {
		Get(userID domain.UserID, domainName string) (domain.RemoteAppspace, error)
	} `checkinject:"required"`
	DS2DS interface {
		GetRemoteAPIVersion(domainName string) (int, error)
	} `checkinject:"required"`
	V0RequestToken interface {
		RequestToken(ctx context.Context, userID domain.UserID, appspaceDomain string, sessionID string) (string, error)
	} `checkinject:"required"`
	V0TokenManager interface {
		GetForOwner(appspaceID domain.AppspaceID, dropID string) (string, error)
	} `checkinject:"required"`
}

AppspaceLoginRoutes handle

type AppspaceResp added in v0.11.0

type AppspaceResp struct {
	AppspaceID     int                  `json:"appspace_id"`
	AppID          int                  `json:"app_id"`
	AppVersion     domain.Version       `json:"app_version"`
	DomainName     string               `json:"domain_name"`
	NoTLS          bool                 `json:"no_tls"`
	PortString     string               `json:"port_string"`
	DropID         string               `json:"dropid"`
	Created        time.Time            `json:"created_dt"`
	Paused         bool                 `json:"paused"`
	UpgradeVersion domain.Version       `json:"upgrade_version,omitempty"`
	AppVersionData *domain.AppVersionUI `json:"ver_data,omitempty"`
}

AppspaceResp is

type AppspaceRestoreRoutes

type AppspaceRestoreRoutes struct {
	RestoreAppspace interface {
		Prepare(reader io.Reader) (string, error)
		PrepareBackup(appspaceID domain.AppspaceID, backupFile string) (string, error)
		CheckAppspaceDataValid(tok string) error
		GetMetaInfo(tok string) (domain.AppspaceMetaInfo, error)
		ReplaceData(tok string, appspaceID domain.AppspaceID) error
	} `checkinject:"required"`
}

type AppspaceRoutes

type AppspaceRoutes struct {
	Config                domain.RuntimeConfig `checkinject:"required"`
	AppspaceUserRoutes    subRoutes            `checkinject:"required"`
	AppspaceExportRoutes  subRoutes            `checkinject:"required"`
	AppspaceRestoreRoutes subRoutes            `checkinject:"required"`
	AppModel              interface {
		GetFromID(domain.AppID) (domain.App, error)
		GetVersion(domain.AppID, domain.Version) (domain.AppVersion, error)
		GetVersionForUI(appID domain.AppID, version domain.Version) (domain.AppVersionUI, error)
	} `checkinject:"required"`
	AppspaceModel interface {
		GetForOwner(domain.UserID) ([]*domain.Appspace, error)
		GetFromID(domain.AppspaceID) (*domain.Appspace, error)
		GetForApp(appID domain.AppID) ([]*domain.Appspace, error)
	} `checkinject:"required"`
	CreateAppspace interface {
		Create(domain.DropID, domain.AppVersion, string, string) (domain.AppspaceID, domain.JobID, error)
	} `checkinject:"required"`
	PauseAppspace interface {
		Pause(appspaceID domain.AppspaceID, pause bool) error
	} `checkinject:"required"`
	DeleteAppspace interface {
		Delete(domain.Appspace) error
	} `checkinject:"required"`
	AppspaceLogger interface {
		Open(appspaceID domain.AppspaceID) domain.LoggerI
	} `checkinject:"required"`
	SandboxRunsModel interface {
		AppspaceSums(ownerID domain.UserID, appspaceID domain.AppspaceID, from time.Time, to time.Time) (domain.SandboxRunData, error)
	} `checkinject:"required"`
	DropIDModel interface {
		Get(handle string, dom string) (domain.DropID, error)
	} `checkinject:"required"`
	MigrationMinder interface {
		GetForAppspace(domain.Appspace) (domain.Version, bool, error)
	} `checkinject:"required"`
}

AppspaceRoutes handles routes for appspace uploading, creating, deleting.

type AppspaceUserRoutes

type AppspaceUserRoutes struct {
	AppspaceUserModel interface {
		Get(appspaceID domain.AppspaceID, proxyID domain.ProxyID) (domain.AppspaceUser, error)
		GetAll(appspaceID domain.AppspaceID) ([]domain.AppspaceUser, error)
		Create(appspaceID domain.AppspaceID, authType string, authID string) (domain.ProxyID, error)
		UpdateAuth(appspaceID domain.AppspaceID, proxyID domain.ProxyID, authType string, authID string) error
		UpdateMeta(appspaceID domain.AppspaceID, proxyID domain.ProxyID, displayName string, avatar string, permissions []string) error
		Delete(appspaceID domain.AppspaceID, proxyID domain.ProxyID) error
	} `checkinject:"required"`
	Avatars interface {
		Save(locationKey string, proxyID domain.ProxyID, img io.Reader) (string, error)
		Remove(locationKey string, fn string) error
	} `checkinject:"required"`
	Config                *domain.RuntimeConfig `checkinject:"required"`
	AppspaceLocation2Path interface {
		Avatar(string, string) string
	} `checkinject:"required"`
}

AppspaceUserRoutes handles routes for getting and mainpulating appspace users

type AuthRoutes

type AuthRoutes struct {
	SetupKey interface {
		Has() (bool, error)
		Get() (string, error)
		Delete() error
	} `checkinject:"required"`
	Views interface {
		Login(http.ResponseWriter, domain.LoginViewData)
		Signup(http.ResponseWriter, domain.SignupViewData)
	} `checkinject:"required"`
	SettingsModel interface {
		Get() (domain.Settings, error)
	} `checkinject:"required"`
	UserModel interface {
		Create(email, password string) (domain.User, error)
		GetFromEmailPassword(email, password string) (domain.User, error)
		MakeAdmin(userID domain.UserID) error
	} `checkinject:"required"`
	UserInvitationModel interface {
		Get(email string) (domain.UserInvitation, error)
	} `checkinject:"required"`
	Authenticator interface {
		SetForAccount(http.ResponseWriter, domain.UserID) error
		Unset(http.ResponseWriter, *http.Request)
	} `checkinject:"required"`
}

AuthRoutes handles all routes related to authentication

type BackupFile

type BackupFile struct {
	Filename string `json:"filename"`
}

type ContactResp

type ContactResp struct {
	UserID      domain.UserID    `json:"user_id"`
	ContactID   domain.ContactID `json:"contact_id"`
	Name        string           `json:"name"`
	DisplayName string           `json:"display_name"`
	Created     time.Time        `json:"created_dt"`
}

ContactResp is the contact data sent to client as json

type ContactRoutes

type ContactRoutes struct {
	ContactModel interface {
		Create(userID domain.UserID, name string, displayName string) (domain.Contact, error)
		Update(userID domain.UserID, contactID domain.ContactID, name string, displayName string) error
		Delete(userID domain.UserID, contactID domain.ContactID) error
		Get(contactID domain.ContactID) (domain.Contact, error)
		GetForUser(userID domain.UserID) ([]domain.Contact, error)
	} `checkinject:"required"`
}

ContactRoutes serves routes related to user's contacts

type CreateContactPostReq

type CreateContactPostReq struct {
	Name        string `json:"name" validate:"nonzero,max=100"`
	DisplayName string `json:"display_name" validate:"nonzero,max=100"`
}

CreateContactPostReq is incoming json for creating a contact

type DomainNameRoutes

type DomainNameRoutes struct {
	DomainController interface {
		GetDomains(userID domain.UserID) ([]domain.DomainData, error)
		CheckAppspaceDomain(userID domain.UserID, dom string, subdomain string) (domain.DomainCheckResult, error)
	} `checkinject:"required"`
}

DomainNameRoutes is currently just functional enough to support creating drop ids Ultimately adding domains and setting what they're for is a whole thing that will take place here.

type DropIDAvailableResp added in v0.10.2

type DropIDAvailableResp struct {
	Available bool `json:"available"`
}

type DropIDRoutes

type DropIDRoutes struct {
	DomainController interface {
		GetDropIDDomains(userID domain.UserID) ([]domain.DomainData, error)
	} `checkinject:"required"`
	DropIDModel interface {
		Create(userID domain.UserID, handle string, dom string, displayName string) (domain.DropID, error)
		Update(userID domain.UserID, handle string, dom string, displayName string) error
		Get(handle string, dom string) (domain.DropID, error)
		GetForUser(userID domain.UserID) ([]domain.DropID, error)
	} `checkinject:"required"`
}

type FilesUploadResp

type FilesUploadResp struct {
	Key domain.AppGetKey `json:"app_get_key"`
}

type GetAppsResp

type GetAppsResp struct {
	Apps []ApplicationResp `json:"apps"`
}

GetAppsResp is

type InProcessResp

type InProcessResp struct {
	LastEvent domain.AppGetEvent `json:"last_event"`
	Meta      domain.AppGetMeta  `json:"meta"`
}

type InstallAppFromURLRequest added in v0.13.0

type InstallAppFromURLRequest struct {
	URL                string         `json:"url"`
	Version            domain.Version `json:"version"`
	AutoRefreshListing bool           `json:"auto_refresh_listing"`
}

type InstallNewVersionFromURLRequest added in v0.13.0

type InstallNewVersionFromURLRequest struct {
	Version domain.Version `json:"version"`
}

type InstanceData added in v0.10.1

type InstanceData struct {
	DsHostVersion string `json:"ds_host_version"`
	DenoVersion   string `json:"deno_version"`
}

type MigrationJobRoutes

type MigrationJobRoutes struct {
	AppModel interface {
		GetVersion(domain.AppID, domain.Version) (domain.AppVersion, error)
	} `checkinject:"required"`
	AppspaceModel interface {
		GetFromID(domain.AppspaceID) (*domain.Appspace, error)
	} `checkinject:"required"`
	MigrationJobModel interface {
		Create(ownerID domain.UserID, appspaceID domain.AppspaceID, toVersion domain.Version, priority bool) (*domain.MigrationJob, error)
		GetJob(jobID domain.JobID) (*domain.MigrationJob, error)
		GetForAppspace(appspaceID domain.AppspaceID) ([]*domain.MigrationJob, error)
	} `checkinject:"required"`
	MigrationJobController interface {
		WakeUp()
	} `checkinject:"required"`
}

MigrationJobRoutes can initiate and return appspace migration jobs

type PatchDropID added in v0.10.2

type PatchDropID struct {
	DisplayName string `json:"display_name"`
}

type PatchPasswordReq

type PatchPasswordReq struct {
	Old string `json:"old"`
	New string `json:"new"`
}

type PatchUserEmailReq added in v0.10.1

type PatchUserEmailReq struct {
	Email string `json:"email"`
}

type PostAppspacePauseReq

type PostAppspacePauseReq struct {
	Pause bool `json:"pause"`
}

type PostAppspaceReq

type PostAppspaceReq struct {
	AppID      domain.AppID   `json:"app_id"`
	Version    domain.Version `json:"app_version"`
	DomainName string         `json:"domain_name"`
	Subdomain  string         `json:"subdomain"`
	DropID     string         `json:"dropid"`
}

PostAppspaceReq is sent when creating a new appspace

type PostAppspaceResp

type PostAppspaceResp struct {
	AppspaceID domain.AppspaceID `json:"appspace_id"`
	JobID      domain.JobID      `json:"job_id"`
}

PostAppspaceResp is the return data after creating a new appspace

type PostAppspaceUser

type PostAppspaceUser struct {
	AuthType    string   `json:"auth_type"`
	AuthID      string   `json:"auth_id"`
	DisplayName string   `json:"display_name"`
	Avatar      string   `json:"avatar"` //  "replace", any other value means no avatar is loaded
	Permissions []string `json:"permissions"`
}

type PostAppspaceVersionReq

type PostAppspaceVersionReq struct {
	AppspaceID domain.AppspaceID `json:"appspace_id"`
	Version    domain.Version    `json:"to_version"` // could include app_id to future proof and to verify apples-apples
}

PostAppspaceVersionReq is Later include the date time for scheduling the job

type PostInvitation

type PostInvitation struct {
	Email string `json:"email"`
}

PostInvitation is for incoming post requests to create invitation

type RemoteAppspaceMeta

type RemoteAppspaceMeta struct {
	UserID      domain.UserID `json:"user_id"`
	DomainName  string        `json:"domain_name"`
	OwnerDropID string        `json:"owner_dropid"`
	UserDropID  string        `json:"dropid"`
	NoTLS       bool          `json:"no_tls"`
	PortString  string        `json:"port_string"`
	Created     time.Time     `json:"created_dt"`
}

type RemoteAppspacePost

type RemoteAppspacePost struct {
	CheckOnly  bool   `json:"check_only"`
	DomainName string `json:"domain_name"`
	UserDropID string `json:"user_dropid"`
}

type RemoteAppspacePostRet

type RemoteAppspacePostRet struct {
	InputsValid   bool   `json:"inputs_valid"`
	DomainMessage string `json:"domain_message"`
	RemoteMessage string `json:"remote_message"`
}

type RemoteAppspaceRoutes

type RemoteAppspaceRoutes struct {
	Config              domain.RuntimeConfig `checkinject:"required"`
	RemoteAppspaceModel interface {
		Get(userID domain.UserID, domainName string) (domain.RemoteAppspace, error)
		GetForUser(userID domain.UserID) ([]domain.RemoteAppspace, error)
		Create(userID domain.UserID, domainName string, ownerDropID string, dropID string) error
		Delete(userID domain.UserID, domainName string) error
	} `checkinject:"required"`
	AppspaceModel interface {
		GetForOwner(domain.UserID) ([]*domain.Appspace, error)
	} `checkinject:"required"`
	DropIDModel interface {
		Get(handle string, dom string) (domain.DropID, error)
	} `checkinject:"required"`
}

type RestoreData

type RestoreData struct {
	Token  string        `json:"token"`
	Error  *RestoreError `json:"err"`
	Schema int           `json:"schema"`
}

 RestoreData is the response to the selection / upload of an appspace archive

type RestoreError

type RestoreError struct {
	// MissingFiles is top-level files missing from the zip file we are attempting to restore
	MissingFiles []string `json:"missing_files"`
	// ZipFiles is the set of files in the top level of the zip
	// provided for convenience to the user so they may find their mistake
	ZipFiles []string `json:"zip_files"`
}

type SelectBackup

type SelectBackup struct {
	BackupFilename string `json:"backup_file"`
}

type SettingsResp

type SettingsResp struct {
	RegistrationOpen bool `json:"registration_open"`
}

SettingsResp represents admin settings

type UserData

type UserData struct {
	Email   string `json:"email"`
	UserID  int    `json:"user_id"`
	IsAdmin bool   `json:"is_admin"`
}

UserData is single user

type UserRoutes

type UserRoutes struct {
	Config        *domain.RuntimeConfig `checkinject:"required"`
	Authenticator interface {
		AccountUser(http.Handler) http.Handler
	} `checkinject:"required"`
	Views interface {
		GetStaticFS() fs.FS
	} `checkinject:"required"`
	AuthRoutes           routeGroup           `checkinject:"required"`
	AppspaceLoginRoutes  routeGroup           `checkinject:"required"`
	ApplicationRoutes    subRoutes            `checkinject:"required"`
	AppspaceRoutes       subRoutes            `checkinject:"required"`
	RemoteAppspaceRoutes subRoutes            `checkinject:"required"`
	ContactRoutes        subRoutes            `checkinject:"required"`
	DomainRoutes         subRoutes            `checkinject:"required"`
	DropIDRoutes         subRoutes            `checkinject:"required"`
	MigrationJobRoutes   subRoutes            `checkinject:"required"`
	AdminRoutes          subRoutes            `checkinject:"required"`
	AppspaceStatusTwine  domain.TwineService  `checkinject:"required"`
	MigrationJobTwine    domain.TwineService2 `checkinject:"required"`
	AppGetterTwine       domain.TwineService  `checkinject:"required"`
	UserModel            interface {
		GetFromID(userID domain.UserID) (domain.User, error)
		UpdateEmail(userID domain.UserID, email string) error
		UpdatePassword(userID domain.UserID, password string) error
		GetFromEmailPassword(email, password string) (domain.User, error)
		IsAdmin(userID domain.UserID) bool
	} `checkinject:"required"`
	// contains filtered or unexported fields
}

UserRoutes handles routes for appspaces.

func (*UserRoutes) DumpRoutes

func (u *UserRoutes) DumpRoutes(dumpRoutes string)

func (*UserRoutes) Init

func (u *UserRoutes) Init()

func (*UserRoutes) ServeHTTP

func (u *UserRoutes) ServeHTTP(res http.ResponseWriter, req *http.Request)

ServeHTTP handles http traffic to the user routes

type Versions

type Versions struct {
	AppVersions []domain.AppVersionUI `json:"app_versions"`
}

Versions should be embedded in application meta?

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL