mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-01 06:50:00 +00:00
remove old/admin files
This commit is contained in:
parent
8c1f05159e
commit
fed168af4c
2 changed files with 0 additions and 246 deletions
|
@ -1,64 +0,0 @@
|
||||||
/*
|
|
||||||
GoToSocial
|
|
||||||
Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
const Promise = require("bluebird");
|
|
||||||
const React = require("react");
|
|
||||||
const ReactDom = require("react-dom");
|
|
||||||
|
|
||||||
const createPanel = require("../lib/panel");
|
|
||||||
|
|
||||||
const Settings = require("./settings");
|
|
||||||
const Blocks = require("./blocks");
|
|
||||||
|
|
||||||
require("../base.css");
|
|
||||||
require("./style.css");
|
|
||||||
|
|
||||||
function AdminPanel({oauth}) {
|
|
||||||
/*
|
|
||||||
Features: (issue #78)
|
|
||||||
- [ ] Instance information updating
|
|
||||||
GET /api/v1/instance PATCH /api/v1/instance
|
|
||||||
- [ ] Domain block creation, viewing, and deletion
|
|
||||||
GET /api/v1/admin/domain_blocks
|
|
||||||
POST /api/v1/admin/domain_blocks
|
|
||||||
GET /api/v1/admin/domain_blocks/DOMAIN_BLOCK_ID, DELETE /api/v1/admin/domain_blocks/DOMAIN_BLOCK_ID
|
|
||||||
- [ ] Blocklist import/export
|
|
||||||
GET /api/v1/admin/domain_blocks?export=true
|
|
||||||
POST json file as form field domains to /api/v1/admin/domain_blocks
|
|
||||||
*/
|
|
||||||
|
|
||||||
return (
|
|
||||||
<React.Fragment>
|
|
||||||
<Logout oauth={oauth}/>
|
|
||||||
<Settings oauth={oauth} />
|
|
||||||
<Blocks oauth={oauth}/>
|
|
||||||
</React.Fragment>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function Logout({oauth}) {
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<button onClick={oauth.logout}>Logout</button>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
createPanel("GoToSocial Admin Panel", ["admin"], AdminPanel);
|
|
|
@ -1,182 +0,0 @@
|
||||||
/*
|
|
||||||
GoToSocial
|
|
||||||
Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
const Promise = require("bluebird");
|
|
||||||
const React = require("react");
|
|
||||||
|
|
||||||
module.exports = function Settings({oauth}) {
|
|
||||||
const [info, setInfo] = React.useState({});
|
|
||||||
const [errorMsg, setError] = React.useState("");
|
|
||||||
const [statusMsg, setStatus] = React.useState("Fetching instance info");
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
Promise.try(() => {
|
|
||||||
return oauth.apiRequest("/api/v1/instance", "GET");
|
|
||||||
}).then((json) => {
|
|
||||||
setInfo(json);
|
|
||||||
}).catch((e) => {
|
|
||||||
setError(e.message);
|
|
||||||
setStatus("");
|
|
||||||
});
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
function submit() {
|
|
||||||
setStatus("PATCHing");
|
|
||||||
setError("");
|
|
||||||
return Promise.try(() => {
|
|
||||||
let formDataInfo = new FormData();
|
|
||||||
Object.entries(info).forEach(([key, val]) => {
|
|
||||||
if (key == "contact_account") {
|
|
||||||
key = "contact_username";
|
|
||||||
val = val.username;
|
|
||||||
}
|
|
||||||
if (key == "email") {
|
|
||||||
key = "contact_email";
|
|
||||||
}
|
|
||||||
if (typeof val != "object") {
|
|
||||||
formDataInfo.append(key, val);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return oauth.apiRequest("/api/v1/instance", "PATCH", formDataInfo, "form");
|
|
||||||
}).then((json) => {
|
|
||||||
setStatus("Config saved");
|
|
||||||
console.log(json);
|
|
||||||
}).catch((e) => {
|
|
||||||
setError(e.message);
|
|
||||||
setStatus("");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<section className="info login">
|
|
||||||
<h1>Instance Information <button onClick={submit}>Save</button></h1>
|
|
||||||
<div className="error accent">
|
|
||||||
{errorMsg}
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{statusMsg}
|
|
||||||
</div>
|
|
||||||
<form onSubmit={(e) => e.preventDefault()}>
|
|
||||||
{editableObject(info)}
|
|
||||||
</form>
|
|
||||||
</section>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
function editableObject(obj, path=[]) {
|
|
||||||
const readOnlyKeys = ["uri", "version", "urls_streaming_api", "stats"];
|
|
||||||
const hiddenKeys = ["contact_account_", "urls"];
|
|
||||||
const explicitShownKeys = ["contact_account_username"];
|
|
||||||
const implementedKeys = "title, contact_account_username, email, short_description, description, terms, avatar, header".split(", ");
|
|
||||||
const textareaKeys = ["short_description", "description"]
|
|
||||||
|
|
||||||
let listing = Object.entries(obj).map(([key, val]) => {
|
|
||||||
let fullkey = [...path, key].join("_");
|
|
||||||
|
|
||||||
if (
|
|
||||||
hiddenKeys.includes(fullkey) ||
|
|
||||||
hiddenKeys.includes(path.join("_")+"_") // also match just parent path
|
|
||||||
) {
|
|
||||||
if (!explicitShownKeys.includes(fullkey)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(val)) {
|
|
||||||
// FIXME: handle this
|
|
||||||
} else if (typeof val == "object") {
|
|
||||||
return (<React.Fragment key={fullkey}>
|
|
||||||
{editableObject(val, [...path, key])}
|
|
||||||
</React.Fragment>);
|
|
||||||
}
|
|
||||||
|
|
||||||
let isImplemented = "";
|
|
||||||
if (!implementedKeys.includes(fullkey)) {
|
|
||||||
isImplemented = " notImplemented";
|
|
||||||
}
|
|
||||||
|
|
||||||
let isReadOnly = (
|
|
||||||
readOnlyKeys.includes(fullkey) ||
|
|
||||||
readOnlyKeys.includes(path.join("_")) ||
|
|
||||||
isImplemented != ""
|
|
||||||
);
|
|
||||||
|
|
||||||
let label = key.replace(/_/g, " ");
|
|
||||||
if (path.length > 0) {
|
|
||||||
label = `\u00A0`.repeat(4 * path.length) + label;
|
|
||||||
}
|
|
||||||
|
|
||||||
let inputProps;
|
|
||||||
let changeFunc;
|
|
||||||
if (val === true || val === false) {
|
|
||||||
inputProps = {
|
|
||||||
type: "checkbox",
|
|
||||||
defaultChecked: val,
|
|
||||||
disabled: isReadOnly
|
|
||||||
};
|
|
||||||
changeFunc = (e) => e.target.checked;
|
|
||||||
} else if (val.length != 0 && !isNaN(val)) {
|
|
||||||
inputProps = {
|
|
||||||
type: "number",
|
|
||||||
defaultValue: val,
|
|
||||||
readOnly: isReadOnly
|
|
||||||
};
|
|
||||||
changeFunc = (e) => e.target.value;
|
|
||||||
} else {
|
|
||||||
inputProps = {
|
|
||||||
type: "text",
|
|
||||||
defaultValue: val,
|
|
||||||
readOnly: isReadOnly
|
|
||||||
};
|
|
||||||
changeFunc = (e) => e.target.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setRef(element) {
|
|
||||||
if (element != null) {
|
|
||||||
element.addEventListener("change", (e) => {
|
|
||||||
obj[key] = changeFunc(e);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let field;
|
|
||||||
if (textareaKeys.includes(fullkey)) {
|
|
||||||
field = <textarea className={isImplemented} ref={setRef} {...inputProps}></textarea>
|
|
||||||
} else {
|
|
||||||
field = <input className={isImplemented} ref={setRef} {...inputProps} />
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
<React.Fragment key={fullkey}>
|
|
||||||
<label htmlFor={key} className="capitalize">{label}</label>
|
|
||||||
<div className={isImplemented}>
|
|
||||||
{field}
|
|
||||||
</div>
|
|
||||||
</React.Fragment>
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return (
|
|
||||||
<React.Fragment>
|
|
||||||
{path != "" &&
|
|
||||||
<><b>{path}:</b> <span id="filler"></span></>
|
|
||||||
}
|
|
||||||
{listing}
|
|
||||||
</React.Fragment>
|
|
||||||
);
|
|
||||||
}
|
|
Loading…
Reference in a new issue