grpc.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package grpc
  2. import (
  3. "context"
  4. "strconv"
  5. "github.com/porter-dev/porter/internal/models"
  6. "github.com/porter-dev/porter/provisioner/pb"
  7. "github.com/porter-dev/porter/provisioner/server/authn"
  8. "github.com/porter-dev/porter/provisioner/server/config"
  9. "google.golang.org/grpc/metadata"
  10. )
  11. type ProvisionerServer struct {
  12. pb.UnimplementedProvisionerServer
  13. config *config.Config
  14. }
  15. func NewProvisionerServer(config *config.Config) *ProvisionerServer {
  16. return &ProvisionerServer{
  17. config: config,
  18. }
  19. }
  20. func verifyStaticTokenContext(config *config.Config, ctx context.Context) (*models.UniqueNameWithOperation, bool) {
  21. streamContext, ok := metadata.FromIncomingContext(ctx)
  22. if !ok {
  23. return nil, false
  24. }
  25. tokenArr, exists := streamContext["token"]
  26. if !exists || len(tokenArr) != 1 {
  27. return nil, false
  28. }
  29. err := authn.ValidateStaticToken(config, tokenArr[0])
  30. if err != nil {
  31. return nil, false
  32. }
  33. workspaceID, exists := streamContext["workspace_id"]
  34. if !exists || len(workspaceID) != 1 {
  35. return nil, false
  36. }
  37. // parse workspace id
  38. name, err := models.ParseWorkspaceID(workspaceID[0])
  39. if err != nil {
  40. return nil, false
  41. }
  42. return name, true
  43. }
  44. func verifyPorterTokenContext(config *config.Config, ctx context.Context) (*models.UniqueNameWithOperation, bool) {
  45. streamContext, ok := metadata.FromIncomingContext(ctx)
  46. if !ok {
  47. return nil, false
  48. }
  49. // check token and token id
  50. tokenIDArr, exists := streamContext["token_id"]
  51. if !exists || len(tokenIDArr) != 1 {
  52. return nil, false
  53. }
  54. tokenID, err := strconv.ParseUint(tokenIDArr[0], 10, 64)
  55. if err != nil {
  56. return nil, false
  57. }
  58. tokenArr, exists := streamContext["token"]
  59. if !exists || len(tokenArr) != 1 {
  60. return nil, false
  61. }
  62. _, err = authn.ValidatePorterToken(config, uint(tokenID), tokenArr[0])
  63. if err != nil {
  64. return nil, false
  65. }
  66. workspaceID, exists := streamContext["workspace_id"]
  67. if !exists || len(workspaceID) != 1 {
  68. return nil, false
  69. }
  70. // parse workspace id
  71. name, err := models.ParseWorkspaceID(workspaceID[0])
  72. if err != nil {
  73. return nil, false
  74. }
  75. return name, true
  76. }