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 {
}
-
+
{
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");
})
}