1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package cast
- import (
- "context"
- "github.com/ente-io/museum/ente/cast"
- "github.com/ente-io/museum/pkg/controller/access"
- castRepo "github.com/ente-io/museum/pkg/repo/cast"
- "github.com/ente-io/museum/pkg/utils/auth"
- "github.com/ente-io/museum/pkg/utils/network"
- "github.com/ente-io/stacktrace"
- "github.com/gin-gonic/gin"
- "github.com/sirupsen/logrus"
- )
- type Controller struct {
- CastRepo *castRepo.Repository
- AccessCtrl access.Controller
- }
- func NewController(castRepo *castRepo.Repository,
- accessCtrl access.Controller,
- ) *Controller {
- return &Controller{
- CastRepo: castRepo,
- AccessCtrl: accessCtrl,
- }
- }
- func (c *Controller) RegisterDevice(ctx *gin.Context, request *cast.RegisterDeviceRequest) (string, error) {
- return c.CastRepo.AddCode(ctx, request.PublicKey, network.GetClientIP(ctx))
- }
- func (c *Controller) GetPublicKey(ctx *gin.Context, deviceCode string) (string, error) {
- pubKey, ip, err := c.CastRepo.GetPubKeyAndIp(ctx, deviceCode)
- if err != nil {
- return "", stacktrace.Propagate(err, "")
- }
- if ip != network.GetClientIP(ctx) {
- logrus.WithFields(logrus.Fields{
- "deviceCode": deviceCode,
- "ip": ip,
- "clientIP": network.GetClientIP(ctx),
- }).Warn("GetPublicKey: IP mismatch")
- }
- return pubKey, nil
- }
- func (c *Controller) GetEncCastData(ctx context.Context, deviceCode string) (*string, error) {
- return c.CastRepo.GetEncCastData(ctx, deviceCode)
- }
- func (c *Controller) InsertCastData(ctx *gin.Context, request *cast.CastRequest) error {
- userID := auth.GetUserID(ctx.Request.Header)
- return c.CastRepo.InsertCastData(ctx, userID, request.DeviceCode, request.CollectionID, request.CastToken, request.EncPayload)
- }
- func (c *Controller) RevokeAllToken(ctx *gin.Context) error {
- userID := auth.GetUserID(ctx.Request.Header)
- return c.CastRepo.RevokeTokenForUser(ctx, userID)
- }
- func (c *Controller) GetCollectionAndCasterIDForToken(ctx *gin.Context, token string) (*cast.AuthContext, error) {
- collectId, userId, err := c.CastRepo.GetCollectionAndCasterIDForToken(ctx, token)
- if err != nil {
- return nil, stacktrace.Propagate(err, "")
- }
- _, err = c.AccessCtrl.GetCollection(ctx, &access.GetCollectionParams{CollectionID: collectId, ActorUserID: userId})
- if err != nil {
- return nil, stacktrace.Propagate(err, "failed to verify cast access")
- }
- go c.CastRepo.UpdateLastUsedAtForToken(ctx, token)
- return &cast.AuthContext{UserID: userId, CollectionID: collectId}, nil
- }
|