[feature] Add first iteration of a user panel at /user (#736)

* start work on user panel

* parse source first before checking if empty form

* newline

* set avi + header nicely

* add posts settings

* render signin a bit nicer on mobile

* return OK json on successful change

* return unauthorized on bad password

* clarify message on insecure password

* make login a bit prettier

* add alt text + border round image previews

* add logout button

* add password change

* styling updates

* redirect /auth/edit to /user

* update tests

* fix validation tests

* better labels, link to more info

* make submit button generic component

* move submit button inside forms

* add autocomplete labels to password fields

* fix indentation (thx eslint)

* update eslintrc

* eslint: no-unescaped-entities

* initial deduplication between user and admin panel

* add default status/post format setting

* user panel styling for inputs

* update user panel styling, include normalize css

* add placeholder text

* input padding

Co-authored-by: f0x <f0x@cthu.lu>
This commit is contained in:
tobi 2022-08-08 10:40:51 +02:00 committed by GitHub
commit 117888cf59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 931 additions and 202 deletions

View file

@ -22,45 +22,14 @@ const Promise = require("bluebird");
const React = require("react");
const ReactDom = require("react-dom");
const oauthLib = require("../../lib/oauth.js");
const Auth = require("./auth");
const createPanel = require("../lib/panel");
const Settings = require("./settings");
const Blocks = require("./blocks");
require("../base.css");
require("./style.css");
function App() {
const [oauth, setOauth] = React.useState();
const [hasAuth, setAuth] = React.useState(false);
const [oauthState, setOauthState] = React.useState(localStorage.getItem("oauth"));
React.useEffect(() => {
let state = localStorage.getItem("oauth");
if (state != undefined) {
state = JSON.parse(state);
let restoredOauth = oauthLib(state.config, state);
Promise.try(() => {
return restoredOauth.callback();
}).then(() => {
setAuth(true);
});
setOauth(restoredOauth);
}
}, []);
if (!hasAuth && oauth && oauth.isAuthorized()) {
setAuth(true);
}
if (oauth && oauth.isAuthorized()) {
return <AdminPanel oauth={oauth} />;
} else if (oauthState != undefined) {
return "processing oauth...";
} else {
return <Auth setOauth={setOauth} />;
}
}
function AdminPanel({oauth}) {
/*
Features: (issue #78)
@ -92,4 +61,4 @@ function Logout({oauth}) {
);
}
ReactDom.render(<App/>, document.getElementById("root"));
createPanel("GoToSocial Admin Panel", ["admin"], AdminPanel);