idp.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package store
  2. import (
  3. "context"
  4. )
  5. type IdentityProviderType string
  6. const (
  7. IdentityProviderOAuth2Type IdentityProviderType = "OAUTH2"
  8. )
  9. func (t IdentityProviderType) String() string {
  10. return string(t)
  11. }
  12. type IdentityProviderConfig struct {
  13. OAuth2Config *IdentityProviderOAuth2Config
  14. }
  15. type IdentityProviderOAuth2Config struct {
  16. ClientID string `json:"clientId"`
  17. ClientSecret string `json:"clientSecret"`
  18. AuthURL string `json:"authUrl"`
  19. TokenURL string `json:"tokenUrl"`
  20. UserInfoURL string `json:"userInfoUrl"`
  21. Scopes []string `json:"scopes"`
  22. FieldMapping *FieldMapping `json:"fieldMapping"`
  23. }
  24. type FieldMapping struct {
  25. Identifier string `json:"identifier"`
  26. DisplayName string `json:"displayName"`
  27. Email string `json:"email"`
  28. }
  29. type IdentityProvider struct {
  30. ID int32
  31. Name string
  32. Type IdentityProviderType
  33. IdentifierFilter string
  34. Config *IdentityProviderConfig
  35. }
  36. type FindIdentityProvider struct {
  37. ID *int32
  38. }
  39. type UpdateIdentityProvider struct {
  40. ID int32
  41. Type IdentityProviderType
  42. Name *string
  43. IdentifierFilter *string
  44. Config *IdentityProviderConfig
  45. }
  46. type DeleteIdentityProvider struct {
  47. ID int32
  48. }
  49. func (s *Store) CreateIdentityProvider(ctx context.Context, create *IdentityProvider) (*IdentityProvider, error) {
  50. identityProvider, err := s.driver.CreateIdentityProvider(ctx, create)
  51. if err != nil {
  52. return nil, err
  53. }
  54. s.idpCache.Store(identityProvider.ID, identityProvider)
  55. return identityProvider, nil
  56. }
  57. func (s *Store) ListIdentityProviders(ctx context.Context, find *FindIdentityProvider) ([]*IdentityProvider, error) {
  58. identityProviders, err := s.driver.ListIdentityProviders(ctx, find)
  59. if err != nil {
  60. return nil, err
  61. }
  62. for _, item := range identityProviders {
  63. s.idpCache.Store(item.ID, item)
  64. }
  65. return identityProviders, nil
  66. }
  67. func (s *Store) GetIdentityProvider(ctx context.Context, find *FindIdentityProvider) (*IdentityProvider, error) {
  68. if find.ID != nil {
  69. if cache, ok := s.idpCache.Load(*find.ID); ok {
  70. return cache.(*IdentityProvider), nil
  71. }
  72. }
  73. list, err := s.ListIdentityProviders(ctx, find)
  74. if err != nil {
  75. return nil, err
  76. }
  77. if len(list) == 0 {
  78. return nil, nil
  79. }
  80. identityProvider := list[0]
  81. return identityProvider, nil
  82. }
  83. func (s *Store) UpdateIdentityProvider(ctx context.Context, update *UpdateIdentityProvider) (*IdentityProvider, error) {
  84. identityProvider, err := s.driver.UpdateIdentityProvider(ctx, update)
  85. if err != nil {
  86. return nil, err
  87. }
  88. s.idpCache.Store(identityProvider.ID, identityProvider)
  89. return identityProvider, nil
  90. }
  91. func (s *Store) DeleteIdentityProvider(ctx context.Context, delete *DeleteIdentityProvider) error {
  92. err := s.driver.DeleteIdentityProvider(ctx, delete)
  93. if err != nil {
  94. return err
  95. }
  96. s.idpCache.Delete(delete.ID)
  97. return nil
  98. }