mirror of https://github.com/h44z/wg-portal.git
				
				
				
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			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
 | |
| }
 |