mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2025-10-28 16:55:32 +00:00
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package dbmodels
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/pocketbase/pocketbase/core"
|
|
"github.com/pocketbase/pocketbase/tools/types"
|
|
)
|
|
|
|
func CreateAccessToken(
|
|
app core.App,
|
|
userID string,
|
|
url string,
|
|
duration time.Duration,
|
|
) (*AccessToken, error) {
|
|
collection, err := app.FindCollectionByNameOrId(ACCESS_TOKENS_TABLE)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to find '%s' collection: %w", ACCESS_TOKENS_TABLE, err)
|
|
}
|
|
|
|
accesTokenClear, err := generateSecureRandomToken(secureTokenByteLength)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to generate session token: %w", err)
|
|
}
|
|
|
|
csrfTokenClear, err := generateSecureRandomToken(secureTokenByteLength)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to generate CSRF token: %w", err)
|
|
}
|
|
|
|
record := core.NewRecord(collection)
|
|
token := NewAccessToken(record)
|
|
|
|
token.SetToken(accesTokenClear)
|
|
token.SetCSRF(csrfTokenClear)
|
|
token.SetUser(userID)
|
|
token.SetURL(url)
|
|
token.SetStatus(TOKEN_STATUS_VALUES[0]) // Active
|
|
token.SetExpires(types.NowDateTime().Add(duration))
|
|
|
|
if err := app.Save(record); err != nil {
|
|
return nil, fmt.Errorf("failed to save access token record: %w", err)
|
|
}
|
|
|
|
return token, nil
|
|
}
|