iam

package
v0.9.3 Latest Latest
Warning

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

Go to latest
Published: Aug 4, 2026 License: MIT Imports: 31 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	DefaultSyncTimeout = 10 * time.Minute
	DefaultTrigger     = 4 * time.Second
)
View Source
var GlobalRegistry = &Registry{
	Store: make(map[string]*Iam),
}

Functions

This section is empty.

Types

type Database

type Database struct {
	Path string `cfg:"path"`
	// WriteAPI to sync data from write enabled service
	// this makes read-only service
	WriteAPI string `cfg:"write_api"`
	// BackupPath database from backup when start
	BackupPath string `cfg:"backup_path"`
	// Memory to hold data in memory
	Memory bool `cfg:"memory"`
	// Flatten to flatten the data when start, default is true
	Flatten *bool `cfg:"flatten"`

	// Redis configuration to sync between IAM services
	Redis connredis.Config `cfg:"redis"`
	// PubSubTopic to sync between IAM services
	PubSubTopic string `cfg:"pubsub_topic"`
}

type Iam deprecated

type Iam struct {
	PrefixPath string    `cfg:"prefix_path"`
	Ldap       ldap.Ldap `cfg:"ldap"`
	Database   Database  `cfg:"database"`

	Check data.CheckConfig `cfg:"check"`
	// contains filtered or unexported fields
}

Deprecated: use the auth middleware for new PostgreSQL-backed IAM/OAuth2 setups.

func (*Iam) AccessServiceAccount added in v0.8.15

func (m *Iam) AccessServiceAccount(w http.ResponseWriter, r *http.Request)

@Summary Access service account @Description Give temporary access to service account @Tags service-accounts @Param id path string true "user id" @Param access body data.UserAccess true "Access" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/service-accounts/{id}/access [POST]

func (*Iam) AccessUser added in v0.8.15

func (m *Iam) AccessUser(w http.ResponseWriter, r *http.Request)

@Summary Access user @Description Give temporary access to user @Tags users @Param id path string true "user id" @Param access body data.UserAccess true "Access" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/users/{id}/access [POST]

func (*Iam) Backup

func (m *Iam) Backup(w http.ResponseWriter, r *http.Request)

@Summary Backup Database @Tags backup @Param since query number false "since txid" @Param deleted query bool false "include deleted data" @Success 200 @Failure 500 {object} httputil.Error @Router /v1/backup [GET]

func (*Iam) BackupUntil added in v0.8.24

func (m *Iam) BackupUntil(w http.ResponseWriter, r *http.Request)

@Summary Backup Database until txid @Tags backup @Param until query number true "until txid" @Success 200 @Failure 400 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/backup/until [GET]

func (*Iam) CreatePermission

func (m *Iam) CreatePermission(w http.ResponseWriter, r *http.Request)

@Summary Create permission @Tags permissions @Param permission body data.Permission true "Permission" @Success 200 {object} data.Response[data.ResponseCreate] @Failure 400 {object} httputil.Error @Failure 409 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/permissions [POST]

func (*Iam) CreatePermissionBulk

func (m *Iam) CreatePermissionBulk(w http.ResponseWriter, r *http.Request)

@Summary Create permission bulk @Tags permissions @Param permission body []data.Permission true "Permission" @Success 200 {object} data.Response[data.ResponseCreateBulk] @Failure 500 {object} httputil.Error @Router /v1/permissions/bulk [POST]

func (*Iam) CreateRole

func (m *Iam) CreateRole(w http.ResponseWriter, r *http.Request)

@Summary Create role @Tags roles @Param role body data.Role true "Role" @Success 200 {object} data.Response[data.ResponseCreate] @Failure 400 {object} httputil.Error @Failure 409 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/roles [POST]

func (*Iam) CreateServiceAccount

func (m *Iam) CreateServiceAccount(w http.ResponseWriter, r *http.Request)

@Summary Create service account @Tags service-accounts @Param user body data.UserCreate true "Service Account" @Success 200 {object} data.Response[data.ResponseCreate] @Failure 400 {object} httputil.Error @Failure 409 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/service-accounts [POST]

func (*Iam) CreateUser

