From 73952003142c7106482a198ce6024cba00c35e44 Mon Sep 17 00:00:00 2001 From: Andinus Date: Fri, 27 Mar 2020 18:24:25 +0530 Subject: Move token functions to its own package --- auth/token/validate.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 auth/token/validate.go (limited to 'auth/token/validate.go') diff --git a/auth/token/validate.go b/auth/token/validate.go new file mode 100644 index 0000000..f1ee149 --- /dev/null +++ b/auth/token/validate.go @@ -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 +} -- cgit 1.4.1-2-gfad0