2020-05-09-crypto-store.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package upgrades
  2. import (
  3. "database/sql"
  4. )
  5. func init() {
  6. upgrades[13] = upgrade{"Add crypto store to database", func(tx *sql.Tx, ctx context) error {
  7. // TODO use DATETIME instead of timestamp and BLOB instead of bytea for sqlite
  8. _, err := tx.Exec(`CREATE TABLE crypto_account (
  9. device_id VARCHAR(255) PRIMARY KEY,
  10. shared BOOLEAN NOT NULL,
  11. sync_token TEXT NOT NULL,
  12. account bytea NOT NULL
  13. )`)
  14. if err != nil {
  15. return err
  16. }
  17. _, err = tx.Exec(`CREATE TABLE crypto_message_index (
  18. sender_key CHAR(43),
  19. session_id CHAR(43),
  20. "index" INTEGER,
  21. event_id VARCHAR(255) NOT NULL,
  22. timestamp BIGINT NOT NULL,
  23. PRIMARY KEY (sender_key, session_id, "index")
  24. )`)
  25. if err != nil {
  26. return err
  27. }
  28. _, err = tx.Exec(`CREATE TABLE crypto_tracked_user (
  29. user_id VARCHAR(255) PRIMARY KEY
  30. )`)
  31. if err != nil {
  32. return err
  33. }
  34. _, err = tx.Exec(`CREATE TABLE crypto_device (
  35. user_id VARCHAR(255),
  36. device_id VARCHAR(255),
  37. identity_key CHAR(43) NOT NULL,
  38. signing_key CHAR(43) NOT NULL,
  39. trust SMALLINT NOT NULL,
  40. deleted BOOLEAN NOT NULL,
  41. name VARCHAR(255) NOT NULL,
  42. PRIMARY KEY (user_id, device_id)
  43. )`)
  44. if err != nil {
  45. return err
  46. }
  47. _, err = tx.Exec(`CREATE TABLE crypto_olm_session (
  48. session_id CHAR(43) PRIMARY KEY,
  49. sender_key CHAR(43) NOT NULL,
  50. session bytea NOT NULL,
  51. created_at timestamp NOT NULL,
  52. last_used timestamp NOT NULL
  53. )`)
  54. if err != nil {
  55. return err
  56. }
  57. _, err = tx.Exec(`CREATE TABLE crypto_megolm_inbound_session (
  58. session_id CHAR(43) PRIMARY KEY,
  59. sender_key CHAR(43) NOT NULL,
  60. signing_key CHAR(43) NOT NULL,
  61. room_id VARCHAR(255) NOT NULL,
  62. session bytea NOT NULL,
  63. forwarding_chains bytea NOT NULL
  64. )`)
  65. if err != nil {
  66. return err
  67. }
  68. return nil
  69. }}
  70. }