Skip to content

Commit

Permalink
[#19] refactored security to use instance parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
zephinzer committed Dec 22, 2018
1 parent 8c27a39 commit cf78abf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
8 changes: 4 additions & 4 deletions security.api.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ func (securityApi *SecurityAPI) updatePassword(router *mux.Router) {
router.Handle(
SecurityAPIExtURLStub+"{account_uuid}",
APIHandler(func(w http.ResponseWriter, r *http.Request) {
var security Security
params := mux.Vars(r)
accountUUID := params["account_uuid"]
var passwordData Security
body, _ := ioutil.ReadAll(r.Body)
json.Unmarshal(body, &passwordData)
securityApi.model.UpdatePasswordByUUID(db.Get(), passwordData.Password, accountUUID)
json.Unmarshal(body, &security)
security.AccountUUID = params["account_uuid"]
security.UpdatePasswordByUUID(db.Get())
response := APIResponse{
Code: SecurityAPIErrorPasswordChangeOk,
Message: "ok",
Expand Down
20 changes: 12 additions & 8 deletions security.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,45 @@ import (

// Security module for handling security related account data
type Security struct {
Password string `json:"password"`
AccountUUID string `json:"account_uuid"`
Password string `json:"password"`
HashedPassword string `json:"hashed_password"`
}

// UpdatePasswordByUUID sets the password of the user identified by account UUID :accountUUID
// to the :password.
func (security *Security) UpdatePasswordByUUID(database *sql.DB, password string, accountUUID string) {
if err := utils.ValidatePassword(password); err != nil {
func (security *Security) UpdatePasswordByUUID(database *sql.DB) {
if err := utils.ValidatePassword(security.Password); err != nil {
panic(&ModelError{
Code: err.(*ValidationError).Code,
Message: err.(*ValidationError).Message,
Data: map[string]interface{}{}, // reveal nothing, it's the password (:
})
}
hashedPassword, err := utils.CreatePasswordHash(password)
hashedPassword, err := utils.CreatePasswordHash(security.Password)
if err != nil {
panic(err)
}
security.updatePasswordByUUID(database, &User{}, hashedPassword, accountUUID)
security.HashedPassword = hashedPassword
security.updatePasswordByUUID(database)
}

func (security *Security) updatePasswordByUUID(database *sql.DB, user *User, hashedPassword string, accountUUID string) {
func (security *Security) updatePasswordByUUID(database *sql.DB) {
sqlStmt := "UPDATE security AS s INNER JOIN accounts AS a ON s.account_id = a.id SET s.password = ? WHERE a.uuid = ?"
logger.Infof("[security] executing sql '%s'", sqlStmt)
stmt, err := database.Prepare(sqlStmt)
if err != nil {
panic(err)
}
results, err := stmt.Exec(hashedPassword, accountUUID)
results, err := stmt.Exec(security.HashedPassword, security.AccountUUID)
if err != nil {
panic(err)
}
rowsAffected, err := results.RowsAffected()
if err != nil {
panic(err)
} else if rowsAffected == 0 {
user.GetByUUID(database, accountUUID)
user := &User{}
user.GetByUUID(database, security.AccountUUID)
}
}

0 comments on commit cf78abf

Please sign in to comment.