// Copyright 2021 The Casdoor 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 {Button, Card, Col, Input, Row, Select, Switch} from "antd";
import {LinkOutlined} from "@ant-design/icons";
import * as WebhookBackend from "./backend/WebhookBackend";
import * as OrganizationBackend from "./backend/OrganizationBackend";
import * as Setting from "./Setting";
import i18next from "i18next";
import WebhookHeaderTable from "./table/WebhookHeaderTable";
import {Controlled as CodeMirror} from "react-codemirror2";
import "codemirror/lib/codemirror.css";
require("codemirror/theme/material-darker.css");
require("codemirror/mode/javascript/javascript");
const {Option} = Select;
const applicationTemplate = {
owner: "admin", // this.props.account.applicationName,
name: "application_123",
organization: "built-in",
createdTime: "2022-01-01T01:03:42+08:00",
displayName: "New Application - 123",
logo: `${Setting.StaticBaseUrl}/img/casdoor-logo_1185x256.png`,
enablePassword: true,
enableSignUp: true,
enableSigninSession: false,
enableCodeSignin: false,
enableSamlCompress: false,
};
const previewTemplate = {
"id": 9078,
"owner": "built-in",
"name": "68f55b28-7380-46b1-9bde-64fe1576e3b3",
"createdTime": "2022-01-01T01:03:42+08:00",
"organization": "built-in",
"clientIp": "159.89.126.192",
"user": "admin",
"method": "POST",
"requestUri": "/api/add-application",
"action": "login",
"isTriggered": false,
"object": JSON.stringify(applicationTemplate),
};
const userTemplate = {
"owner": "built-in",
"name": "admin",
"createdTime": "2020-07-16T21:46:52+08:00",
"updatedTime": "",
"deletedTime": "",
"id": "9eb20f79-3bb5-4e74-99ac-39e3b9a171e8",
"type": "normal-user",
"password": "***",
"passwordSalt": "",
"displayName": "Admin",
"avatar": "https://cdn.casbin.com/usercontent/admin/avatar/1596241359.png",
"permanentAvatar": "https://cdn.casbin.com/casdoor/avatar/casbin/admin.png",
"email": "admin@example.com",
"phone": "",
"location": "",
"address": null,
"affiliation": "",
"title": "",
"score": 10000,
"ranking": 10,
"isOnline": false,
"isAdmin": true,
"isForbidden": false,
"isDeleted": false,
"signupApplication": "app-casnode",
"properties": {
"bio": "",
"checkinDate": "20200801",
"editorType": "",
"emailVerifiedTime": "2020-07-16T21:46:52+08:00",
"fileQuota": "50",
"location": "",
"no": "22",
"oauth_QQ_displayName": "",
"oauth_QQ_verifiedTime": "",
"oauth_WeChat_displayName": "",
"oauth_WeChat_verifiedTime": "",
"onlineStatus": "false",
"phoneVerifiedTime": "",
"renameQuota": "3",
"tagline": "",
"website": "",
},
};
class WebhookEditPage extends React.Component {
constructor(props) {
super(props);
this.state = {
classes: props,
webhookName: props.match.params.webhookName,
webhook: null,
organizations: [],
mode: props.location.mode !== undefined ? props.location.mode : "edit",
};
}
UNSAFE_componentWillMount() {
this.getWebhook();
this.getOrganizations();
}
getWebhook() {
WebhookBackend.getWebhook("admin", this.state.webhookName)
.then((res) => {
if (res.data === null) {
this.props.history.push("/404");
return;
}
this.setState({
webhook: res.data,
});
});
}
getOrganizations() {
OrganizationBackend.getOrganizations("admin")
.then((res) => {
this.setState({
organizations: res.data || [],
});
});
}
parseWebhookField(key, value) {
if (["port"].includes(key)) {
value = Setting.myParseInt(value);
}
return value;
}
updateWebhookField(key, value) {
value = this.parseWebhookField(key, value);
const webhook = this.state.webhook;
webhook[key] = value;
this.setState({
webhook: webhook,
});
}
getApiPaths() {
const objects = ["organization", "group", "user", "application", "provider", "resource", "cert", "role", "permission", "model", "adapter", "enforcer", "session", "record", "token", "product", "payment", "plan", "pricing", "subscription", "syncer", "webhook"];
const res = [];
objects.forEach(obj => {
["add", "update", "delete"].forEach(action => {
res.push(`${action}-${obj}`);
});
});
return res;
}
renderWebhook() {
const preview = Setting.deepCopy(previewTemplate);
if (this.state.webhook.isUserExtended) {
preview["extendedUser"] = userTemplate;
}
const previewText = JSON.stringify(preview, null, 2);
return (