fix: improvde code logic (#285)

Signed-off-by: sh1luo <690898835@qq.com>
This commit is contained in:
sh1luo 2021-09-04 22:20:47 +08:00 committed by GitHub
parent e68b0198f1
commit a4edf47dc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 44 additions and 45 deletions

View File

@ -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++
}
}

View File

@ -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()
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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 {

View File

@ -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 {

View File

@ -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
}

View File

@ -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 {

View File

@ -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
}

View File

@ -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 {