123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package controller
- import (
- "net/http"
- "github.com/ente-io/museum/ente"
- "github.com/ente-io/museum/pkg/repo"
- "github.com/ente-io/museum/pkg/repo/passkey"
- "github.com/go-webauthn/webauthn/protocol"
- "github.com/go-webauthn/webauthn/webauthn"
- "github.com/google/uuid"
- )
- type PasskeyController struct {
- Repo *passkey.Repository
- UserRepo *repo.UserRepository
- }
- func (c *PasskeyController) GetPasskeys(userID int64) (passkeys []ente.Passkey, err error) {
- user, err := c.UserRepo.Get(userID)
- if err != nil {
- return
- }
- return c.Repo.GetUserPasskeys(user.ID)
- }
- func (c *PasskeyController) DeletePasskey(userID int64, passkeyID uuid.UUID) (err error) {
- user, err := c.UserRepo.Get(userID)
- if err != nil {
- return
- }
- return c.Repo.DeletePasskey(&user, passkeyID)
- }
- // RemovePasskey2FA removes all the user's passkeys to disable passkey 2FA and fall back to TOTP based 2FA if enabled.
- func (c *PasskeyController) RemovePasskey2FA(userID int64) (err error) {
- passkeys, err := c.GetPasskeys(userID)
- if err != nil {
- return
- }
- for _, passkey := range passkeys {
- err = c.DeletePasskey(userID, passkey.ID)
- if err != nil {
- return
- }
- }
- return
- }
- func (c *PasskeyController) RenamePasskey(userID int64, passkeyID uuid.UUID, newName string) (err error) {
- if len(newName) < 1 || len(newName) > 32 {
- err = ente.ErrInvalidName
- return
- }
- user, err := c.UserRepo.Get(userID)
- if err != nil {
- return
- }
- return c.Repo.RenamePasskey(&user, passkeyID, newName)
- }
- func (c *PasskeyController) BeginRegistration(userID int64) (options *protocol.CredentialCreation, session *webauthn.SessionData, sessionID uuid.UUID, err error) {
- user, err := c.UserRepo.Get(userID)
- if err != nil {
- return
- }
- return c.Repo.CreateBeginRegistrationData(&user)
- }
- func (c *PasskeyController) FinishRegistration(userID int64, friendlyName string, req *http.Request, sessionID uuid.UUID) (err error) {
- user, err := c.UserRepo.Get(userID)
- if err != nil {
- return
- }
- return c.Repo.FinishRegistration(&user, friendlyName, req, sessionID)
- }
|