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 ok := 0
for _, receiver := range emailForm.Receivers { for _, receiver := range emailForm.Receivers {
if msg := object.SendEmail( if err = object.SendEmail(
provider, provider,
emailForm.Title, emailForm.Title,
emailForm.Content, emailForm.Content,
receiver, receiver,
emailForm.Sender); len(msg) == 0 { emailForm.Sender); err == nil {
ok++ ok++
} }
} }

View File

@ -15,6 +15,7 @@
package controllers package controllers
import ( import (
"errors"
"fmt" "fmt"
"strings" "strings"
@ -62,8 +63,8 @@ func (c *ApiController) SendVerificationCode() {
user := c.getCurrentUser() user := c.getCurrentUser()
organization := object.GetOrganization(orgId) organization := object.GetOrganization(orgId)
application := object.GetApplicationByOrganizationName(organization.Name) application := object.GetApplicationByOrganizationName(organization.Name)
msg := "Invalid dest type." sendResp := errors.New("Invalid dest type.")
switch destType { switch destType {
case "email": case "email":
if !util.IsEmailValid(dest) { if !util.IsEmailValid(dest) {
@ -72,7 +73,7 @@ func (c *ApiController) SendVerificationCode() {
} }
provider := application.GetEmailProvider() provider := application.GetEmailProvider()
msg = object.SendVerificationCodeToEmail(organization, user, provider, remoteAddr, dest) sendResp = object.SendVerificationCodeToEmail(organization, user, provider, remoteAddr, dest)
case "phone": case "phone":
if !util.IsPhoneCnValid(dest) { if !util.IsPhoneCnValid(dest) {
c.ResponseError("Invalid phone number") c.ResponseError("Invalid phone number")
@ -86,15 +87,15 @@ func (c *ApiController) SendVerificationCode() {
dest = fmt.Sprintf("+%s%s", org.PhonePrefix, dest) dest = fmt.Sprintf("+%s%s", org.PhonePrefix, dest)
provider := application.GetSmsProvider() provider := application.GetSmsProvider()
msg = object.SendVerificationCodeToPhone(organization, user, provider, remoteAddr, dest) sendResp = object.SendVerificationCodeToPhone(organization, user, provider, remoteAddr, dest)
} }
status := "ok" status := "ok"
if msg != "" { if sendResp != nil {
status = "error" status = "error"
} }
c.Data["json"] = Response{Status: status, Msg: msg} c.Data["json"] = Response{Status: status, Msg: sendResp.Error()}
c.ServeJSON() c.ServeJSON()
} }

View File

@ -83,19 +83,20 @@ func CheckUserSignup(application *Application, organization *Organization, usern
func CheckPassword(user *User, password string) string { func CheckPassword(user *User, password string) string {
organization := GetOrganizationByUser(user) organization := GetOrganizationByUser(user)
if organization == nil {
return "organization does not exist"
}
if organization.PasswordType == "plain" { if organization.PasswordType == "plain" {
if password == user.Password { if password == user.Password {
return "" return ""
} else {
return "password incorrect"
} }
return "password incorrect"
} else if organization.PasswordType == "salt" { } else if organization.PasswordType == "salt" {
if password == user.Password || getSaltedPassword(password, organization.PasswordSalt) == user.Password { if password == user.Password || getSaltedPassword(password, organization.PasswordSalt) == user.Password {
return "" return ""
} else {
return "password incorrect"
} }
return "password incorrect"
} else { } else {
return fmt.Sprintf("unsupported password type: %s", organization.PasswordType) return fmt.Sprintf("unsupported password type: %s", organization.PasswordType)
} }

View File

@ -18,7 +18,7 @@ package object
import "github.com/go-gomail/gomail" 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) dialer := gomail.NewDialer(provider.Host, provider.Port, provider.ClientId, provider.ClientSecret)
message := gomail.NewMessage() message := gomail.NewMessage()
@ -27,10 +27,5 @@ func SendEmail(provider *Provider, title, content, dest, sender string) string {
message.SetHeader("Subject", title) message.SetHeader("Subject", title)
message.SetBody("text/html", content) message.SetBody("text/html", content)
err := dialer.DialAndSend(message) return dialer.DialAndSend(message)
if err == nil {
return ""
} else {
return err.Error()
}
} }

View File

@ -56,9 +56,9 @@ func getOrganization(owner string, name string) *Organization {
if existed { if existed {
return &organization return &organization
} else {
return nil
} }
return nil
} }
func GetOrganization(id string) *Organization { func GetOrganization(id string) *Organization {

View File

@ -56,9 +56,9 @@ func getResource(owner string, name string) *Resource {
if existed { if existed {
return &resource return &resource
} else {
return nil
} }
return nil
} }
func GetResource(id string) *Resource { func GetResource(id string) *Resource {

View File

@ -20,10 +20,10 @@ import (
"github.com/casdoor/go-sms-sender" "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) client := go_sms_sender.NewSmsClient(provider.Type, provider.ClientId, provider.ClientSecret, provider.SignName, provider.RegionId, provider.TemplateCode, provider.AppId)
if client == nil { 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) param := make(map[string]string)
@ -33,5 +33,5 @@ func SendCodeToPhone(provider *Provider, phone, code string) string {
param["code"] = code param["code"] = code
} }
client.SendMessage(param, phone) client.SendMessage(param, phone)
return "" return nil
} }

View File

@ -72,9 +72,9 @@ func getToken(owner string, name string) *Token {
if existed { if existed {
return &token return &token
} else {
return nil
} }
return nil
} }
func getTokenByCode(code string) *Token { func getTokenByCode(code string) *Token {
@ -86,9 +86,9 @@ func getTokenByCode(code string) *Token {
if existed { if existed {
return &token return &token
} else {
return nil
} }
return nil
} }
func GetToken(id string) *Token { func GetToken(id string) *Token {

View File

@ -269,7 +269,8 @@ func AddUsersSafe(users []*User) bool {
} }
tmp := users[start:end] 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) { if AddUsers(tmp) {
affected = true affected = true
} }

View File

@ -15,6 +15,7 @@
package object package object
import ( import (
"errors"
"fmt" "fmt"
"math/rand" "math/rand"
"time" "time"
@ -39,9 +40,9 @@ type VerificationRecord struct {
IsUsed bool 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 { if provider == nil {
return "Please set an Email provider first" return fmt.Errorf("Please set an Email provider first")
} }
sender := organization.DisplayName 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." // "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes."
content := fmt.Sprintf(provider.Content, code) content := fmt.Sprintf(provider.Content, code)
if result := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); len(result) != 0 { if err := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); err != nil {
return result return err
} }
return SendEmail(provider, title, content, dest, sender) 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 { if provider == nil {
return "Please set a SMS provider first" return errors.New("Please set a SMS provider first")
} }
code := getRandomCode(5) code := getRandomCode(5)
if result := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); len(result) != 0 { if err := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); err != nil {
return result return err
} }
return SendCodeToPhone(provider, dest, code) 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 var record VerificationRecord
record.RemoteAddr = remoteAddr record.RemoteAddr = remoteAddr
record.Type = recordType record.Type = recordType
@ -79,12 +80,12 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT
} }
has, err := adapter.Engine.Desc("created_time").Get(&record) has, err := adapter.Engine.Desc("created_time").Get(&record)
if err != nil { if err != nil {
panic(err) return err
} }
now := time.Now().Unix() now := time.Now().Unix()
if has && now-record.Time < 60 { 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 record.Owner = provider.Owner
@ -102,10 +103,10 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT
_, err = adapter.Engine.Insert(record) _, err = adapter.Engine.Insert(record)
if err != nil { if err != nil {
panic(err) return err
} }
return "" return nil
} }
func getVerificationRecord(dest string) *VerificationRecord { func getVerificationRecord(dest string) *VerificationRecord {