config.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "golang.org/x/crypto/bcrypt"
  6. "io/ioutil"
  7. "os"
  8. "time"
  9. )
  10. var configFile = "config.json"
  11. var config = &configMain{
  12. Admins: map[string]configAdmin{
  13. "admin": {"admin", []byte("$2a$14$iAOnPBQp6rlPIMGmTzH8qef1pK6tgl9yIfSLlZ2Z9IzIYn6hQPawi")},
  14. },
  15. Boards: map[uint16]configBoard{},
  16. Secret: RandString(24),
  17. }
  18. type configMain struct{
  19. Admins map[string]configAdmin `json:"admins"`
  20. Boards map[uint16]configBoard `json:"boards"`
  21. Secret string `json:"secret"`
  22. }
  23. type configAdmin struct{
  24. Username string `json:"user"`
  25. Hash []byte `json:"hash"`
  26. }
  27. func (a *configAdmin) newPassword(pass string) error {
  28. var err error
  29. a.Hash, err = bcrypt.GenerateFromPassword([]byte(pass), 14)
  30. return err
  31. }
  32. func (a *configAdmin) checkPassword(pass string) bool {
  33. err := bcrypt.CompareHashAndPassword(a.Hash, []byte(pass))
  34. return err == nil
  35. }
  36. type configBoard struct{
  37. ID uint16 `json:"ID"`
  38. KEY []byte `json:"KEY"`
  39. KEY16 string `json:"KEY16"`
  40. LastSeen time.Time `json:"LastSeen"`
  41. }
  42. func loadConfig() {
  43. if _, err := os.Stat(configFile); os.IsNotExist(err) {
  44. fmt.Println("No config file. Creating a new one.")
  45. saveConfig()
  46. return
  47. }
  48. jsonFile, err := os.Open(configFile)
  49. errCheckExit(err, "Unable to open config file")
  50. defer jsonFile.Close()
  51. byteValue, _ := ioutil.ReadAll(jsonFile)
  52. err = json.Unmarshal(byteValue, config)
  53. errCheck(err, "Failed to unmarshal config")
  54. }
  55. func saveConfig() {
  56. jsonValue, _ := json.Marshal(config)
  57. err := ioutil.WriteFile(configFile, jsonValue, 0644)
  58. errCheck(err, "Failed to write config")
  59. }