func (m *Iam) CreateUser(w http.ResponseWriter, r *http.Request)

@Summary Create user @Tags users @Param user body data.UserCreate true "User" @Success 200 {object} data.Response[data.ResponseCreate] @Failure 400 {object} httputil.Error @Failure 409 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/users [POST]

func (*Iam) DB added in v0.8.14

func (m *Iam) DB() *badger.Badger

func (*Iam) Dashboard

func (m *Iam) Dashboard(w http.ResponseWriter, _ *http.Request)

@Summary Get dashboard info @Tags dashboard @Success 200 {object} data.Response[data.Dashboard] @Failure 500 {object} httputil.Error @Router /v1/dashboard [GET]

func (*Iam) DeletePermission

func (m *Iam) DeletePermission(w http.ResponseWriter, r *http.Request)

@Summary Delete permission @Tags permissions @Param id path string true "permission name" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/permissions/{id} [DELETE]

func (*Iam) DeleteRole

func (m *Iam) DeleteRole(w http.ResponseWriter, r *http.Request)

@Summary Delete role @Tags roles @Param id path string true "role name" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/roles/{id} [DELETE]

func (*Iam) DeleteServiceAccount

func (m *Iam) DeleteServiceAccount(w http.ResponseWriter, r *http.Request)

@Summary Delete service account @Tags service-accounts @Param id path string true "service id" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/service-accounts/{id} [DELETE]

func (*Iam) DeleteUser

func (m *Iam) DeleteUser(w http.ResponseWriter, r *http.Request)

@Summary Delete user @Tags users @Param id path string true "user id" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/users/{id} [DELETE]

func (*Iam) ExportPermissions

func (m *Iam) ExportPermissions(w http.ResponseWriter, r *http.Request)

@Summary Export permissions @Tags permissions @Param id query string false "permission id" @Param name query string false "permission name" @Param description query string false "permission description" @Param path query string false "request path" @Param method query string false "request method" @Success 200 @Failure 500 {object} httputil.Error @Router /v1/permissions/export [GET]

func (*Iam) ExportRoles

func (m *Iam) ExportRoles(w http.ResponseWriter, r *http.Request)

@Summary Export roles @Tags roles @Param name query string false "role name" @Param description query string false "role description" @Param id query string false "role id" @Param permission_ids query []string false "role permission ids" collectionFormat(multi) @Param role_ids query []string false "role ids" collectionFormat(multi) @Param method query string false "request method" @Param path query string false "request path" @Success 200 @Failure 500 {object} httputil.Error @Router /v1/roles/export [GET]

func (*Iam) ExportServiceAccounts

func (m *Iam) ExportServiceAccounts(w http.ResponseWriter, r *http.Request)

@Summary Export service accounts @Tags service-accounts @Param alias query string false "service alias" @Param id query string false "service id" @Param role_ids query []string false "role ids" collectionFormat(multi) @Param uid query string false "details->uid" @Param name query string false "details->name" @Param email query string false "details->email" @Param path query string false "request path" @Param method query string false "request method" @Param is_active query bool false "is_active" @Success 200 @Failure 500 {object} httputil.Error @Router /v1/service-accounts/export [GET]

func (*Iam) ExportUsers

func (m *Iam) ExportUsers(w http.ResponseWriter, r *http.Request)

@Summary Export users @Tags users @Param alias query string false "user alias" @Param id query string false "user id" @Param role_ids query []string false "role ids" collectionFormat(multi) @Param uid query string false "details->uid" @Param name query string false "details->name" @Param email query string false "details->email" @Param path query string false "request path" @Param method query string false "request method" @Param is_active query bool false "is_active" @Success 200 @Failure 500 {object} httputil.Error @Router /v1/users/export [GET]

func (*Iam) GetOrCreateUser added in v0.8.14

func (m *Iam) GetOrCreateUser(request data.GetUserRequest) (*data.UserExtended, error)

func (*Iam) GetPermission

func (m *Iam) GetPermission(w http.ResponseWriter, r *http.Request)

