wg-portal/internal/app/api/v0/model/models_authentication.go
2025-05-12 22:53:43 +02:00

76 lines
2.1 KiB
Go

package model
import (
"slices"
"strings"
"github.com/h44z/wg-portal/internal/domain"
)
type LoginProviderInfo struct {
Identifier string `json:"Identifier" example:"google"`
Name string `json:"Name" example:"Login with Google"`
ProviderUrl string `json:"ProviderUrl" example:"/auth/google/login"`
CallbackUrl string `json:"CallbackUrl" example:"/auth/google/callback"`
}
func NewLoginProviderInfo(src *domain.LoginProviderInfo) *LoginProviderInfo {
return &LoginProviderInfo{
Identifier: src.Identifier,
Name: src.Name,
ProviderUrl: src.ProviderUrl,
CallbackUrl: src.CallbackUrl,
}
}
func NewLoginProviderInfos(src []domain.LoginProviderInfo) []LoginProviderInfo {
accessories := make([]LoginProviderInfo, len(src))
for i := range src {
accessories[i] = *NewLoginProviderInfo(&src[i])
}
return accessories
}
type SessionInfo struct {
LoggedIn bool `json:"LoggedIn"`
IsAdmin bool `json:"IsAdmin,omitempty"`
UserIdentifier *string `json:"UserIdentifier,omitempty"`
UserFirstname *string `json:"UserFirstname,omitempty"`
UserLastname *string `json:"UserLastname,omitempty"`
UserEmail *string `json:"UserEmail,omitempty"`
}
type OauthInitiationResponse struct {
RedirectUrl string
State string
}
type WebAuthnCredentialRequest struct {
Name string `json:"Name"`
}
type WebAuthnCredentialResponse struct {
ID string `json:"ID"`
Name string `json:"Name"`
CreatedAt string `json:"CreatedAt"`
}
func NewWebAuthnCredentialResponse(src domain.UserWebauthnCredential) WebAuthnCredentialResponse {
return WebAuthnCredentialResponse{
ID: src.CredentialIdentifier,
Name: src.DisplayName,
CreatedAt: src.CreatedAt.Format("2006-01-02 15:04:05"),
}
}
func NewWebAuthnCredentialResponses(src []domain.UserWebauthnCredential) []WebAuthnCredentialResponse {
credentials := make([]WebAuthnCredentialResponse, len(src))
for i := range src {
credentials[i] = NewWebAuthnCredentialResponse(src[i])
}
// Sort by CreatedAt, newest first
slices.SortFunc(credentials, func(i, j WebAuthnCredentialResponse) int {
return strings.Compare(i.CreatedAt, j.CreatedAt)
})
return credentials
}