The main server, and probably only repository in this 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.

125 lines
2.4 KiB

5 years ago
5 years ago
5 years ago
  1. package sqlite
  2. import (
  3. "log"
  4. "strings"
  5. "github.com/jmoiron/sqlx"
  6. // sqlite driver
  7. _ "github.com/mattn/go-sqlite3"
  8. )
  9. var db *sqlx.DB
  10. // Initialize sets up the sqlite database.
  11. func Initialize(filename string) (err error) {
  12. if db != nil {
  13. panic("sqlite.Initialize called twice!")
  14. }
  15. db, err = sqlx.Open("sqlite3", filename)
  16. if err != nil {
  17. db = nil
  18. return err
  19. }
  20. err = db.Ping()
  21. if err != nil {
  22. db.Close()
  23. db = nil
  24. return err
  25. }
  26. tableDefs := strings.Split(tableDefStr, ";")
  27. for i, tableDef := range tableDefs {
  28. query := strings.Trim(tableDef, "\n  ")
  29. if len(query) < 2 {
  30. continue
  31. }
  32. _, err := db.Exec(query)
  33. if err != nil {
  34. log.Printf("Statement %d failed", i)
  35. db.Close()
  36. db = nil
  37. return err
  38. }
  39. }
  40. return nil
  41. }
  42. const tableDefStr = `
  43. CREATE TABLE IF NOT EXISTS "user" (
  44. id INTEGER PRIMARY KEY AUTOINCREMENT,
  45. name VARCHAR(64) NOT NULL UNIQUE,
  46. hash VARCHAR(128) NOT NULL
  47. );
  48. CREATE TABLE IF NOT EXISTS "session" (
  49. id CHAR(64) PRIMARY KEY,
  50. user_id INTEGER NOT NULL,
  51. expire_date DATE NOT NULL
  52. );
  53. CREATE TABLE IF NOT EXISTS "bridge" (
  54. id INTEGER PRIMARY KEY AUTOINCREMENT,
  55. internal_id VARCHAR(255) NOT NULL,
  56. name VARCHAR(255) NOT NULL,
  57. driver VARCHAR(255) NOT NULL,
  58. addr VARCHAR(255) NOT NULL,
  59. key BLOB NOT NULL
  60. );
  61. CREATE TABLE IF NOT EXISTS "light" (
  62. id INTEGER PRIMARY KEY AUTOINCREMENT,
  63. bridge_id INTEGER NOT NULL,
  64. internal_id VARCHAR(255) NOT NULL,
  65. group_id INTEGER NOT NULL,
  66. name VARCHAR(255) NOT NULL,
  67. enabled BOOLEAN NOT NULL,
  68. color VARCHAR(255) NOT NULL,
  69. brightness INTEGER NOT NULL
  70. );
  71. CREATE TABLE IF NOT EXISTS "button" (
  72. id INTEGER PRIMARY KEY AUTOINCREMENT,
  73. bridge_id INTEGER NOT NULL,
  74. internal_index INTEGER NOT NULL,
  75. internal_id VARCHAR(255) NOT NULL,
  76. target_group_id INTEGER NOT NULL,
  77. name VARCHAR(255) NOT NULL,
  78. kind VARCHAR(255) NOT NULL,
  79. missing BOOLEAN NOT NULL,
  80. num_buttons INTEGER NOT NULL
  81. );
  82. CREATE TABLE IF NOT EXISTS "group" (
  83. id INTEGER PRIMARY KEY AUTOINCREMENT,
  84. name VARCHAR(255) NOT NULL
  85. );
  86. CREATE TABLE IF NOT EXISTS "group_permission" (
  87. group_id INT NOT NULL,
  88. user_id INT NOT NULL,
  89. read BOOLEAN NOT NULL,
  90. write BOOLEAN NOT NULL,
  91. 'create' BOOLEAN NOT NULL,
  92. 'delete' BOOLEAN NOT NULL,
  93. manage BOOLEAN NOT NULL,
  94. PRIMARY KEY (group_id, user_id)
  95. );
  96. CREATE TABLE IF NOT EXISTS "group_light" (
  97. group_id INT NOT NULL,
  98. light_id INT NOT NULL,
  99. PRIMARY KEY (group_id, light_id)
  100. );
  101. REPLACE INTO "group" (id, name) VALUES (0, "Lonely Lights");
  102. `