@Summary Get permission @Tags permissions @Param id path string true "permission name" @Param add_roles query bool false "add roles default(true)" @Success 200 {object} data.Response[data.Permission] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/permissions/{id} [GET]

func (*Iam) GetPermissions

func (m *Iam) GetPermissions(w http.ResponseWriter, r *http.Request)

@Summary Get permissions @Tags permissions @Param id query string false "permission id" @Param name query string false "permission name" @Param description query string false "permission description" @Param path query string false "request path" @Param method query string false "request method" @Param add_roles query bool false "add roles default(true)" @Param limit query int false "limit" default(20) @Param offset query int false "offset" @Success 200 {object} data.Response[[]data.Permission] @Failure 500 {object} httputil.Error @Router /v1/permissions [GET]

func (*Iam) GetRole

func (m *Iam) GetRole(w http.ResponseWriter, r *http.Request)

@Summary Get role @Tags roles @Param id path string true "role ID" @Param add_permissions query bool false "add permissions default(true)" @Param add_roles query bool false "add roles default(true)" @Param add_total_users query bool false "add total users default(true)" @Success 200 {object} data.Response[data.RoleExtended] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/roles/{id} [GET]

func (*Iam) GetRoleRelation

func (m *Iam) GetRoleRelation(w http.ResponseWriter, _ *http.Request)

@Summary Get role relation (dump) @Tags roles @Success 200 {object} map[string]data.RoleRelation @Failure 500 {object} httputil.Error @Router /v1/roles/relation [GET]

func (*Iam) GetRoles

func (m *Iam) GetRoles(w http.ResponseWriter, r *http.Request)

@Summary Get roles @Tags roles @Param name query string false "role name" @Param description query string false "role description" @Param id query string false "role id" @Param permission_ids query []string false "role permission ids" collectionFormat(multi) @Param role_ids query []string false "role ids" collectionFormat(multi) @Param method query string false "request method" @Param path query string false "request path" @Param permission query []string false "permission" collectionFormat(multi) @Param add_permissions query bool false "add permissions default(true)" @Param add_roles query bool false "add roles default(true)" @Param add_total_users query bool false "add total users default(true)" @Param limit query int false "limit" default(20) @Param offset query int false "offset" @Success 200 {object} data.Response[[]data.RoleExtended] @Failure 500 {object} httputil.Error @Router /v1/roles [GET]

func (*Iam) GetServiceAccount

func (m *Iam) GetServiceAccount(w http.ResponseWriter, r *http.Request)

@Summary Get service account @Tags service-accounts @Param id path string true "service id" @Param add_roles query bool false "add roles default(true)" @Param add_permissions query bool false "add permissions" @Param add_data query bool false "add data" @Success 200 {object} data.Response[data.UserExtended] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/service-accounts/{id} [GET]

func (*Iam) GetServiceAccounts

func (m *Iam) GetServiceAccounts(w http.ResponseWriter, r *http.Request)

@Summary Get service accounts @Tags service-accounts @Param alias query string false "service alias" @Param id query string false "service id" @Param role_ids query []string false "role ids" collectionFormat(multi) @Param uid query string false "details->uid" @Param name query string false "details->name" @Param email query string false "details->email" @Param path query string false "request path" @Param method query string false "request method" @Param permission query []string false "permission" collectionFormat(multi) @Param is_active query bool false "is_active" @Param add_roles query bool false "add roles default(true)" @Param add_permissions query bool false "add permissions" @Param add_data query bool false "add data" @Param limit query int false "limit" default(20) @Param offset query int false "offset" @Success 200 {object} data.Response[[]data.UserExtended] @Failure 500 {object} httputil.Error @Router /v1/service-accounts [GET]

func (*Iam) GetUser

func (m *Iam) GetUser(w http.ResponseWriter, r *http.Request)

@Summary Get user @Tags users @Param id path string true "user id" @Param add_roles query bool false "add roles default(true)" @Param add_permissions query bool false "add permissions" @Param add_data query bool false "add data" @Success 200 {object} data.Response[data.UserExtended] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/users/{id} [GET]

func (*Iam) GetUsers

func (m *Iam) GetUsers(w http.ResponseWriter, r *http.Request)

