mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-29 01:51:38 +08:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
23bb0ee450 | ||
![]() |
117259dfc5 | ||
![]() |
e71d0476f0 | ||
![]() |
b5d26767b2 | ||
![]() |
5c4e22288e | ||
![]() |
3ac4be64b8 | ||
![]() |
97db54b6b9 |
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@@ -127,7 +127,7 @@ jobs:
|
||||
release-and-push:
|
||||
name: Release And Push
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'casbin/casdoor' && github.event_name == 'push'
|
||||
if: github.repository == 'casdoor/casdoor' && github.event_name == 'push'
|
||||
needs: [ frontend, backend, linter, e2e ]
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -182,14 +182,14 @@ jobs:
|
||||
|
||||
- name: Log in to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
if: github.repository == 'casbin/casdoor' && github.event_name == 'push' && steps.should_push.outputs.push=='true'
|
||||
if: github.repository == 'casdoor/casdoor' && github.event_name == 'push' && steps.should_push.outputs.push=='true'
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||
|
||||
- name: Push to Docker Hub
|
||||
uses: docker/build-push-action@v3
|
||||
if: github.repository == 'casbin/casdoor' && github.event_name == 'push' && steps.should_push.outputs.push=='true'
|
||||
if: github.repository == 'casdoor/casdoor' && github.event_name == 'push' && steps.should_push.outputs.push=='true'
|
||||
with:
|
||||
context: .
|
||||
target: STANDARD
|
||||
@@ -199,7 +199,7 @@ jobs:
|
||||
|
||||
- name: Push All In One Version to Docker Hub
|
||||
uses: docker/build-push-action@v3
|
||||
if: github.repository == 'casbin/casdoor' && github.event_name == 'push' && steps.should_push.outputs.push=='true'
|
||||
if: github.repository == 'casdoor/casdoor' && github.event_name == 'push' && steps.should_push.outputs.push=='true'
|
||||
with:
|
||||
context: .
|
||||
target: ALLINONE
|
||||
|
2
.github/workflows/sync.yml
vendored
2
.github/workflows/sync.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
jobs:
|
||||
synchronize-with-crowdin:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'casbin/casdoor' && github.event_name == 'push'
|
||||
if: github.repository == 'casdoor/casdoor' && github.event_name == 'push'
|
||||
steps:
|
||||
|
||||
- name: Checkout
|
||||
|
@@ -87,8 +87,7 @@ https://casdoor.org/docs/category/integrations
|
||||
## How to contact?
|
||||
|
||||
- Discord: https://discord.gg/5rPsrAzK7S
|
||||
- Forum: https://forum.casbin.com
|
||||
- Contact: https://tawk.to/chat/623352fea34c2456412b8c51/1fuc7od6e
|
||||
- Contact: https://casdoor.org/help
|
||||
|
||||
## Contribute
|
||||
|
||||
|
@@ -94,7 +94,7 @@ func (c *ApiController) Signup() {
|
||||
return
|
||||
}
|
||||
if application == nil {
|
||||
c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist")), authForm.Application)
|
||||
c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), authForm.Application))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ func (c *ApiController) Signup() {
|
||||
}
|
||||
|
||||
if organization == nil {
|
||||
c.ResponseError(fmt.Sprintf(c.T("auth:The organization: %s does not exist")), authForm.Organization)
|
||||
c.ResponseError(fmt.Sprintf(c.T("auth:The organization: %s does not exist"), authForm.Organization))
|
||||
return
|
||||
}
|
||||
|
||||
|
@@ -24,7 +24,6 @@ import (
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/casdoor/casdoor/captcha"
|
||||
"github.com/casdoor/casdoor/conf"
|
||||
@@ -37,11 +36,6 @@ import (
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
var (
|
||||
wechatCacheMap map[string]idp.WechatCacheMapValue
|
||||
lock sync.RWMutex
|
||||
)
|
||||
|
||||
func codeToResponse(code *object.Code) *Response {
|
||||
if code.Code == "" {
|
||||
return &Response{Status: "error", Msg: code.Message, Data: code.Code}
|
||||
@@ -896,6 +890,7 @@ func (c *ApiController) GetSamlLogin() {
|
||||
authURL, method, err := object.GenerateSamlRequest(providerId, relayState, c.Ctx.Request.Host, c.GetAcceptLanguage())
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
c.ResponseOk(authURL, method)
|
||||
}
|
||||
@@ -906,6 +901,7 @@ func (c *ApiController) HandleSamlLogin() {
|
||||
decode, err := base64.StdEncoding.DecodeString(relayState)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
slice := strings.Split(string(decode), "&")
|
||||
relayState = url.QueryEscape(relayState)
|
||||
@@ -972,15 +968,15 @@ func (c *ApiController) HandleOfficialAccountEvent() {
|
||||
return
|
||||
}
|
||||
|
||||
lock.Lock()
|
||||
if wechatCacheMap == nil {
|
||||
wechatCacheMap = make(map[string]idp.WechatCacheMapValue)
|
||||
idp.Lock.Lock()
|
||||
if idp.WechatCacheMap == nil {
|
||||
idp.WechatCacheMap = make(map[string]idp.WechatCacheMapValue)
|
||||
}
|
||||
wechatCacheMap[data.Ticket] = idp.WechatCacheMapValue{
|
||||
IsScanned: true,
|
||||
WechatOpenId: data.FromUserName,
|
||||
idp.WechatCacheMap[data.Ticket] = idp.WechatCacheMapValue{
|
||||
IsScanned: true,
|
||||
WechatUnionId: data.FromUserName,
|
||||
}
|
||||
lock.Unlock()
|
||||
idp.Lock.Unlock()
|
||||
|
||||
c.Ctx.WriteString("")
|
||||
}
|
||||
@@ -994,18 +990,15 @@ func (c *ApiController) HandleOfficialAccountEvent() {
|
||||
func (c *ApiController) GetWebhookEventType() {
|
||||
ticket := c.Input().Get("ticket")
|
||||
|
||||
lock.RLock()
|
||||
wechatMsg, ok := wechatCacheMap[ticket]
|
||||
lock.RUnlock()
|
||||
idp.Lock.RLock()
|
||||
_, ok := idp.WechatCacheMap[ticket]
|
||||
idp.Lock.RUnlock()
|
||||
if !ok {
|
||||
c.ResponseError("ticket not found")
|
||||
return
|
||||
}
|
||||
lock.Lock()
|
||||
delete(wechatCacheMap, ticket)
|
||||
lock.Unlock()
|
||||
|
||||
c.ResponseOk("SCAN", wechatMsg.IsScanned)
|
||||
c.ResponseOk("SCAN", ticket)
|
||||
}
|
||||
|
||||
// GetQRCode
|
||||
|
@@ -121,6 +121,9 @@ func (idp *AdfsIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) {
|
||||
return nil, err
|
||||
}
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var respKeys struct {
|
||||
Keys []interface{} `json:"keys"`
|
||||
}
|
||||
|
@@ -26,20 +26,26 @@ import (
|
||||
"net/url"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/skip2/go-qrcode"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
var (
|
||||
WechatCacheMap map[string]WechatCacheMapValue
|
||||
Lock sync.RWMutex
|
||||
)
|
||||
|
||||
type WeChatIdProvider struct {
|
||||
Client *http.Client
|
||||
Config *oauth2.Config
|
||||
}
|
||||
|
||||
type WechatCacheMapValue struct {
|
||||
IsScanned bool
|
||||
WechatOpenId string
|
||||
IsScanned bool
|
||||
WechatUnionId string
|
||||
}
|
||||
|
||||
func NewWeChatIdProvider(clientId string, clientSecret string, redirectUrl string) *WeChatIdProvider {
|
||||
@@ -84,6 +90,15 @@ type WechatAccessToken struct {
|
||||
// GetToken use code get access_token (*operation of getting code ought to be done in front)
|
||||
// get more detail via: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
|
||||
func (idp *WeChatIdProvider) GetToken(code string) (*oauth2.Token, error) {
|
||||
if strings.HasPrefix(code, "wechat_oa:") {
|
||||
token := oauth2.Token{
|
||||
AccessToken: code,
|
||||
TokenType: "WeChatAccessToken",
|
||||
Expiry: time.Time{},
|
||||
}
|
||||
return &token, nil
|
||||
}
|
||||
|
||||
params := url.Values{}
|
||||
params.Add("grant_type", "authorization_code")
|
||||
params.Add("appid", idp.Config.ClientID)
|
||||
@@ -164,6 +179,29 @@ type WechatUserInfo struct {
|
||||
func (idp *WeChatIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) {
|
||||
var wechatUserInfo WechatUserInfo
|
||||
accessToken := token.AccessToken
|
||||
|
||||
if strings.HasPrefix(accessToken, "wechat_oa:") {
|
||||
Lock.RLock()
|
||||
mapValue, ok := WechatCacheMap[accessToken[10:]]
|
||||
Lock.RUnlock()
|
||||
|
||||
if !ok || mapValue.WechatUnionId == "" {
|
||||
return nil, fmt.Errorf("error ticket")
|
||||
}
|
||||
|
||||
Lock.Lock()
|
||||
delete(WechatCacheMap, accessToken[10:])
|
||||
Lock.Unlock()
|
||||
|
||||
userInfo := UserInfo{
|
||||
Id: mapValue.WechatUnionId,
|
||||
Username: "wx_user_" + mapValue.WechatUnionId,
|
||||
DisplayName: "wx_user_" + mapValue.WechatUnionId,
|
||||
AvatarUrl: "",
|
||||
}
|
||||
return &userInfo, nil
|
||||
}
|
||||
|
||||
openid := token.Extra("Openid")
|
||||
|
||||
userInfoUrl := fmt.Sprintf("https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s", accessToken, openid)
|
||||
@@ -234,7 +272,7 @@ func GetWechatOfficialAccountAccessToken(clientId string, clientSecret string) (
|
||||
ExpireIn int `json:"expires_in"`
|
||||
AccessToken string `json:"access_token"`
|
||||
ErrCode int `json:"errcode"`
|
||||
Errmsg string `json:errmsg`
|
||||
Errmsg string `json:"errmsg"`
|
||||
}
|
||||
err = json.Unmarshal(respBytes, &data)
|
||||
if err != nil {
|
||||
|
@@ -146,7 +146,8 @@
|
||||
"isForbidden": false,
|
||||
"isDeleted": false,
|
||||
"signupApplication": "",
|
||||
"createdIp": ""
|
||||
"createdIp": "",
|
||||
"groups": []
|
||||
}
|
||||
],
|
||||
"providers": [
|
||||
@@ -349,5 +350,74 @@
|
||||
"owner": "",
|
||||
"url": ""
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"owner": "",
|
||||
"name":"",
|
||||
"displayName": "",
|
||||
"manager": "",
|
||||
"contactEmail": "",
|
||||
"type": "",
|
||||
"parent_id": "",
|
||||
"isTopGroup": true,
|
||||
"title": "",
|
||||
"key": "",
|
||||
"children": "",
|
||||
"isEnabled": true
|
||||
}
|
||||
],
|
||||
"adapters": [
|
||||
{
|
||||
"owner": "",
|
||||
"name": "",
|
||||
"table": "",
|
||||
"useSameDb": true,
|
||||
"type": "",
|
||||
"databaseType": "",
|
||||
"database": "",
|
||||
"host": "",
|
||||
"port": 0,
|
||||
"user": "",
|
||||
"password": "",
|
||||
}
|
||||
],
|
||||
"enforcers": [
|
||||
{
|
||||
"owner": "",
|
||||
"name": "",
|
||||
"displayName": "",
|
||||
"description": "",
|
||||
"model": "",
|
||||
"adapter": "",
|
||||
"enforcer": ""
|
||||
}
|
||||
],
|
||||
"plans": [
|
||||
{
|
||||
"owner": "",
|
||||
"name": "",
|
||||
"displayName": "",
|
||||
"description": "",
|
||||
"price": 0,
|
||||
"currency": "",
|
||||
"period": "",
|
||||
"product": "",
|
||||
"paymentProviders": [],
|
||||
"isEnabled": true,
|
||||
"role", ""
|
||||
}
|
||||
],
|
||||
"pricings": [
|
||||
{
|
||||
"owner": "",
|
||||
"name": "",
|
||||
"displayName": "",
|
||||
"description": "",
|
||||
"plans": [],
|
||||
"isEnabled": true,
|
||||
"trialDuration": 0,
|
||||
"application": "",
|
||||
}
|
||||
]
|
||||
}
|
||||
|
2
main.go
2
main.go
@@ -36,12 +36,12 @@ func main() {
|
||||
object.CreateTables()
|
||||
|
||||
object.InitDb()
|
||||
object.InitFromFile()
|
||||
object.InitDefaultStorageProvider()
|
||||
object.InitLdapAutoSynchronizer()
|
||||
proxy.InitHttpClient()
|
||||
authz.InitApi()
|
||||
object.InitUserManager()
|
||||
object.InitFromFile()
|
||||
object.InitCasvisorConfig()
|
||||
|
||||
util.SafeGoroutine(func() { object.RunSyncUsersJob() })
|
||||
|
@@ -35,6 +35,11 @@ type InitData struct {
|
||||
Syncers []*Syncer `json:"syncers"`
|
||||
Tokens []*Token `json:"tokens"`
|
||||
Webhooks []*Webhook `json:"webhooks"`
|
||||
Groups []*Group `json:"groups"`
|
||||
Adapters []*Adapter `json:"adapters"`
|
||||
Enforcers []*Enforcer `json:"enforcers"`
|
||||
Plans []*Plan `json:"plans"`
|
||||
Pricings []*Pricing `json:"pricings"`
|
||||
}
|
||||
|
||||
func InitFromFile() {
|
||||
@@ -94,6 +99,21 @@ func InitFromFile() {
|
||||
for _, webhook := range initData.Webhooks {
|
||||
initDefinedWebhook(webhook)
|
||||
}
|
||||
for _, group := range initData.Groups {
|
||||
initDefinedGroup(group)
|
||||
}
|
||||
for _, adapter := range initData.Adapters {
|
||||
initDefinedAdapter(adapter)
|
||||
}
|
||||
for _, enforcer := range initData.Enforcers {
|
||||
initDefinedEnforcer(enforcer)
|
||||
}
|
||||
for _, plan := range initData.Plans {
|
||||
initDefinedPlan(plan)
|
||||
}
|
||||
for _, pricing := range initData.Pricings {
|
||||
initDefinedPricing(pricing)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,6 +140,11 @@ func readInitDataFromFile(filePath string) (*InitData, error) {
|
||||
Syncers: []*Syncer{},
|
||||
Tokens: []*Token{},
|
||||
Webhooks: []*Webhook{},
|
||||
Groups: []*Group{},
|
||||
Adapters: []*Adapter{},
|
||||
Enforcers: []*Enforcer{},
|
||||
Plans: []*Plan{},
|
||||
Pricings: []*Pricing{},
|
||||
}
|
||||
err := util.JsonToStruct(s, data)
|
||||
if err != nil {
|
||||
@@ -190,7 +215,16 @@ func readInitDataFromFile(filePath string) (*InitData, error) {
|
||||
webhook.Headers = []*Header{}
|
||||
}
|
||||
}
|
||||
|
||||
for _, plan := range data.Plans {
|
||||
if plan.PaymentProviders == nil {
|
||||
plan.PaymentProviders = []string{}
|
||||
}
|
||||
}
|
||||
for _, pricing := range data.Pricings {
|
||||
if pricing.Plans == nil {
|
||||
pricing.Plans = []string{}
|
||||
}
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -434,3 +468,78 @@ func initDefinedWebhook(webhook *Webhook) {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedGroup(group *Group) {
|
||||
existed, err := getGroup(group.Owner, group.Name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if existed != nil {
|
||||
return
|
||||
}
|
||||
group.CreatedTime = util.GetCurrentTime()
|
||||
_, err = AddGroup(group)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedAdapter(adapter *Adapter) {
|
||||
existed, err := getAdapter(adapter.Owner, adapter.Name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if existed != nil {
|
||||
return
|
||||
}
|
||||
adapter.CreatedTime = util.GetCurrentTime()
|
||||
_, err = AddAdapter(adapter)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedEnforcer(enforcer *Enforcer) {
|
||||
existed, err := getEnforcer(enforcer.Owner, enforcer.Name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if existed != nil {
|
||||
return
|
||||
}
|
||||
enforcer.CreatedTime = util.GetCurrentTime()
|
||||
_, err = AddEnforcer(enforcer)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedPlan(plan *Plan) {
|
||||
existed, err := getPlan(plan.Owner, plan.Name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if existed != nil {
|
||||
return
|
||||
}
|
||||
plan.CreatedTime = util.GetCurrentTime()
|
||||
_, err = AddPlan(plan)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedPricing(pricing *Pricing) {
|
||||
existed, err := getPlan(pricing.Owner, pricing.Name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if existed != nil {
|
||||
return
|
||||
}
|
||||
pricing.CreatedTime = util.GetCurrentTime()
|
||||
_, err = AddPricing(pricing)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@@ -96,6 +96,31 @@ func writeInitDataToFile(filePath string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
groups, err := GetGroups("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
adapters, err := GetAdapters("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
enforcers, err := GetEnforcers("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
plans, err := GetPlans("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pricings, err := GetPricings("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
data := &InitData{
|
||||
Organizations: organizations,
|
||||
Applications: applications,
|
||||
@@ -112,6 +137,11 @@ func writeInitDataToFile(filePath string) error {
|
||||
Syncers: syncers,
|
||||
Tokens: tokens,
|
||||
Webhooks: webhooks,
|
||||
Groups: groups,
|
||||
Adapters: adapters,
|
||||
Enforcers: enforcers,
|
||||
Plans: plans,
|
||||
Pricings: pricings,
|
||||
}
|
||||
|
||||
text := util.StructToJsonFormatted(data)
|
||||
|
@@ -312,8 +312,6 @@ func GetPaymentProvider(p *Provider) (pp.PaymentProvider, error) {
|
||||
} else {
|
||||
return nil, fmt.Errorf("the payment provider type: %s is not supported", p.Type)
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (p *Provider) GetId() string {
|
||||
|
@@ -793,6 +793,13 @@ func AddUser(user *User) (bool, error) {
|
||||
}
|
||||
user.Ranking = int(count + 1)
|
||||
|
||||
if user.Groups != nil && len(user.Groups) > 0 {
|
||||
_, err = userEnforcer.UpdateGroupsForUser(user.GetId(), user.Groups)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
affected, err := ormer.Engine.Insert(user)
|
||||
if err != nil {
|
||||
return false, err
|
||||
@@ -822,6 +829,13 @@ func AddUsers(users []*User) (bool, error) {
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if user.Groups != nil && len(user.Groups) > 0 {
|
||||
_, err = userEnforcer.UpdateGroupsForUser(user.GetId(), user.Groups)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
affected, err := ormer.Engine.Insert(users)
|
||||
|
@@ -1,10 +1,12 @@
|
||||
package object
|
||||
|
||||
import (
|
||||
errors2 "errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/casbin/casbin/v2"
|
||||
"github.com/casbin/casbin/v2/errors"
|
||||
|
||||
"github.com/casbin/casbin/v2"
|
||||
"github.com/casdoor/casdoor/util"
|
||||
)
|
||||
|
||||
@@ -87,7 +89,7 @@ func (e *UserGroupEnforcer) GetAllUsersByGroup(group string) ([]string, error) {
|
||||
|
||||
users, err := e.enforcer.GetUsersForRole(GetGroupWithPrefix(group))
|
||||
if err != nil {
|
||||
if err == errors.ErrNameNotFound {
|
||||
if errors2.Is(err, errors.ErrNameNotFound) {
|
||||
return []string{}, nil
|
||||
}
|
||||
return nil, err
|
||||
|
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
|
||||
import React from "react";
|
||||
import {Button, Card, Checkbox, Col, Input, InputNumber, Row, Select, Switch} from "antd";
|
||||
import {Button, Card, Checkbox, Col, Input, InputNumber, Radio, Row, Select, Switch} from "antd";
|
||||
import {LinkOutlined} from "@ant-design/icons";
|
||||
import * as ProviderBackend from "./backend/ProviderBackend";
|
||||
import * as OrganizationBackend from "./backend/OrganizationBackend";
|
||||
@@ -118,7 +118,23 @@ class ProviderEditPage extends React.Component {
|
||||
provider["cert"] = "";
|
||||
this.getCerts(value);
|
||||
}
|
||||
|
||||
provider[key] = value;
|
||||
|
||||
if (provider["type"] === "WeChat") {
|
||||
if (!provider["clientId"]) {
|
||||
provider["signName"] = "media";
|
||||
provider["disableSsl"] = true;
|
||||
}
|
||||
if (!provider["clientId2"]) {
|
||||
provider["signName"] = "open";
|
||||
provider["disableSsl"] = false;
|
||||
}
|
||||
if (!provider["disableSsl"]) {
|
||||
provider["signName"] = "open";
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
provider: provider,
|
||||
});
|
||||
@@ -757,24 +773,40 @@ class ProviderEditPage extends React.Component {
|
||||
{
|
||||
this.state.provider.type !== "WeChat" ? null : (
|
||||
<React.Fragment>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("provider:Use WeChat Media Platform in PC"), i18next.t("provider:Use WeChat Media Platform in PC - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={1} >
|
||||
<Switch disabled={!this.state.provider.clientId} checked={this.state.provider.disableSsl} onChange={checked => {
|
||||
this.updateProviderField("disableSsl", checked);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("token:Access token"), i18next.t("token:Access token - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Input value={this.state.provider.content} onChange={e => {
|
||||
<Input value={this.state.provider.content} disabled={!this.state.provider.disableSsl || !this.state.provider.clientId2} onChange={e => {
|
||||
this.updateProviderField("content", e.target.value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("provider:Enable QR code"), i18next.t("provider:Enable QR code - Tooltip"))} :
|
||||
{Setting.getLabel(i18next.t("provider:Follow-up action"), i18next.t("provider:Follow-up action - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={1} >
|
||||
<Switch checked={this.state.provider.disableSsl} onChange={checked => {
|
||||
this.updateProviderField("disableSsl", checked);
|
||||
}} />
|
||||
<Col>
|
||||
<Radio.Group value={this.state.provider.signName}
|
||||
disabled={!this.state.provider.disableSsl || !this.state.provider.clientId || !this.state.provider.clientId2}
|
||||
buttonStyle="solid"
|
||||
onChange={e => {
|
||||
this.updateProviderField("signName", e.target.value);
|
||||
}}>
|
||||
<Radio.Button value="open">{i18next.t("provider:Use WeChat Open Platform to login")}</Radio.Button>
|
||||
<Radio.Button value="media">{i18next.t("provider:Use WeChat Media Platform to login")}</Radio.Button>
|
||||
</Radio.Group>
|
||||
</Col>
|
||||
</Row>
|
||||
</React.Fragment>
|
||||
|
@@ -377,7 +377,7 @@ export function getProviderLogoWidget(provider) {
|
||||
}
|
||||
}
|
||||
|
||||
export function getAuthUrl(application, provider, method) {
|
||||
export function getAuthUrl(application, provider, method, code) {
|
||||
if (application === null || provider === null) {
|
||||
return "";
|
||||
}
|
||||
@@ -418,6 +418,9 @@ export function getAuthUrl(application, provider, method) {
|
||||
if (navigator.userAgent.includes("MicroMessenger")) {
|
||||
return `${authInfo[provider.type].mpEndpoint}?appid=${provider.clientId2}&redirect_uri=${redirectUri}&state=${state}&scope=${authInfo[provider.type].mpScope}&response_type=code#wechat_redirect`;
|
||||
} else {
|
||||
if (provider.clientId2 && provider?.disableSsl && provider?.signName === "media") {
|
||||
return `${window.location.origin}/callback?state=${state}&code=${"wechat_oa:" + code}`;
|
||||
}
|
||||
return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}#wechat_redirect`;
|
||||
}
|
||||
} else if (provider.type === "WeCom") {
|
||||
|
@@ -192,7 +192,8 @@ export function getEvent(application, provider, ticket) {
|
||||
getWechatMessageEvent(ticket)
|
||||
.then(res => {
|
||||
if (res.data === "SCAN" || res.data === "subscribe") {
|
||||
Setting.goToLink(Provider.getAuthUrl(application, provider, "signup"));
|
||||
const code = res?.data2;
|
||||
Setting.goToLink(Provider.getAuthUrl(application, provider, "signup", code));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Inhalt der E-Mail",
|
||||
"Email title": "Email-Titel",
|
||||
"Email title - Tooltip": "Betreff der E-Mail",
|
||||
"Enable QR code": "QR-Code aktivieren",
|
||||
"Enable QR code - Tooltip": "Ob das Scannen von QR-Codes zum Einloggen aktiviert werden soll",
|
||||
"Endpoint": "Endpunkt",
|
||||
"Endpoint (Intranet)": "Endpunkt (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token-URL",
|
||||
"Type": "Typ",
|
||||
"Type - Tooltip": "Wählen Sie einen Typ aus",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Contenido del correo electrónico",
|
||||
"Email title": "Título del correo electrónico",
|
||||
"Email title - Tooltip": "Título del correo electrónico",
|
||||
"Enable QR code": "Habilitar código QR",
|
||||
"Enable QR code - Tooltip": "Si permitir el escaneo de códigos QR para acceder",
|
||||
"Endpoint": "Punto final",
|
||||
"Endpoint (Intranet)": "Punto final (intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "URL de token",
|
||||
"Type": "Tipo",
|
||||
"Type - Tooltip": "Seleccionar un tipo",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Contenu de l'e-mail",
|
||||
"Email title": "Titre de l'email",
|
||||
"Email title - Tooltip": "Titre de l'email",
|
||||
"Enable QR code": "Activer le code QR",
|
||||
"Enable QR code - Tooltip": "Permettre de scanner un QR code pour se connecter",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Infobulle",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "Adresse de l'expéditeur",
|
||||
"From address - Tooltip": "L'adresse e-mail affichée comme expéditeur dans les e-mails envoyés",
|
||||
"From name": "Nom de l'expéditeur",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "URL de jeton",
|
||||
"Type": "Type de texte",
|
||||
"Type - Tooltip": "Sélectionnez un type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "Association de compte",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Isi Email",
|
||||
"Email title": "Judul Email",
|
||||
"Email title - Tooltip": "Judul email",
|
||||
"Enable QR code": "Aktifkan kode QR",
|
||||
"Enable QR code - Tooltip": "Apakah diizinkan untuk memindai kode QR untuk masuk?",
|
||||
"Endpoint": "Titik akhir",
|
||||
"Endpoint (Intranet)": "Titik Akhir (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL: URL Token",
|
||||
"Type": "Jenis",
|
||||
"Type - Tooltip": "Pilih tipe",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "メールの内容",
|
||||
"Email title": "電子メールのタイトル",
|
||||
"Email title - Tooltip": "メールのタイトル",
|
||||
"Enable QR code": "QRコードを有効にする",
|
||||
"Enable QR code - Tooltip": "ログインするためにQRコードをスキャンすることを許可するかどうか",
|
||||
"Endpoint": "エンドポイント",
|
||||
"Endpoint (Intranet)": "エンドポイント(イントラネット)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "トークンURL",
|
||||
"Type": "タイプ",
|
||||
"Type - Tooltip": "タイプを選択してください",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "이메일 내용",
|
||||
"Email title": "이메일 제목",
|
||||
"Email title - Tooltip": "이메일 제목",
|
||||
"Enable QR code": "QR 코드 활성화",
|
||||
"Enable QR code - Tooltip": "QR 코드를 스캔해서 로그인할 수 있는지 여부",
|
||||
"Endpoint": "엔드포인트",
|
||||
"Endpoint (Intranet)": "엔드포인트 (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "토큰 URL",
|
||||
"Type": "타입",
|
||||
"Type - Tooltip": "유형을 선택하세요",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Conteúdo do e-mail",
|
||||
"Email title": "Título do e-mail",
|
||||
"Email title - Tooltip": "Título do e-mail",
|
||||
"Enable QR code": "Habilitar código QR",
|
||||
"Enable QR code - Tooltip": "Se permite escanear código QR para fazer login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "Endereço do remetente",
|
||||
"From address - Tooltip": "Endereço de e-mail do remetente",
|
||||
"From name": "Nome do remetente",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "URL do Token",
|
||||
"Type": "Tipo",
|
||||
"Type - Tooltip": "Selecione um tipo",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Содержание электронной почты",
|
||||
"Email title": "Заголовок электронного письма",
|
||||
"Email title - Tooltip": "Заголовок электронной почты",
|
||||
"Enable QR code": "Включить QR-код",
|
||||
"Enable QR code - Tooltip": "Разрешить ли сканирование QR-кода для входа в систему",
|
||||
"Endpoint": "Конечная точка",
|
||||
"Endpoint (Intranet)": "Конечная точка (интранет)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Токен URL",
|
||||
"Type": "Тип",
|
||||
"Type - Tooltip": "Выберите тип",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Content of the Email",
|
||||
"Email title": "Email title",
|
||||
"Email title - Tooltip": "Title of the email",
|
||||
"Enable QR code": "Enable QR code",
|
||||
"Enable QR code - Tooltip": "Whether to allow scanning QR code to login",
|
||||
"Endpoint": "Endpoint",
|
||||
"Endpoint (Intranet)": "Endpoint (Intranet)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "Email address of \"From\"",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Token URL",
|
||||
"Type": "Type",
|
||||
"Type - Tooltip": "Select a type",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "Nội dung của Email",
|
||||
"Email title": "Tiêu đề email",
|
||||
"Email title - Tooltip": "Tiêu đề của email",
|
||||
"Enable QR code": "Kích hoạt mã QR",
|
||||
"Enable QR code - Tooltip": "Cho phép quét mã QR để đăng nhập",
|
||||
"Endpoint": "Điểm cuối",
|
||||
"Endpoint (Intranet)": "Điểm kết thúc (mạng nội bộ)",
|
||||
"Endpoint - Tooltip": "Endpoint - Tooltip",
|
||||
"Follow-up action": "Follow-up action",
|
||||
"Follow-up action - Tooltip": "If you choose \"Use WeChat Open Platform to login\", users need to login on the WeChat Open Platform after following the wechat official account.",
|
||||
"From address": "From address",
|
||||
"From address - Tooltip": "From address - Tooltip",
|
||||
"From name": "From name",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "Địa chỉ của mã thông báo",
|
||||
"Type": "Kiểu",
|
||||
"Type - Tooltip": "Chọn loại",
|
||||
"Use WeChat Media Platform in PC": "Use WeChat Media Platform in PC",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "Whether to allow scanning WeChat Media Platform QR code to login",
|
||||
"Use WeChat Media Platform to login": "Use WeChat Media Platform to login",
|
||||
"Use WeChat Open Platform to login": "Use WeChat Open Platform to login",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow - Tooltip",
|
||||
"User mapping": "User mapping",
|
||||
|
@@ -725,11 +725,11 @@
|
||||
"Email content - Tooltip": "邮件内容",
|
||||
"Email title": "邮件标题",
|
||||
"Email title - Tooltip": "邮件标题",
|
||||
"Enable QR code": "扫码登录",
|
||||
"Enable QR code - Tooltip": "是否允许扫描二维码登录",
|
||||
"Endpoint": "地域节点 (外网)",
|
||||
"Endpoint (Intranet)": "地域节点 (内网)",
|
||||
"Endpoint - Tooltip": "端点 - 工具提示",
|
||||
"Follow-up action": "后继动作",
|
||||
"Follow-up action - Tooltip": "如果你选择“使用微信开放平台进行登录”,用户在扫描二维码并关注公众号后需要在微信开放平台进行登录",
|
||||
"From address": "发件人地址",
|
||||
"From address - Tooltip": "邮件里发件人的邮箱地址",
|
||||
"From name": "发件人名称",
|
||||
@@ -835,6 +835,10 @@
|
||||
"Token URL - Tooltip": "自定义OAuth的Token URL",
|
||||
"Type": "类型",
|
||||
"Type - Tooltip": "类型",
|
||||
"Use WeChat Media Platform in PC": "在PC端使用微信公众平台",
|
||||
"Use WeChat Media Platform in PC - Tooltip": "是否使用微信公众平台的二维码进行登录",
|
||||
"Use WeChat Media Platform to login": "使用微信公众平台进行登录",
|
||||
"Use WeChat Open Platform to login": "使用微信开放平台进行登录",
|
||||
"User flow": "User flow",
|
||||
"User flow - Tooltip": "User flow",
|
||||
"User mapping": "用户映射",
|
||||
|
Reference in New Issue
Block a user