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)
 | |
| }
 |