controller.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package cast
  2. import (
  3. "context"
  4. "github.com/ente-io/museum/ente/cast"
  5. "github.com/ente-io/museum/pkg/controller/access"
  6. castRepo "github.com/ente-io/museum/pkg/repo/cast"
  7. "github.com/ente-io/museum/pkg/utils/auth"
  8. "github.com/ente-io/museum/pkg/utils/network"
  9. "github.com/ente-io/stacktrace"
  10. "github.com/gin-gonic/gin"
  11. "github.com/sirupsen/logrus"
  12. )
  13. type Controller struct {
  14. CastRepo *castRepo.Repository
  15. AccessCtrl access.Controller
  16. }
  17. func NewController(castRepo *castRepo.Repository,
  18. accessCtrl access.Controller,
  19. ) *Controller {
  20. return &Controller{
  21. CastRepo: castRepo,
  22. AccessCtrl: accessCtrl,
  23. }
  24. }
  25. func (c *Controller) RegisterDevice(ctx *gin.Context, request *cast.RegisterDeviceRequest) (string, error) {
  26. return c.CastRepo.AddCode(ctx, request.PublicKey, network.GetClientIP(ctx))
  27. }
  28. func (c *Controller) GetPublicKey(ctx *gin.Context, deviceCode string) (string, error) {
  29. pubKey, ip, err := c.CastRepo.GetPubKeyAndIp(ctx, deviceCode)
  30. if err != nil {
  31. return "", stacktrace.Propagate(err, "")
  32. }
  33. if ip != network.GetClientIP(ctx) {
  34. logrus.WithFields(logrus.Fields{
  35. "deviceCode": deviceCode,
  36. "ip": ip,
  37. "clientIP": network.GetClientIP(ctx),
  38. }).Warn("GetPublicKey: IP mismatch")
  39. }
  40. return pubKey, nil
  41. }
  42. func (c *Controller) GetEncCastData(ctx context.Context, deviceCode string) (*string, error) {
  43. return c.CastRepo.GetEncCastData(ctx, deviceCode)
  44. }
  45. func (c *Controller) InsertCastData(ctx *gin.Context, request *cast.CastRequest) error {
  46. userID := auth.GetUserID(ctx.Request.Header)
  47. return c.CastRepo.InsertCastData(ctx, userID, request.DeviceCode, request.CollectionID, request.CastToken, request.EncPayload)
  48. }
  49. func (c *Controller) RevokeAllToken(ctx *gin.Context) error {
  50. userID := auth.GetUserID(ctx.Request.Header)
  51. return c.CastRepo.RevokeTokenForUser(ctx, userID)
  52. }
  53. func (c *Controller) GetCollectionAndCasterIDForToken(ctx *gin.Context, token string) (*cast.AuthContext, error) {
  54. collectId, userId, err := c.CastRepo.GetCollectionAndCasterIDForToken(ctx, token)
  55. if err != nil {
  56. return nil, stacktrace.Propagate(err, "")
  57. }
  58. _, err = c.AccessCtrl.GetCollection(ctx, &access.GetCollectionParams{CollectionID: collectId, ActorUserID: userId})
  59. if err != nil {
  60. return nil, stacktrace.Propagate(err, "failed to verify cast access")
  61. }
  62. go c.CastRepo.UpdateLastUsedAtForToken(ctx, token)
  63. return &cast.AuthContext{UserID: userId, CollectionID: collectId}, nil
  64. }