Compare commits

..

7 Commits

Author SHA1 Message Date
Lars Lehtonen
23bb0ee450 feat: fix error handling in AdfsIdProvider (#2687) 2024-02-10 15:38:38 +08:00
Yang Luo
117259dfc5 ci: fix repo name in CI 2024-02-10 15:38:17 +08:00
DacongDA
e71d0476f0 feat: support data initialization for groups, adapters, enforcers, plans and pricings (#2685) 2024-02-08 20:46:40 +08:00
Yang Luo
b5d26767b2 docs: improve README 2024-02-08 00:02:31 +08:00
DacongDA
5c4e22288e feat: improve error handling and code format (#2682)
* feat: improve error process and code format

* feat: improve error process and code format
2024-02-07 20:55:33 +08:00
Satinder Singh
3ac4be64b8 fix: error msg for invalid org & app names in signup (#2679) 2024-02-07 08:53:50 +08:00
DacongDA
97db54b6b9 feat: full support for wechat official account login (#2677)
* feat: full support for wechat official account login

* feat: improve provider edit page

* fix: improve i18n format
2024-02-07 00:00:10 +08:00
40 changed files with 478 additions and 94 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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": "",
}
]
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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": "用户映射",