// Copyright 2021 The casbin Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import React from "react"; import {Link} from "react-router-dom"; import {Button, Popconfirm, Table} from 'antd'; import moment from "moment"; import * as Setting from "./Setting"; import * as ProviderBackend from "./backend/ProviderBackend"; import * as Provider from "./auth/Provider"; import i18next from "i18next"; import BaseListPage from "./BaseListPage"; class ProviderListPage extends BaseListPage { newProvider() { const randomName = Setting.getRandomName(); return { owner: "admin", // this.props.account.providername, name: `provider_${randomName}`, createdTime: moment().format(), displayName: `New Provider - ${randomName}`, category: "OAuth", type: "GitHub", method: "Normal", clientId: "", clientSecret: "", enableSignUp: true, host: "", port: 0, providerUrl: "https://github.com/organizations/xxx/settings/applications/1234567", } } addProvider() { const newProvider = this.newProvider(); ProviderBackend.addProvider(newProvider) .then((res) => { Setting.showMessage("success", `Provider added successfully`); this.props.history.push(`/providers/${newProvider.name}`); } ) .catch(error => { Setting.showMessage("error", `Provider failed to add: ${error}`); }); } deleteProvider(i) { ProviderBackend.deleteProvider(this.state.data[i]) .then((res) => { Setting.showMessage("success", `Provider deleted successfully`); this.setState({ data: Setting.deleteRow(this.state.data, i), pagination: {total: this.state.pagination.total - 1}, }); } ) .catch(error => { Setting.showMessage("error", `Provider failed to delete: ${error}`); }); } renderTable(providers) { const columns = [ { title: i18next.t("general:Name"), dataIndex: 'name', key: 'name', width: '120px', fixed: 'left', sorter: true, ...this.getColumnSearchProps('name'), render: (text, record, index) => { return ( {text} ) } }, { title: i18next.t("general:Created time"), dataIndex: 'createdTime', key: 'createdTime', width: '180px', sorter: true, render: (text, record, index) => { return Setting.getFormattedDate(text); } }, { title: i18next.t("general:Display name"), dataIndex: 'displayName', key: 'displayName', // width: '100px', sorter: true, ...this.getColumnSearchProps('displayName'), }, { title: i18next.t("provider:Category"), dataIndex: 'category', key: 'category', filterMultiple: false, filters: [ {text: 'OAuth', value: 'OAuth'}, {text: 'Email', value: 'Email'}, {text: 'SMS', value: 'SMS'}, {text: 'Storage', value: 'Storage'}, {text: 'SAML', value: 'SAML'}, ], width: '110px', sorter: true, }, { title: i18next.t("provider:Type"), dataIndex: 'type', key: 'type', width: '110px', align: 'center', filterMultiple: false, filters: [ {text: 'OAuth', value: 'OAuth', children: Setting.getProviderTypeOptions('OAuth').map((o) => {return {text:o.id, value:o.name}})}, {text: 'Email', value: 'Email', children: Setting.getProviderTypeOptions('Email').map((o) => {return {text:o.id, value:o.name}})}, {text: 'SMS', value: 'SMS', children: Setting.getProviderTypeOptions('SMS').map((o) => {return {text:o.id, value:o.name}})}, {text: 'Storage', value: 'Storage', children: Setting.getProviderTypeOptions('Storage').map((o) => {return {text:o.id, value:o.name}})}, {text: 'SAML', value: 'SAML', children: Setting.getProviderTypeOptions('SAML').map((o) => {return {text:o.id, value:o.name}})}, ], sorter: true, render: (text, record, index) => { return Provider.getProviderLogoWidget(record); } }, { title: i18next.t("provider:Client ID"), dataIndex: 'clientId', key: 'clientId', width: '100px', sorter: true, ...this.getColumnSearchProps('clientId'), render: (text, record, index) => { return Setting.getShortText(text); } }, { title: i18next.t("provider:Provider URL"), dataIndex: 'providerUrl', key: 'providerUrl', width: '150px', sorter: true, ...this.getColumnSearchProps('providerUrl'), render: (text, record, index) => { return ( { Setting.getShortText(text) } ) } }, { title: i18next.t("general:Action"), dataIndex: '', key: 'op', width: '170px', fixed: (Setting.isMobile()) ? "false" : "right", render: (text, record, index) => { return (