database.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package database
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "github.com/rqlite/gorqlite"
  6. )
  7. const NETWORKS_TABLE_NAME = "networks"
  8. const NODES_TABLE_NAME = "nodes"
  9. const USERS_TABLE_NAME = "users"
  10. const DNS_TABLE_NAME = "dns"
  11. const EXT_CLIENT_TABLE_NAME = "extclients"
  12. const INT_CLIENTS_TABLE_NAME = "intclients"
  13. const PEERS_TABLE_NAME = "peers"
  14. const DATABASE_FILENAME = "netmaker.db"
  15. var Database gorqlite.Connection
  16. func InitializeDatabase() error {
  17. conn, err := gorqlite.Open("http://")
  18. if err != nil {
  19. return err
  20. }
  21. // sqliteDatabase, _ := sql.Open("sqlite3", "./database/"+dbFilename)
  22. Database = conn
  23. Database.SetConsistencyLevel("strong")
  24. createTables()
  25. return nil
  26. }
  27. func createTables() {
  28. createTable(NETWORKS_TABLE_NAME)
  29. createTable(NODES_TABLE_NAME)
  30. createTable(USERS_TABLE_NAME)
  31. createTable(DNS_TABLE_NAME)
  32. createTable(EXT_CLIENT_TABLE_NAME)
  33. createTable(INT_CLIENTS_TABLE_NAME)
  34. createTable(PEERS_TABLE_NAME)
  35. }
  36. func createTable(tableName string) error {
  37. _, err := Database.WriteOne("CREATE TABLE IF NOT EXISTS " + tableName + " (key TEXT NOT NULL UNIQUE PRIMARY KEY, value TEXT)")
  38. if err != nil {
  39. return err
  40. }
  41. return nil
  42. }
  43. func isJSONString(value string) bool {
  44. var jsonInt interface{}
  45. return json.Unmarshal([]byte(value), &jsonInt) == nil
  46. }
  47. func Insert(key string, value string, tableName string) error {
  48. if key != "" && value != "" && isJSONString(value) {
  49. _, err := Database.WriteOne("INSERT OR REPLACE INTO " + tableName + " (key, value) VALUES ('" + key + "', '" + value + "')")
  50. if err != nil {
  51. return err
  52. }
  53. return nil
  54. } else {
  55. return errors.New("invalid insert " + key + " : " + value)
  56. }
  57. }
  58. func InsertPeer(key string, value string) error {
  59. if key != "" && value != "" && isJSONString(value) {
  60. _, err := Database.WriteOne("INSERT OR REPLACE INTO " + PEERS_TABLE_NAME + " (key, value) VALUES ('" + key + "', '" + value + "')")
  61. if err != nil {
  62. return err
  63. }
  64. return nil
  65. } else {
  66. return errors.New("invalid peer insert " + key + " : " + value)
  67. }
  68. }
  69. func DeleteRecord(tableName string, key string) error {
  70. _, err := Database.WriteOne("DELETE FROM " + tableName + " WHERE key = \"" + key + "\"")
  71. if err != nil {
  72. return err
  73. }
  74. return nil
  75. }
  76. func DeleteAllRecords(tableName string) error {
  77. _, err := Database.WriteOne("DELETE TABLE " + tableName)
  78. if err != nil {
  79. return err
  80. }
  81. err = createTable(tableName)
  82. if err != nil {
  83. return err
  84. }
  85. return nil
  86. }
  87. func FetchRecord(tableName string, key string) (string, error) {
  88. results, err := FetchRecords(tableName)
  89. if err != nil {
  90. return "", err
  91. }
  92. return results[key], nil
  93. }
  94. func FetchRecords(tableName string) (map[string]string, error) {
  95. row, err := Database.QueryOne("SELECT * FROM " + tableName + " ORDER BY key")
  96. if err != nil {
  97. return nil, err
  98. }
  99. records := make(map[string]string)
  100. for row.Next() { // Iterate and fetch the records from result cursor
  101. var key string
  102. var value string
  103. row.Scan(&key, &value)
  104. records[key] = value
  105. }
  106. // log.Println(records)
  107. return records, nil
  108. }