107 lines
2.1 KiB
Go
107 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/br0xen/boltease"
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
var db *boltease.DB
|
|
var dbOpened bool
|
|
|
|
func openDatabase() error {
|
|
if !dbOpened {
|
|
var err error
|
|
db, err = boltease.Create(site.DB, 0600, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dbOpened = true
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func initDatabase() error {
|
|
openDatabase()
|
|
db.MkBucketPath([]string{"users"})
|
|
db.MkBucketPath([]string{"teams"})
|
|
return nil
|
|
}
|
|
|
|
// dbHasUser
|
|
// Returns true if there are any users in the database
|
|
func dbHasUser() bool {
|
|
return len(dbGetAllUsers()) > 0
|
|
}
|
|
|
|
func dbGetAllUsers() []string {
|
|
if err := db.OpenDB(); err != nil {
|
|
return []string{}
|
|
}
|
|
defer db.CloseDB()
|
|
|
|
usrs, err := db.GetBucketList([]string{"users"})
|
|
if err != nil {
|
|
return []string{}
|
|
}
|
|
return usrs
|
|
}
|
|
|
|
func dbIsValidUserEmail(email string) bool {
|
|
if err := db.OpenDB(); err != nil {
|
|
return false
|
|
}
|
|
defer db.CloseDB()
|
|
|
|
usrPath := []string{"users", email}
|
|
if _, err := db.GetValue(usrPath, "password"); err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func dbCheckCredentials(email, pw string) error {
|
|
var err error
|
|
if err = db.OpenDB(); err != nil {
|
|
return err
|
|
}
|
|
defer db.CloseDB()
|
|
|
|
var uPw string
|
|
usrPath := []string{"users", email}
|
|
if uPw, err = db.GetValue(usrPath, "password"); err != nil {
|
|
return err
|
|
}
|
|
return bcrypt.CompareHashAndPassword([]byte(uPw), []byte(pw))
|
|
}
|
|
|
|
// dbUpdateUserPassword
|
|
// Takes an email address and a password
|
|
// Creates the user if it doesn't exist, encrypts the password
|
|
// and updates it in the db
|
|
func dbUpdateUserPassword(email, password string) error {
|
|
cryptPw, cryptError := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
|
if cryptError != nil {
|
|
return cryptError
|
|
}
|
|
if err := db.OpenDB(); err != nil {
|
|
return err
|
|
}
|
|
defer db.CloseDB()
|
|
|
|
usrPath := []string{"users", email}
|
|
return db.SetValue(usrPath, "password", string(cryptPw))
|
|
}
|
|
|
|
func dbDeleteUser(email string) error {
|
|
var err error
|
|
fmt.Println("Deleting User:", email)
|
|
if err = db.OpenDB(); err != nil {
|
|
return err
|
|
}
|
|
defer db.CloseDB()
|
|
|
|
return db.DeleteBucket([]string{"users"}, email)
|
|
}
|