@Summary Get users @Tags users @Param alias query string false "user alias" @Param id query string false "user id" @Param role_ids query []string false "role ids" collectionFormat(multi) @Param role_type query string false "role type" Enums(PERMANENT, TEMPORARY) @Param uid query string false "details->uid" @Param name query string false "details->name" @Param email query string false "details->email" @Param path query string false "request path" @Param method query string false "request method" @Param permission query []string false "permission" collectionFormat(multi) @Param is_active query bool false "is_active" @Param add_roles query bool false "add roles default(true)" @Param add_permissions query bool false "add permissions" @Param add_data query bool false "add data" @Param add_scope_roles query bool false "add scope roles" @Param limit query int false "limit" default(20) @Param offset query int false "offset" @Success 200 {object} data.Response[[]data.UserExtended] @Failure 500 {object} httputil.Error @Router /v1/users [GET]

func (*Iam) Info

func (m *Iam) Info(w http.ResponseWriter, r *http.Request)

@Summary Get current user's info @Tags info @Param alias query string true "User alias" @Param data query bool false "add role data" @Success 200 {object} data.Response[data.UserInfo] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/info [GET]

func (*Iam) InfoUser

func (m *Iam) InfoUser(w http.ResponseWriter, r *http.Request)

@Summary Get current user's info @Tags public @Param X-User header string false "User alias, X-User is authorized user auto adds" @Param data query bool false "add role data" @Success 200 {object} data.Response[data.UserInfo] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /info [GET]

func (*Iam) KeepPermissionBulk added in v0.7.11

func (m *Iam) KeepPermissionBulk(w http.ResponseWriter, r *http.Request)

@Summary Delete permission bulk @Tags permissions @Param permission body []data.Permission true "Permission" @Success 200 {object} data.Response[[]data.IDName] @Failure 500 {object} httputil.Error @Router /v1/permissions/keep [POST]

func (*Iam) LdapCheckPassword added in v0.8.14

func (m *Iam) LdapCheckPassword(username, password string) (bool, error)

func (*Iam) LdapCreateGroupMaps

func (m *Iam) LdapCreateGroupMaps(w http.ResponseWriter, r *http.Request)

@Summary Create LDAP Map @Tags ldap @Param map body data.LMap true "Map" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 409 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/ldap/maps [POST]

func (*Iam) LdapDeleteGroupMaps

func (m *Iam) LdapDeleteGroupMaps(w http.ResponseWriter, r *http.Request)

@Summary Delete LDAP Map @Tags ldap @Param name path string true "map name" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/ldap/maps/{name} [DELETE]

func (*Iam) LdapGetGroupMap

func (m *Iam) LdapGetGroupMap(w http.ResponseWriter, r *http.Request)

@Summary Get LDAP Map @Tags ldap @Param name path string true "map name" @Success 200 {object} data.Response[data.LMap] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/ldap/maps/{name} [GET]

func (*Iam) LdapGetGroupMaps

func (m *Iam) LdapGetGroupMaps(w http.ResponseWriter, r *http.Request)

@Summary Get LDAP Maps @Tags ldap @Param name query string false "map name" @Param role_ids query []string false "role ids" collectionFormat(multi) @Param limit query int false "limit" default(20) @Param offset query int false "offset" @Success 200 {object} data.Response[[]data.LMap] @Failure 500 {object} httputil.Error @Router /v1/ldap/maps [GET]

func (*Iam) LdapGetGroups

func (m *Iam) LdapGetGroups(w http.ResponseWriter, r *http.Request)

LdapGetGroups returns groups info from LDAP. @Summary Get LDAP groups @Tags ldap @Success 200 {object} data.Response[[]ldap.LdapGroup] @Failure 500 {object} httputil.Error @Router /v1/ldap/groups [GET]

func (*Iam) LdapGetUsers

func (m *Iam) LdapGetUsers(w http.ResponseWriter, r *http.Request)

LdapGetUsers returns user info from LDAP. @Summary Get LDAP user @Tags ldap @Param uid path string true "user uid" @Success 200 {object} data.Response[ldap.LdapUser] @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/ldap/users/{uid} [GET]

func (*Iam) LdapPutGroupMaps

