From a4edf47dc42bf3f209335bb5f93175721c9d8539 Mon Sep 17 00:00:00 2001 From: sh1luo <690898835@qq.com> Date: Sat, 4 Sep 2021 22:20:47 +0800 Subject: [PATCH] fix: improvde code logic (#285) Signed-off-by: sh1luo <690898835@qq.com> --- controllers/service.go | 4 ++-- controllers/verification.go | 13 +++++++------ object/check.go | 11 ++++++----- object/email.go | 9 ++------- object/organization.go | 4 ++-- object/resource.go | 4 ++-- object/sms.go | 6 +++--- object/token.go | 8 ++++---- object/user.go | 3 ++- object/verification.go | 27 ++++++++++++++------------- 10 files changed, 44 insertions(+), 45 deletions(-) diff --git a/controllers/service.go b/controllers/service.go index 7125d4ec..98172d75 100644 --- a/controllers/service.go +++ b/controllers/service.go @@ -80,12 +80,12 @@ func (c *ApiController) SendEmail() { ok := 0 for _, receiver := range emailForm.Receivers { - if msg := object.SendEmail( + if err = object.SendEmail( provider, emailForm.Title, emailForm.Content, receiver, - emailForm.Sender); len(msg) == 0 { + emailForm.Sender); err == nil { ok++ } } diff --git a/controllers/verification.go b/controllers/verification.go index 7769791e..a79d87a6 100644 --- a/controllers/verification.go +++ b/controllers/verification.go @@ -15,6 +15,7 @@ package controllers import ( + "errors" "fmt" "strings" @@ -62,8 +63,8 @@ func (c *ApiController) SendVerificationCode() { user := c.getCurrentUser() organization := object.GetOrganization(orgId) application := object.GetApplicationByOrganizationName(organization.Name) - - msg := "Invalid dest type." + + sendResp := errors.New("Invalid dest type.") switch destType { case "email": if !util.IsEmailValid(dest) { @@ -72,7 +73,7 @@ func (c *ApiController) SendVerificationCode() { } provider := application.GetEmailProvider() - msg = object.SendVerificationCodeToEmail(organization, user, provider, remoteAddr, dest) + sendResp = object.SendVerificationCodeToEmail(organization, user, provider, remoteAddr, dest) case "phone": if !util.IsPhoneCnValid(dest) { c.ResponseError("Invalid phone number") @@ -86,15 +87,15 @@ func (c *ApiController) SendVerificationCode() { dest = fmt.Sprintf("+%s%s", org.PhonePrefix, dest) provider := application.GetSmsProvider() - msg = object.SendVerificationCodeToPhone(organization, user, provider, remoteAddr, dest) + sendResp = object.SendVerificationCodeToPhone(organization, user, provider, remoteAddr, dest) } status := "ok" - if msg != "" { + if sendResp != nil { status = "error" } - c.Data["json"] = Response{Status: status, Msg: msg} + c.Data["json"] = Response{Status: status, Msg: sendResp.Error()} c.ServeJSON() } diff --git a/object/check.go b/object/check.go index 7951030c..b040a7d2 100644 --- a/object/check.go +++ b/object/check.go @@ -83,19 +83,20 @@ func CheckUserSignup(application *Application, organization *Organization, usern func CheckPassword(user *User, password string) string { organization := GetOrganizationByUser(user) - + if organization == nil { + return "organization does not exist" + } + if organization.PasswordType == "plain" { if password == user.Password { return "" - } else { - return "password incorrect" } + return "password incorrect" } else if organization.PasswordType == "salt" { if password == user.Password || getSaltedPassword(password, organization.PasswordSalt) == user.Password { return "" - } else { - return "password incorrect" } + return "password incorrect" } else { return fmt.Sprintf("unsupported password type: %s", organization.PasswordType) } diff --git a/object/email.go b/object/email.go index cbefd252..21608b1c 100644 --- a/object/email.go +++ b/object/email.go @@ -18,7 +18,7 @@ package object import "github.com/go-gomail/gomail" -func SendEmail(provider *Provider, title, content, dest, sender string) string { +func SendEmail(provider *Provider, title, content, dest, sender string) error { dialer := gomail.NewDialer(provider.Host, provider.Port, provider.ClientId, provider.ClientSecret) message := gomail.NewMessage() @@ -27,10 +27,5 @@ func SendEmail(provider *Provider, title, content, dest, sender string) string { message.SetHeader("Subject", title) message.SetBody("text/html", content) - err := dialer.DialAndSend(message) - if err == nil { - return "" - } else { - return err.Error() - } + return dialer.DialAndSend(message) } diff --git a/object/organization.go b/object/organization.go index 3bf8f8a1..13d138b3 100644 --- a/object/organization.go +++ b/object/organization.go @@ -56,9 +56,9 @@ func getOrganization(owner string, name string) *Organization { if existed { return &organization - } else { - return nil } + + return nil } func GetOrganization(id string) *Organization { diff --git a/object/resource.go b/object/resource.go index 295a86bc..1462354b 100644 --- a/object/resource.go +++ b/object/resource.go @@ -56,9 +56,9 @@ func getResource(owner string, name string) *Resource { if existed { return &resource - } else { - return nil } + + return nil } func GetResource(id string) *Resource { diff --git a/object/sms.go b/object/sms.go index a73b5417..d6580fd4 100644 --- a/object/sms.go +++ b/object/sms.go @@ -20,10 +20,10 @@ import ( "github.com/casdoor/go-sms-sender" ) -func SendCodeToPhone(provider *Provider, phone, code string) string { +func SendCodeToPhone(provider *Provider, phone, code string) error { client := go_sms_sender.NewSmsClient(provider.Type, provider.ClientId, provider.ClientSecret, provider.SignName, provider.RegionId, provider.TemplateCode, provider.AppId) if client == nil { - return fmt.Sprintf("Unsupported provider type: %s", provider.Type) + return fmt.Errorf("Unsupported provider type: %s", provider.Type) } param := make(map[string]string) @@ -33,5 +33,5 @@ func SendCodeToPhone(provider *Provider, phone, code string) string { param["code"] = code } client.SendMessage(param, phone) - return "" + return nil } diff --git a/object/token.go b/object/token.go index 07daaf11..cf761253 100644 --- a/object/token.go +++ b/object/token.go @@ -72,9 +72,9 @@ func getToken(owner string, name string) *Token { if existed { return &token - } else { - return nil } + + return nil } func getTokenByCode(code string) *Token { @@ -86,9 +86,9 @@ func getTokenByCode(code string) *Token { if existed { return &token - } else { - return nil } + + return nil } func GetToken(id string) *Token { diff --git a/object/user.go b/object/user.go index fda8f55b..bc8a7c37 100644 --- a/object/user.go +++ b/object/user.go @@ -269,7 +269,8 @@ func AddUsersSafe(users []*User) bool { } tmp := users[start:end] - fmt.Printf("Add users: [%d - %d].\n", start, end) + // TODO: save to log instead of standard output + // fmt.Printf("Add users: [%d - %d].\n", start, end) if AddUsers(tmp) { affected = true } diff --git a/object/verification.go b/object/verification.go index 4313e89d..384f5eed 100644 --- a/object/verification.go +++ b/object/verification.go @@ -15,6 +15,7 @@ package object import ( + "errors" "fmt" "math/rand" "time" @@ -39,9 +40,9 @@ type VerificationRecord struct { IsUsed bool } -func SendVerificationCodeToEmail(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) string { +func SendVerificationCodeToEmail(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) error { if provider == nil { - return "Please set an Email provider first" + return fmt.Errorf("Please set an Email provider first") } sender := organization.DisplayName @@ -50,27 +51,27 @@ func SendVerificationCodeToEmail(organization *Organization, user *User, provide // "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes." content := fmt.Sprintf(provider.Content, code) - if result := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); len(result) != 0 { - return result + if err := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); err != nil { + return err } return SendEmail(provider, title, content, dest, sender) } -func SendVerificationCodeToPhone(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) string { +func SendVerificationCodeToPhone(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) error { if provider == nil { - return "Please set a SMS provider first" + return errors.New("Please set a SMS provider first") } code := getRandomCode(5) - if result := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); len(result) != 0 { - return result + if err := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); err != nil { + return err } return SendCodeToPhone(provider, dest, code) } -func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordType, dest, code string) string { +func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordType, dest, code string) error { var record VerificationRecord record.RemoteAddr = remoteAddr record.Type = recordType @@ -79,12 +80,12 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT } has, err := adapter.Engine.Desc("created_time").Get(&record) if err != nil { - panic(err) + return err } now := time.Now().Unix() if has && now-record.Time < 60 { - return "You can only send one code in 60s." + return errors.New("You can only send one code in 60s.") } record.Owner = provider.Owner @@ -102,10 +103,10 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT _, err = adapter.Engine.Insert(record) if err != nil { - panic(err) + return err } - return "" + return nil } func getVerificationRecord(dest string) *VerificationRecord {