api login method

This commit is contained in:
Stephan D
2026-02-28 10:07:52 +01:00
parent f50313c30b
commit 800f8c12f8
19 changed files with 455 additions and 24 deletions

View File

@@ -16,16 +16,18 @@ type AccountToken struct {
Login string
Name string
Locale string
ClientID string
Expiration time.Time
Pending bool
}
func createAccountToken(a *model.Account, expiration int) AccountToken {
func createAccountToken(a *model.Account, expiration int, clientID string) AccountToken {
return AccountToken{
AccountRef: *a.GetID(),
Login: a.Login,
Name: a.Name,
Locale: a.Locale,
ClientID: clientID,
Expiration: time.Now().Add(mduration.Param2Duration(expiration, time.Hour)),
Pending: false,
}
@@ -45,6 +47,7 @@ const (
paramNameName = "name"
paramNameLocale = "locale"
paramNameLogin = "login"
paramNameClientID = "clientId"
paramNameExpiration = "exp"
paramNamePending = "pending"
)
@@ -68,6 +71,11 @@ func Claims2Token(claims middleware.MapClaims) (*AccountToken, error) {
if at.Locale, err = getTokenParam(claims, paramNameLocale); err != nil {
return nil, err
}
if clientID, ok := claims[paramNameClientID]; ok {
if clientIDText, ok := clientID.(string); ok {
at.ClientID = clientIDText
}
}
if pending, ok := claims[paramNamePending]; ok {
if pbool, ok := pending.(bool); ok {
at.Pending = pbool
@@ -91,19 +99,24 @@ func Claims2Token(claims middleware.MapClaims) (*AccountToken, error) {
}
func Account2Claims(a *model.Account, expiration int) middleware.MapClaims {
t := createAccountToken(a, expiration)
return Account2ClaimsForClient(a, expiration, "")
}
func Account2ClaimsForClient(a *model.Account, expiration int, clientID string) middleware.MapClaims {
t := createAccountToken(a, expiration, clientID)
return middleware.MapClaims{
paramNameID: t.AccountRef.Hex(),
paramNameLogin: t.Login,
paramNameName: t.Name,
paramNameLocale: t.Locale,
paramNameClientID: t.ClientID,
paramNameExpiration: int64(t.Expiration.Unix()),
paramNamePending: t.Pending,
}
}
func PendingAccount2Claims(a *model.Account, expirationMinutes int) middleware.MapClaims {
t := createAccountToken(a, expirationMinutes/60)
t := createAccountToken(a, expirationMinutes/60, "")
t.Expiration = time.Now().Add(time.Duration(expirationMinutes) * time.Minute)
t.Pending = true
return middleware.MapClaims{