func (m *Iam) LdapPutGroupMaps(w http.ResponseWriter, r *http.Request)

@Summary Put LDAP Map @Tags ldap @Param name path string true "map name" @Param map body data.LMap true "Map" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/ldap/maps/{name} [PUT]

func (*Iam) LdapSync

func (m *Iam) LdapSync(force bool, uid string) error

func (*Iam) LdapSyncGroups

func (m *Iam) LdapSyncGroups(w http.ResponseWriter, r *http.Request)

LdapSyncGroups syncs users on LDAP groups with mapped groups in the database. @Summary Sync LDAP groups @Tags ldap @Param Body body SyncRequest false "force" @Success 200 {object} data.ResponseMessage @Failure 500 {object} httputil.Error @Router /v1/ldap/sync [POST]

func (*Iam) LdapSyncGroupsUID

func (m *Iam) LdapSyncGroupsUID(w http.ResponseWriter, r *http.Request)

LdapSyncGroups syncs one user on LDAP groups with mapped groups in the database. @Summary Sync LDAP groups @Tags ldap @Param uid path string true "user uid" @Param Body body SyncRequest false "force" @Success 200 {object} data.ResponseMessage @Failure 500 {object} httputil.Error @Router /v1/ldap/sync/{uid} [POST]

func (*Iam) Middleware

func (m *Iam) Middleware(ctx context.Context, name string) (func(http.Handler) http.Handler, error)

func (*Iam) MuxSet

func (m *Iam) MuxSet(prefix string) *ada.Mux

@Title IAM API @BasePath / @description Identity and Access Management API

func (*Iam) PatchPermission

func (m *Iam) PatchPermission(w http.ResponseWriter, r *http.Request)

@Summary Patch permission @Tags permissions @Param id path string true "permission ID" @Param permission body data.PermissionPatch true "Permission" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/permissions/{id} [PATCH]

func (*Iam) PatchRole

func (m *Iam) PatchRole(w http.ResponseWriter, r *http.Request)

@Summary Patch role @Tags roles @Param id path string true "role ID" @Param role body data.RolePatch true "Role" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/roles/{id} [PATCH]

func (*Iam) PatchServiceAccount

func (m *Iam) PatchServiceAccount(w http.ResponseWriter, r *http.Request)

@Summary Patch service account @Tags service-accounts @Param id path string true "service id" @Param user body data.UserPatch true "Service" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/service-accounts/{id} [PATCH]

func (*Iam) PatchUser

func (m *Iam) PatchUser(w http.ResponseWriter, r *http.Request)

@Summary Patch user @Tags users @Param id path string true "user id" @Param user body data.UserPatch true "User" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/users/{id} [PATCH]

func (*Iam) PostCheck

func (m *Iam) PostCheck(w http.ResponseWriter, r *http.Request)

@Summary Post check @Tags check @Param check body data.CheckRequest true "Check" @Success 200 {object} data.CheckResponse @Failure 400 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/check [POST]

func (*Iam) PostCheckUser

func (m *Iam) PostCheckUser(w http.ResponseWriter, r *http.Request)

@Summary Post check @Tags public @Param X-User header string false "User alias, X-User is authorized user auto adds" @Param check body data.CheckRequestUser true "Check" @Success 200 {object} data.CheckResponse @Failure 400 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /check [POST]

func (*Iam) PutPermission

func (m *Iam) PutPermission(w http.ResponseWriter, r *http.Request)

@Summary Put permission @Tags permissions @Param id path string true "permission ID" @Param permission body data.Permission true "Permission" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/permissions/{id} [PUT]

func (*Iam) PutRole

func (m *Iam) PutRole(w http.ResponseWriter, r *http.Request)

@Summary Put role @Tags roles @Param id path string true "role ID" @Param role body data.Role true "Role" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/roles/{id} [PUT]

func (*Iam) PutRoleRelation

func (m *Iam) PutRoleRelation(w http.ResponseWriter, r *http.Request)

@Summary Set role relation @Tags roles @Param relation body map[string]data.RoleRelation true "RoleRelation" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/roles/relation [PUT]

