mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 10:45:47 +08:00
fix: improvde code logic (#285)
Signed-off-by: sh1luo <690898835@qq.com>
This commit is contained in:
parent
e68b0198f1
commit
a4edf47dc4
@ -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++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ func (c *ApiController) SendVerificationCode() {
|
|||||||
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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user