passkey.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package user
  2. import (
  3. "github.com/ente-io/museum/ente"
  4. "github.com/ente-io/museum/pkg/utils/auth"
  5. "github.com/ente-io/stacktrace"
  6. "github.com/gin-gonic/gin"
  7. )
  8. // GetTwoFactorRecoveryStatus returns a user's passkey reset status
  9. func (c *UserController) GetTwoFactorRecoveryStatus(ctx *gin.Context) (*ente.TwoFactorRecoveryStatus, error) {
  10. userID := auth.GetUserID(ctx.Request.Header)
  11. return c.TwoFactorRecoveryRepo.GetStatus(userID)
  12. }
  13. func (c *UserController) ConfigurePasskeyRecovery(ctx *gin.Context, req *ente.SetPasskeyRecoveryRequest) error {
  14. userID := auth.GetUserID(ctx.Request.Header)
  15. return c.TwoFactorRecoveryRepo.SetPasskeyRecovery(ctx, userID, req)
  16. }
  17. func (c *UserController) GetPasskeyRecoveryResponse(ctx *gin.Context, passKeySessionID string) (*ente.TwoFactorRecoveryResponse, error) {
  18. userID, err := c.PasskeyRepo.GetUserIDWithPasskeyTwoFactorSession(passKeySessionID)
  19. if err != nil {
  20. return nil, err
  21. }
  22. recoveryStatus, err := c.TwoFactorRecoveryRepo.GetStatus(userID)
  23. if err != nil {
  24. return nil, err
  25. }
  26. if !recoveryStatus.IsPasskeyRecoveryEnabled {
  27. return nil, ente.NewBadRequestWithMessage("Passkey reset is not configured")
  28. }
  29. result, err := c.TwoFactorRecoveryRepo.GetPasskeyRecoveryData(ctx, userID)
  30. if err != nil {
  31. return nil, err
  32. }
  33. if result == nil {
  34. return nil, ente.NewBadRequestWithMessage("Passkey reset is not configured")
  35. }
  36. return result, nil
  37. }
  38. func (c *UserController) SkipPasskeyVerification(context *gin.Context, req *ente.TwoFactorRemovalRequest) (*ente.TwoFactorAuthorizationResponse, error) {
  39. userID, err := c.PasskeyRepo.GetUserIDWithPasskeyTwoFactorSession(req.SessionID)
  40. if err != nil {
  41. return nil, stacktrace.Propagate(err, "")
  42. }
  43. exists, err := c.TwoFactorRecoveryRepo.ValidatePasskeyRecoverySecret(userID, req.Secret)
  44. if err != nil {
  45. return nil, stacktrace.Propagate(err, "")
  46. }
  47. if !exists {
  48. return nil, stacktrace.Propagate(ente.ErrPermissionDenied, "")
  49. }
  50. response, err := c.GetKeyAttributeAndToken(context, userID)
  51. if err != nil {
  52. return nil, stacktrace.Propagate(err, "")
  53. }
  54. return &response, nil
  55. }