A clean, Markdown-based publishing platform made for writers. Write together, and build a community. https://writefreely.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

47 lines
1.4 KiB

  1. package migrations
  2. import (
  3. "context"
  4. "database/sql"
  5. wf_db "github.com/writeas/writefreely/db"
  6. )
  7. func oauth(db *datastore) error {
  8. dialect := wf_db.DialectMySQL
  9. if db.driverName == driverSQLite {
  10. dialect = wf_db.DialectSQLite
  11. }
  12. return wf_db.RunTransactionWithOptions(context.Background(), db.DB, &sql.TxOptions{}, func(ctx context.Context, tx *sql.Tx) error {
  13. createTableUsersOauth, err := dialect.
  14. Table("users_oauth").
  15. SetIfNotExists(true).
  16. Column(dialect.Column("user_id", wf_db.ColumnTypeInteger, wf_db.UnsetSize)).
  17. Column(dialect.Column("remote_user_id", wf_db.ColumnTypeInteger, wf_db.UnsetSize)).
  18. UniqueConstraint("user_id").
  19. UniqueConstraint("remote_user_id").
  20. ToSQL()
  21. if err != nil {
  22. return err
  23. }
  24. createTableOauthClientState, err := dialect.
  25. Table("oauth_client_state").
  26. SetIfNotExists(true).
  27. Column(dialect.Column("state", wf_db.ColumnTypeVarChar, wf_db.OptionalInt{Set: true, Value: 255})).
  28. Column(dialect.Column("used", wf_db.ColumnTypeBool, wf_db.UnsetSize)).
  29. Column(dialect.Column("created_at", wf_db.ColumnTypeDateTime, wf_db.UnsetSize).SetDefault("NOW()")).
  30. UniqueConstraint("state").
  31. ToSQL()
  32. if err != nil {
  33. return err
  34. }
  35. for _, table := range []string{createTableUsersOauth, createTableOauthClientState} {
  36. if _, err := tx.ExecContext(ctx, table); err != nil {
  37. return err
  38. }
  39. }
  40. return nil
  41. })
  42. }