aboutsummaryrefslogtreecommitdiff
path: root/src/server/database/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/database/user.go')
-rw-r--r--src/server/database/user.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/server/database/user.go b/src/server/database/user.go
new file mode 100644
index 0000000..14530ae
--- /dev/null
+++ b/src/server/database/user.go
@@ -0,0 +1,55 @@
+package database
+
+import (
+ "database/sql"
+)
+
+type User struct {
+ Uid int
+ Email string
+ Username *string
+ Password_hash string
+ Password_salt string
+}
+
+// Gets a user struct from an email, returns nil-nil if the user did not exist.
+func MaybeGetUser(email string) (*User, error) {
+ var db = GetDb()
+
+ row := db.QueryRow(
+ "SELECT Users.uid, Users.email, Users.username, Users.password_hash, Users.password_salt "+
+ "FROM Users "+
+ "WHERE Users.email = ?;", email)
+
+ var user User
+ if err := row.Scan(
+ &user.Uid,
+ &user.Email,
+ &user.Username,
+ &user.Password_hash,
+ &user.Password_salt); err != nil {
+
+ if err != sql.ErrNoRows {
+ return nil, err
+ }
+
+ return nil, nil
+ }
+
+ return &user, nil
+}
+
+// Writes a new user into the database, returns the user's new uid if no error occurred.
+func WriteNewUser(email string, password_hash string, password_salt string) (int, error) {
+ var db = GetDb()
+
+ var uid int
+ row := db.QueryRow("INSERT INTO Users "+
+ "(email, password_hash, password_salt) "+
+ "VALUES(?, ?, ?) RETURNING Users.uid;", email, password_hash, password_salt)
+ if err := row.Scan(&uid); err != nil {
+ return 0, err
+ }
+
+ return uid, nil
+}