74 lines
1.2 KiB
Go
74 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
// Standard
|
|
"database/sql"
|
|
"fmt"
|
|
)
|
|
|
|
func (session Session) UpdatePassword(currPass, newPass string) (ok bool, err error) {
|
|
var result sql.Result
|
|
var rowsAffected int64
|
|
|
|
result, err = db.Exec(`
|
|
UPDATE public.user
|
|
SET
|
|
password = password_hash(
|
|
/* salt in hex */
|
|
ENCODE(gen_random_bytes(16), 'hex'),
|
|
|
|
/* password */
|
|
$1::bytea
|
|
)
|
|
WHERE
|
|
id = $2 AND
|
|
password=password_hash(SUBSTRING(password FROM 1 FOR 32), $3::bytea)
|
|
RETURNING id
|
|
`,
|
|
newPass,
|
|
session.UserID,
|
|
currPass,
|
|
)
|
|
|
|
if rowsAffected, err = result.RowsAffected(); err != nil {
|
|
return
|
|
}
|
|
|
|
return rowsAffected > 0, nil
|
|
}
|
|
|
|
func createUser() (err error) {
|
|
var username, password string
|
|
fmt.Printf("Username: ")
|
|
fmt.Scanln(&username)
|
|
fmt.Printf("Password: ")
|
|
fmt.Scanln(&password)
|
|
|
|
err = CreateDbUser(username, password)
|
|
return
|
|
}
|
|
|
|
func CreateDbUser(username string, password string) (err error) {
|
|
var result sql.Result
|
|
|
|
result, err = db.Exec(`
|
|
INSERT INTO public.user(username, password)
|
|
VALUES(
|
|
$1,
|
|
password_hash(
|
|
/* salt in hex */
|
|
ENCODE(gen_random_bytes(16), 'hex'),
|
|
|
|
/* password */
|
|
$2::bytea
|
|
)
|
|
)
|
|
`,
|
|
username,
|
|
password,
|
|
)
|
|
|
|
_, err = result.RowsAffected()
|
|
return
|
|
}
|