idp.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package postgres
  2. import (
  3. "context"
  4. "strings"
  5. storepb "github.com/usememos/memos/proto/gen/store"
  6. "github.com/usememos/memos/store"
  7. )
  8. func (d *DB) CreateIdentityProvider(ctx context.Context, create *store.IdentityProvider) (*store.IdentityProvider, error) {
  9. fields := []string{"name", "type", "identifier_filter", "config"}
  10. args := []any{create.Name, create.Type.String(), create.IdentifierFilter, create.Config}
  11. stmt := "INSERT INTO idp (" + strings.Join(fields, ", ") + ") VALUES (" + placeholders(len(args)) + ") RETURNING id"
  12. if err := d.db.QueryRowContext(ctx, stmt, args...).Scan(&create.ID); err != nil {
  13. return nil, err
  14. }
  15. identityProvider := create
  16. return identityProvider, nil
  17. }
  18. func (d *DB) ListIdentityProviders(ctx context.Context, find *store.FindIdentityProvider) ([]*store.IdentityProvider, error) {
  19. where, args := []string{"1 = 1"}, []any{}
  20. if v := find.ID; v != nil {
  21. where, args = append(where, "id = "+placeholder(len(args)+1)), append(args, *v)
  22. }
  23. rows, err := d.db.QueryContext(ctx, `
  24. SELECT
  25. id,
  26. name,
  27. type,
  28. identifier_filter,
  29. config
  30. FROM idp
  31. WHERE `+strings.Join(where, " AND ")+` ORDER BY id ASC`,
  32. args...,
  33. )
  34. if err != nil {
  35. return nil, err
  36. }
  37. defer rows.Close()
  38. var identityProviders []*store.IdentityProvider
  39. for rows.Next() {
  40. var identityProvider store.IdentityProvider
  41. var typeString string
  42. if err := rows.Scan(
  43. &identityProvider.ID,
  44. &identityProvider.Name,
  45. &typeString,
  46. &identityProvider.IdentifierFilter,
  47. &identityProvider.Config,
  48. ); err != nil {
  49. return nil, err
  50. }
  51. identityProvider.Type = storepb.IdentityProvider_Type(storepb.IdentityProvider_Type_value[typeString])
  52. identityProviders = append(identityProviders, &identityProvider)
  53. }
  54. if err := rows.Err(); err != nil {
  55. return nil, err
  56. }
  57. return identityProviders, nil
  58. }
  59. func (d *DB) UpdateIdentityProvider(ctx context.Context, update *store.UpdateIdentityProvider) (*store.IdentityProvider, error) {
  60. set, args := []string{}, []any{}
  61. if v := update.Name; v != nil {
  62. set, args = append(set, "name = "+placeholder(len(args)+1)), append(args, *v)
  63. }
  64. if v := update.IdentifierFilter; v != nil {
  65. set, args = append(set, "identifier_filter = "+placeholder(len(args)+1)), append(args, *v)
  66. }
  67. if v := update.Config; v != nil {
  68. set, args = append(set, "config = "+placeholder(len(args)+1)), append(args, *v)
  69. }
  70. stmt := `
  71. UPDATE idp
  72. SET ` + strings.Join(set, ", ") + `
  73. WHERE id = ` + placeholder(len(args)+1) + `
  74. RETURNING id, name, type, identifier_filter, config
  75. `
  76. args = append(args, update.ID)
  77. var identityProvider store.IdentityProvider
  78. var typeString string
  79. if err := d.db.QueryRowContext(ctx, stmt, args...).Scan(
  80. &identityProvider.ID,
  81. &identityProvider.Name,
  82. &typeString,
  83. &identityProvider.IdentifierFilter,
  84. &identityProvider.Config,
  85. ); err != nil {
  86. return nil, err
  87. }
  88. identityProvider.Type = storepb.IdentityProvider_Type(storepb.IdentityProvider_Type_value[typeString])
  89. return &identityProvider, nil
  90. }
  91. func (d *DB) DeleteIdentityProvider(ctx context.Context, delete *store.DeleteIdentityProvider) error {
  92. where, args := []string{"id = $1"}, []any{delete.ID}
  93. stmt := `DELETE FROM idp WHERE ` + strings.Join(where, " AND ")
  94. result, err := d.db.ExecContext(ctx, stmt, args...)
  95. if err != nil {
  96. return err
  97. }
  98. if _, err = result.RowsAffected(); err != nil {
  99. return err
  100. }
  101. return nil
  102. }