ente/server/pkg/api/passkeys.go
2024-03-01 13:37:01 +05:30

90 lines
2 KiB
Go

package api
import (
"net/http"
"github.com/ente-io/museum/pkg/controller"
"github.com/ente-io/museum/pkg/utils/auth"
"github.com/ente-io/museum/pkg/utils/handler"
"github.com/ente-io/stacktrace"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
type PasskeyHandler struct {
Controller *controller.PasskeyController
}
func (h *PasskeyHandler) GetPasskeys(c *gin.Context) {
userID := auth.GetUserID(c.Request.Header)
passkeys, err := h.Controller.GetPasskeys(userID)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, ""))
return
}
c.JSON(http.StatusOK, gin.H{
"passkeys": passkeys,
})
}
func (h *PasskeyHandler) RenamePasskey(c *gin.Context) {
userID := auth.GetUserID(c.Request.Header)
passkeyID := uuid.MustParse(c.Param("passkeyID"))
newName := c.Query("friendlyName")
err := h.Controller.RenamePasskey(userID, passkeyID, newName)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, ""))
return
}
c.JSON(http.StatusOK, gin.H{})
}
func (h *PasskeyHandler) DeletePasskey(c *gin.Context) {
userID := auth.GetUserID(c.Request.Header)
passkeyID := uuid.MustParse(c.Param("passkeyID"))
err := h.Controller.DeletePasskey(userID, passkeyID)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, ""))
return
}
c.JSON(http.StatusOK, gin.H{})
}
func (h *PasskeyHandler) BeginRegistration(c *gin.Context) {
userID := auth.GetUserID(c.Request.Header)
options, _, sessionID, err := h.Controller.BeginRegistration(userID)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, ""))
return
}
c.JSON(http.StatusOK, gin.H{
"options": options,
"sessionID": sessionID,
})
}
func (h *PasskeyHandler) FinishRegistration(c *gin.Context) {
userID := auth.GetUserID(c.Request.Header)
friendlyName := c.Query("friendlyName")
sessionID := uuid.MustParse(c.Query("sessionID"))
err := h.Controller.FinishRegistration(userID, friendlyName, c.Request, sessionID)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, ""))
return
}
c.JSON(http.StatusOK, gin.H{})
}