func (*Iam) PutServiceAccount

func (m *Iam) PutServiceAccount(w http.ResponseWriter, r *http.Request)

@Summary Put service account @Tags service-accounts @Param id path string true "service id" @Param user body data.User true "Service" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/service-accounts/{id} [PUT]

func (*Iam) PutUser

func (m *Iam) PutUser(w http.ResponseWriter, r *http.Request)

@Summary Put user @Tags users @Param id path string true "user id" @Param user body data.User true "User" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 404 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/users/{id} [PUT]

func (*Iam) Restore

func (m *Iam) Restore(w http.ResponseWriter, r *http.Request)

@Summary Restore Database @Tags backup @Param file formData file true "Backup file" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/restore [POST]

func (*Iam) SwaggerMiddleware

func (m *Iam) SwaggerMiddleware() (func(http.Handler) http.Handler, error)

func (*Iam) Sync

func (m *Iam) Sync(w http.ResponseWriter, r *http.Request)

@Summary Sync with write API @Tags backup @Param X-Sync-Version header string false "Sync version" @Success 200 {object} data.ResponseMessage @Failure 400 {object} httputil.Error @Failure 500 {object} httputil.Error @Router /v1/sync [POST]

func (*Iam) UIInfo

func (m *Iam) UIInfo(w http.ResponseWriter, _ *http.Request)

func (*Iam) UIMiddleware

func (m *Iam) UIMiddleware() (func(http.Handler) http.Handler, error)

func (*Iam) Version

func (m *Iam) Version(w http.ResponseWriter, r *http.Request)

@Summary Get version @Tags backup @Success 200 {object} data.ResponseVersion @Router /v1/version [GET]

type LastVersion added in v0.8.14

type LastVersion struct {
	Version uint64
	// contains filtered or unexported fields
}

func (*LastVersion) Get added in v0.8.14

func (l *LastVersion) Get() uint64

func (*LastVersion) Set added in v0.8.14

func (l *LastVersion) Set(version uint64)

type PubSubModel added in v0.8.14

type PubSubModel struct {
	Type string `json:"type"`

	Version uint64 `json:"version,omitempty"`
	ID      string `json:"id,omitempty"`
}

type Registry added in v0.8.14

type Registry struct {
	Store map[string]*Iam
	// contains filtered or unexported fields
}

func (*Registry) Get added in v0.8.14

func (r *Registry) Get(name string) *Iam

func (*Registry) Set added in v0.8.14

func (r *Registry) Set(name string, store *Iam)

type Shared added in v0.8.14

type Shared struct {
	V map[string]VersionTime
	// contains filtered or unexported fields
}

func (*Shared) Set added in v0.8.14

func (s *Shared) Set(key string, version uint64)

func (*Shared) Wait added in v0.8.14

func (s *Shared) Wait(version uint64)

type Sync

type Sync struct {
	// contains filtered or unexported fields
}

func NewSync

func NewSync(cfg SyncConfig) (*Sync, error)

func (*Sync) Redirect

func (s *Sync) Redirect(w http.ResponseWriter, r *http.Request) bool

func (*Sync) Sync

func (s *Sync) Sync(ctx context.Context, targetVersion uint64) error

func (*Sync) SyncStart

func (s *Sync) SyncStart(ctx context.Context) (func() error, error)

func (*Sync) Trigger

func (s *Sync) Trigger(ctx context.Context)

func (*Sync) UpdateLastVersion added in v0.8.14

func (s *Sync) UpdateLastVersion()

type SyncAPI

type SyncAPI struct {
	Backup  string
	Version string
	Trigger string

	WriteAPI      *url.URL
	CurrentPrefix string
}

type SyncConfig

type SyncConfig struct {
	WriteAPI    string
	PrefixPath  string
	DB          SyncDB
	Redis       redis.UniversalClient
	PubSubTopic string
}

type SyncDB

type SyncDB interface {
	Version() uint64
	Restore(r io.Reader) error
}

type SyncRequest

type SyncRequest struct {
	Force bool `json:"force"`
}

type VersionTime added in v0.8.14

type VersionTime struct {
	Version uint64
	Time    time.Time
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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