chore: did some clean up
This commit is contained in:
147
users.go
147
users.go
@@ -81,18 +81,12 @@ func generateToken(db *sql.DB, email string, password string, name string) (stri
|
||||
}
|
||||
|
||||
func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
handle.Post("/login", func(c *Context) *Error {
|
||||
type UserLogin struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
var dat UserLogin
|
||||
|
||||
if err := c.ToJSON(&dat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
type UserLogin struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
PostAuthJson(handle, "/login", dbtypes.User_Not_Auth, func(c *Context, dat *UserLogin) *Error {
|
||||
// TODO Give this to the generateToken function
|
||||
token, login := generateToken(db, dat.Email, dat.Password, "Logged in user")
|
||||
if !login {
|
||||
@@ -101,7 +95,7 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
|
||||
user, err := dbtypes.UserFromToken(c.Db, token)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Failed to get user from token", err)
|
||||
}
|
||||
|
||||
type UserReturn struct {
|
||||
@@ -123,43 +117,29 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
return c.SendJSON(userReturn)
|
||||
})
|
||||
|
||||
handle.Post("/register", func(c *Context) *Error {
|
||||
type UserLogin struct {
|
||||
Username string `json:"username"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
type UserRegister struct {
|
||||
Username string `json:"username" validate:"required"`
|
||||
Email string `json:"email" validate:"required"`
|
||||
Password string `json:"password" validate:"required"`
|
||||
}
|
||||
PostAuthJson(handle, "/register", dbtypes.User_Not_Auth, func(c *Context, dat *UserRegister) *Error {
|
||||
|
||||
var prevUser struct {
|
||||
Username string
|
||||
Email string
|
||||
}
|
||||
|
||||
var dat UserLogin
|
||||
|
||||
if err := c.ToJSON(&dat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(dat.Username) == 0 || len(dat.Password) == 0 || len(dat.Email) == 0 {
|
||||
return c.SendJSONStatus(http.StatusBadRequest, "Please provide a valid json")
|
||||
}
|
||||
|
||||
rows, err := db.Query("select username, email from users where username=$1 or email=$2;", dat.Username, dat.Email)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
if rows.Next() {
|
||||
var db_username string
|
||||
var db_email string
|
||||
err = rows.Scan(&db_username, &db_email)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
}
|
||||
if db_email == dat.Email {
|
||||
err := GetDBOnce(c, &prevUser, "users where username=$1 or email=$2;", dat.Username, dat.Email)
|
||||
if err == NotFoundError {
|
||||
// Do nothing the user does not exist and it's ok to create a new one
|
||||
} else if err != nil {
|
||||
return c.E500M("Falied to get user data", err)
|
||||
} else {
|
||||
if prevUser.Email == dat.Email {
|
||||
return c.SendJSONStatus(http.StatusBadRequest, "Email already in use!")
|
||||
}
|
||||
if db_username == dat.Username {
|
||||
if prevUser.Username == dat.Username {
|
||||
return c.SendJSONStatus(http.StatusBadRequest, "Username already in use!")
|
||||
}
|
||||
panic("Unrechable")
|
||||
}
|
||||
|
||||
if len([]byte(dat.Password)) > 68 {
|
||||
@@ -169,12 +149,12 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
salt := generateSalt()
|
||||
hash_password, err := hashPassword(dat.Password, salt)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Falied to store password", err)
|
||||
}
|
||||
|
||||
_, err = db.Exec("insert into users (username, email, salt, password) values ($1, $2, $3, $4);", dat.Username, dat.Email, salt, hash_password)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Falied to create user", err)
|
||||
}
|
||||
|
||||
// TODO Give this to the generateToken function
|
||||
@@ -185,7 +165,7 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
|
||||
user, err := dbtypes.UserFromToken(c.Db, token)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Falied to create user", err)
|
||||
}
|
||||
|
||||
type UserReturn struct {
|
||||
@@ -208,14 +188,10 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
})
|
||||
|
||||
// TODO allow admin users to update this data
|
||||
handle.Get("/user/info", func(c *Context) *Error {
|
||||
if !c.CheckAuthLevel(1) {
|
||||
return nil
|
||||
}
|
||||
|
||||
handle.GetAuth("/user/info", int(dbtypes.User_Normal), func(c *Context) *Error {
|
||||
user, err := dbtypes.UserFromToken(c.Db, *c.Token)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Falied to get user data", err)
|
||||
}
|
||||
|
||||
type UserReturn struct {
|
||||
@@ -236,22 +212,11 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
})
|
||||
|
||||
// Handles updating users
|
||||
handle.Post("/user/info", func(c *Context) *Error {
|
||||
if !c.CheckAuthLevel(int(dbtypes.User_Normal)) {
|
||||
return nil
|
||||
}
|
||||
|
||||
type UserData struct {
|
||||
Id string `json:"id"`
|
||||
Email string `json:"email"`
|
||||
}
|
||||
|
||||
var dat UserData
|
||||
|
||||
if err := c.ToJSON(&dat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
type UpdateUserData struct {
|
||||
Id string `json:"id"`
|
||||
Email string `json:"email"`
|
||||
}
|
||||
PostAuthJson(handle, "/user/info", dbtypes.User_Normal, func(c *Context, dat *UpdateUserData) *Error {
|
||||
if dat.Id != c.User.Id && c.User.UserType != int(dbtypes.User_Admin) {
|
||||
return c.SendJSONStatus(403, "You need to be an admin to update another users account")
|
||||
}
|
||||
@@ -265,17 +230,14 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
if err == NotFoundError {
|
||||
return c.JsonBadRequest("User does not exist")
|
||||
} else if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Falied to get data for user", err)
|
||||
}
|
||||
}
|
||||
|
||||
var data struct {
|
||||
Id string
|
||||
}
|
||||
|
||||
var data JustId
|
||||
err := utils.GetDBOnce(c, &data, "users where email=$1", dat.Email)
|
||||
if err != nil && err != NotFoundError {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Falied to get data for user", err)
|
||||
}
|
||||
|
||||
if err != NotFoundError {
|
||||
@@ -288,7 +250,7 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
|
||||
_, err = c.Db.Exec("update users set email=$2 where id=$1", dat.Id, dat.Email)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Failed to update data", err)
|
||||
}
|
||||
|
||||
var user struct {
|
||||
@@ -300,7 +262,7 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
|
||||
err = utils.GetDBOnce(c, &user, "users where id=$1", dat.Id)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Failed to get user data", err)
|
||||
}
|
||||
|
||||
toReturnUser := dbtypes.User{
|
||||
@@ -313,25 +275,12 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
return c.SendJSON(toReturnUser)
|
||||
})
|
||||
|
||||
handle.Post("/user/info/password", func(c *Context) *Error {
|
||||
if !c.CheckAuthLevel(1) {
|
||||
return nil
|
||||
}
|
||||
|
||||
var dat struct {
|
||||
Old_Password string `json:"old_password"`
|
||||
Password string `json:"password"`
|
||||
Password2 string `json:"password2"`
|
||||
}
|
||||
|
||||
if err := c.ToJSON(&dat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if dat.Password == "" {
|
||||
return c.JsonBadRequest("Password can not be empty")
|
||||
}
|
||||
|
||||
type PasswordUpdate struct {
|
||||
Old_Password string `json:"old_password" validate:"required"`
|
||||
Password string `json:"password" validate:"required"`
|
||||
Password2 string `json:"password2" validate:"required"`
|
||||
}
|
||||
PostAuthJson(handle, "/user/info/password", dbtypes.User_Normal, func(c *Context, dat *PasswordUpdate) *Error {
|
||||
if dat.Password != dat.Password2 {
|
||||
return c.JsonBadRequest("New passwords did not match")
|
||||
}
|
||||
@@ -345,12 +294,12 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
salt := generateSalt()
|
||||
hash_password, err := hashPassword(dat.Password, salt)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Failed to parse the password", err)
|
||||
}
|
||||
|
||||
_, err = db.Exec("update users set salt=$1, password=$2 where id=$3", salt, hash_password, c.User.Id)
|
||||
if err != nil {
|
||||
return c.Error500(err)
|
||||
return c.E500M("Failed to update password", err)
|
||||
}
|
||||
|
||||
return c.SendJSON(c.User.Id)
|
||||
@@ -405,6 +354,4 @@ func usersEndpints(db *sql.DB, handle *Handle) {
|
||||
|
||||
return c.SendJSON("Ok")
|
||||
})
|
||||
|
||||
// TODO create function to remove token
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user