-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
177 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
package controllers | ||
|
||
import ( | ||
"encoding/json" | ||
|
||
"github.com/jinzhu/gorm" | ||
|
||
"github.com/Jsharkc/TechTree/backend/general" | ||
"github.com/Jsharkc/TechTree/backend/models" | ||
"github.com/Jsharkc/TechTree/backend/utils" | ||
"github.com/Jsharkc/TechTree/lib/log" | ||
) | ||
|
||
type AdminController struct { | ||
BaseController | ||
} | ||
|
||
func (ac *AdminController) Add() { | ||
var ( | ||
err error | ||
admin models.Admin | ||
flag bool | ||
) | ||
|
||
err = json.Unmarshal(ac.Ctx.Input.RequestBody, &admin) | ||
if err != nil { | ||
log.Logger.Error("Add admin json unmarshal err:", err) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams} | ||
goto finish | ||
} | ||
|
||
flag, err = utils.GlobalValid.Valid(&admin) | ||
if !flag { | ||
for _, err := range utils.GlobalValid.Errors { | ||
log.Logger.Error("the user key "+err.Key+" has err:", err) | ||
} | ||
|
||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams} | ||
goto finish | ||
} | ||
|
||
err = models.AdminService.Add(&admin) | ||
if err != nil { | ||
log.Logger.Error("create user err:", err) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrMysql} | ||
goto finish | ||
} | ||
|
||
ac.SetSession(general.SessionUserID, admin.UserName) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrSucceed} | ||
log.Logger.Info("Login: Admin ID:%s", admin.UserName) | ||
finish: | ||
ac.ServeJSON(true) | ||
} | ||
|
||
func (ac *AdminController) Login() { | ||
var ( | ||
err error | ||
login models.Admin | ||
userID string | ||
flag bool | ||
) | ||
|
||
err = json.Unmarshal(ac.Ctx.Input.RequestBody, &login) | ||
if err != nil { | ||
log.Logger.Error("Admin login json unmarshal err:", err) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams} | ||
goto finish | ||
} | ||
|
||
flag, err = utils.GlobalValid.Valid(&login) | ||
if !flag { | ||
for _, err := range utils.GlobalValid.Errors { | ||
log.Logger.Error("the user key "+err.Key+" has err:", err) | ||
} | ||
|
||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams} | ||
goto finish | ||
} | ||
|
||
userID, err = models.AdminService.Login(&login.UserName, &login.Password) | ||
if err != nil { | ||
if err == gorm.ErrRecordNotFound { | ||
log.Logger.Error("Admin doesn't exist:", err) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrNotFound} | ||
goto finish | ||
} | ||
|
||
log.Logger.Error("Admin login mysql err:", err) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrMysql} | ||
goto finish | ||
} | ||
|
||
ac.SetSession(general.SessionUserID, userID) | ||
ac.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrSucceed} | ||
log.Logger.Info("Login: Admin ID:%s", userID) | ||
finish: | ||
ac.ServeJSON(true) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
package models | ||
|
||
import ( | ||
"errors" | ||
"time" | ||
|
||
"github.com/Jsharkc/TechTree/backend/general" | ||
"github.com/Jsharkc/TechTree/backend/tidb" | ||
"github.com/Jsharkc/TechTree/backend/utils" | ||
) | ||
|
||
type AdminServiceProvider struct { | ||
} | ||
|
||
var AdminService *AdminServiceProvider = &AdminServiceProvider{} | ||
|
||
type Admin struct { | ||
UserName string `json:"name" gorm:"column:name" valid:"Required; MinSize(6);MaxSize(128)"` | ||
Password string `json:"pass" gorm:"column:pass" valid:"Required; MinSize(6);MaxSize(16)"` | ||
Created time.Time `json:"created"` | ||
Status int `json:"status"` | ||
} | ||
|
||
func (a Admin) TableName() string { | ||
return "admin" | ||
} | ||
|
||
func (as *AdminServiceProvider) Add(a *Admin) error { | ||
var ( | ||
db = tidb.Conn | ||
tx = db.Begin() | ||
err error | ||
) | ||
|
||
defer func() { | ||
if err != nil { | ||
err = tx.Rollback().Error | ||
} else { | ||
err = tx.Commit().Error | ||
} | ||
}() | ||
|
||
err = tx.Create(&a).Error | ||
if err != nil { | ||
return err | ||
} | ||
|
||
hashcode, err := utils.GenerateHash(a.Password) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
a.Password = string(hashcode) | ||
a.Status = general.Active | ||
a.Created = time.Now() | ||
|
||
return err | ||
} | ||
|
||
func (as *AdminServiceProvider) Login(name, pass *string) (string, error) { | ||
var ( | ||
a Admin | ||
err error | ||
) | ||
|
||
db := tidb.Conn | ||
err = db.Model(&Admin{}).Where("name = ?", *name).First(&a).Error | ||
if err != nil { | ||
return "", err | ||
} | ||
|
||
if !utils.CompareHash([]byte(a.Password), *pass) { | ||
return "", errors.New("Password not right!") | ||
} | ||
|
||
return a.UserName, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters