Move token functions to its own package
This commit is contained in:
parent
ad9332dcd5
commit
7395200314
|
@ -1,7 +1,6 @@
|
|||
package auth
|
||||
package token
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
|
@ -9,48 +8,6 @@ import (
|
|||
"tildegit.org/andinus/perseus/user"
|
||||
)
|
||||
|
||||
// ValToken will validate the token and returns an error. If error
|
||||
// doesn't equal nil then consider token invalid.
|
||||
func ValToken(db *sqlite3.DB, uInfo map[string]string) error {
|
||||
// Acquire read lock on the database.
|
||||
db.Mu.RLock()
|
||||
defer db.Mu.RUnlock()
|
||||
|
||||
u := user.User{}
|
||||
u.SetUsername(uInfo["username"])
|
||||
|
||||
// Set user id from username.
|
||||
err := u.GetID(db)
|
||||
if err != nil {
|
||||
log.Printf("auth/token.go: %s\n",
|
||||
"failed to get id from username")
|
||||
return err
|
||||
}
|
||||
|
||||
// Check if user's token is valid.
|
||||
stmt, err := db.Conn.Prepare("SELECT token FROM access WHERE id = ?")
|
||||
if err != nil {
|
||||
log.Printf("auth/token.go: %s\n",
|
||||
"failed to prepare statement")
|
||||
return err
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
var token string
|
||||
err = stmt.QueryRow(u.ID()).Scan(&token)
|
||||
if err != nil {
|
||||
log.Printf("auth/token.go: %s\n",
|
||||
"query failed")
|
||||
return err
|
||||
}
|
||||
|
||||
if token != uInfo["token"] {
|
||||
err = errors.New("token mismatch")
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// AddToken will generate a random token, add it to database and
|
||||
// return the token.
|
||||
func AddToken(db *sqlite3.DB, uInfo map[string]string) (token string, err error) {
|
|
@ -1,8 +1,14 @@
|
|||
package auth
|
||||
package token
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
)
|
||||
|
||||
// genToken generates a random token string of length n. Don't forget to
|
||||
// seed the random number generator otherwise it won't be random.
|
||||
func genToken(n int) string {
|
||||
// Currently this is just a wrapper to genID.
|
||||
return genID(n)
|
||||
b := make([]byte, n/2)
|
||||
rand.Read(b)
|
||||
return base64.StdEncoding.EncodeToString(b)
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package token
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
|
||||
"tildegit.org/andinus/perseus/storage/sqlite3"
|
||||
"tildegit.org/andinus/perseus/user"
|
||||
)
|
||||
|
||||
// ValToken will validate the token and returns an error. If error
|
||||
// doesn't equal nil then consider token invalid.
|
||||
func ValToken(db *sqlite3.DB, uInfo map[string]string) error {
|
||||
// Acquire read lock on the database.
|
||||
db.Mu.RLock()
|
||||
defer db.Mu.RUnlock()
|
||||
|
||||
u := user.User{}
|
||||
u.SetUsername(uInfo["username"])
|
||||
|
||||
// Set user id from username.
|
||||
err := u.GetID(db)
|
||||
if err != nil {
|
||||
log.Printf("auth/token.go: %s\n",
|
||||
"failed to get id from username")
|
||||
return err
|
||||
}
|
||||
|
||||
// Check if user's token is valid.
|
||||
stmt, err := db.Conn.Prepare("SELECT token FROM access WHERE id = ?")
|
||||
if err != nil {
|
||||
log.Printf("auth/token.go: %s\n",
|
||||
"failed to prepare statement")
|
||||
return err
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
var token string
|
||||
err = stmt.QueryRow(u.ID()).Scan(&token)
|
||||
if err != nil {
|
||||
log.Printf("auth/token.go: %s\n",
|
||||
"query failed")
|
||||
return err
|
||||
}
|
||||
|
||||
if token != uInfo["token"] {
|
||||
err = errors.New("token mismatch")
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
Loading…
Reference in New Issue