123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package db
- import (
- "notabug.org/apiote/amuse/utils"
- "database/sql"
- "errors"
- "fmt"
- "os"
- _ "github.com/mattn/go-sqlite3"
- )
- type EmptyError struct {
- message string
- }
- func (e EmptyError) Error() string {
- return e.message
- }
- func Migrate() error {
- // todo migrations
- db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db")
- if err != nil {
- return err
- }
- defer db.Close()
- _, err = db.Exec(`create table cache(uri text primary key, etag text, date date, response blob, last_hit date)`)
- if err != nil {
- return err
- }
- _, err = db.Exec(`create table users(username text primary key, password text, sfa text, avatar blob, is_admin bool, recovery_codes text)`)
- if err != nil {
- return err
- }
- _, err = db.Exec(`create table sessions(id text primary key, username text, created datetime, foreign key(username) references users(username))`)
- if err != nil {
- return err
- }
- return nil
- }
- func MakeAdmin(username string) error {
- db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db")
- if err != nil {
- fmt.Fprintf(os.Stderr, "DB open err\n")
- return err
- }
- defer db.Close()
- _, err = db.Exec("update users set is_admin = 1 where username = ?", username)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Update err %v\n", err)
- return err
- }
- rows, err := db.Query(`select is_admin from users where username = ?`, username)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Select err %v\n", err)
- return err
- }
- defer rows.Close()
- if !rows.Next() {
- fmt.Fprintf(os.Stderr, "User %s does not exist\n", username)
- return errors.New("User does not exist")
- }
- var isAdmin bool
- err = rows.Scan(&isAdmin)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Scan err %v\n", err)
- return err
- }
- fmt.Println(isAdmin)
- return nil
- }
- func GetUser(username string) (*sql.Rows, error) {
- db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db")
- if err != nil {
- fmt.Fprintf(os.Stderr, "DB open err\n")
- return nil, err
- }
- defer db.Close()
- rows, err := db.Query(`select password, sfa, recovery_codes from users where username = ?`, username)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Select err %v\n", err)
- return nil, err
- }
- if !rows.Next() {
- return nil, EmptyError{message: "User does not exist"}
- }
- return rows, nil
- }
- func UpdateRecoveryCodes(username, recoveryCodes string) error {
- db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db")
- if err != nil {
- fmt.Fprintf(os.Stderr, "DB open err\n")
- return err
- }
- defer db.Close()
-
- _, err = db.Exec(`update users set recovery_codes = ? where username = ?`, recoveryCodes, username)
- if err != nil {
- return err
- }
- return nil
- }
- func CreateSession(username, sessionId string) error {
- db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db")
- if err != nil {
- fmt.Fprintf(os.Stderr, "DB open err\n")
- return err
- }
- defer db.Close()
-
- _, err = db.Exec(`insert into sessions values(?, ?, datetime('now'))`, sessionId, username)
- if err != nil {
- return err
- }
- return nil
- }
|