diff --git a/object/provider.go b/object/provider.go index 276e0dc4..bf4f8d9b 100644 --- a/object/provider.go +++ b/object/provider.go @@ -29,6 +29,7 @@ type Provider struct { Type string `xorm:"varchar(100)" json:"type"` ClientId string `xorm:"varchar(100)" json:"clientId"` ClientSecret string `xorm:"varchar(100)" json:"clientSecret"` + EnableSignUp bool `json:"enableSignUp"` Host string `xorm:"varchar(100)" json:"host"` Port int `json:"port"` diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js index 61f1be6a..7977fa1f 100644 --- a/web/src/ProviderEditPage.js +++ b/web/src/ProviderEditPage.js @@ -13,7 +13,7 @@ // limitations under the License. import React from "react"; -import {Button, Card, Col, Input, InputNumber, Row, Select} from 'antd'; +import {Button, Card, Col, Input, InputNumber, Row, Select, Switch} from 'antd'; import {LinkOutlined} from "@ant-design/icons"; import * as ProviderBackend from "./backend/ProviderBackend"; import * as Setting from "./Setting"; @@ -177,6 +177,16 @@ class ProviderEditPage extends React.Component { }} /> + + + {i18next.t("application:Enable signup")}: + + + { + this.updateProviderField('enableSignUp', checked); + }} /> + + { this.state.provider.category === "Email" ? ( diff --git a/web/src/ProviderListPage.js b/web/src/ProviderListPage.js index 4488aa52..014b89a3 100644 --- a/web/src/ProviderListPage.js +++ b/web/src/ProviderListPage.js @@ -53,6 +53,7 @@ class ProviderListPage extends React.Component { type: "GitHub", clientId: "", clientSecret: "", + enableSignUp: true, host: "", port: 0, providerUrl: "https://github.com/organizations/xxx/settings/applications/1234567", diff --git a/web/src/Setting.js b/web/src/Setting.js index 246da623..99fa4f79 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -47,6 +47,14 @@ export function isProviderVisible(provider) { } } +export function isProviderVisibleForSignUp(provider) { + if (provider.enableSignUp === false) { + return false; + } + + return isProviderVisible(provider); +} + export function parseJson(s) { if (s === "") { return null; diff --git a/web/src/UserEditPage.js b/web/src/UserEditPage.js index 2ac08f7d..f5dbd41b 100644 --- a/web/src/UserEditPage.js +++ b/web/src/UserEditPage.js @@ -154,7 +154,7 @@ class UserEditPage extends React.Component { return ( - + { Setting.getProviderLogo(provider) } @@ -164,7 +164,7 @@ class UserEditPage extends React.Component { } - + {name} { diff --git a/web/src/auth/LoginPage.js b/web/src/auth/LoginPage.js index 25038b89..721c378a 100644 --- a/web/src/auth/LoginPage.js +++ b/web/src/auth/LoginPage.js @@ -13,7 +13,6 @@ // limitations under the License. import React from "react"; -import {Link} from "react-router-dom"; import {Button, Checkbox, Col, Form, Input, Row} from "antd"; import {LockOutlined, UserOutlined} from "@ant-design/icons"; import * as AuthBackend from "./AuthBackend"; @@ -224,7 +223,7 @@ class LoginPage extends React.Component { { - application.providerObjs.filter(provider => Setting.isProviderVisible(provider)).map(provider => { + application.providerObjs.filter(provider => Setting.isProviderVisibleForSignUp(provider)).map(provider => { return this.renderProviderLogo(provider, application, 30, 5, "small"); }) } @@ -245,7 +244,7 @@ class LoginPage extends React.Component {
{ - application.providerObjs.filter(provider => Setting.isProviderVisible(provider)).map(provider => { + application.providerObjs.filter(provider => Setting.isProviderVisibleForSignUp(provider)).map(provider => { return this.renderProviderLogo(provider, application, 40, 10, "big"); }) }