Add switch to login form for choosing well-know or given server address

This commit is contained in:
dklimpel 2020-03-29 15:40:04 +02:00
parent 7eeb60539f
commit 2e197e508f
4 changed files with 29 additions and 5 deletions

View File

@ -6,6 +6,7 @@ import {
useLocale,
useSetLocale,
useTranslate,
BooleanInput,
} from "react-admin";
import { Field, Form } from "react-final-form";
import {
@ -71,6 +72,7 @@ const LoginPage = ({ theme }) => {
const setLocale = useSetLocale();
const translate = useTranslate();
const homeserver = localStorage.getItem("base_url");
const force_server = localStorage.getItem("force_server");
const renderInput = ({
meta: { touched, error } = {},
@ -117,7 +119,7 @@ const LoginPage = ({ theme }) => {
return (
<Form
initialValues={{ homeserver: homeserver }}
initialValues={{ homeserver: homeserver, force_server: force_server }}
onSubmit={handleSubmit}
validate={validate}
render={({ handleSubmit }) => (
@ -154,6 +156,14 @@ const LoginPage = ({ theme }) => {
label={translate("synapseadmin.auth.homeserver")}
disabled={loading}
/>
</div>
<div className={classes.input}>
<BooleanInput
autoFocus
name="force_server"
label={translate("synapseadmin.auth.force_server")}
disabled={loading}
/>
</div>
<div className={classes.input}>
<Field

View File

@ -6,6 +6,7 @@ export default {
auth: {
homeserver: "Heimserver",
welcome: "Willkommen bei Synapse-admin",
force_server: "Homeserver-Adresse erzwingen",
},
users: {
invalid_user_id:

View File

@ -6,6 +6,7 @@ export default {
auth: {
homeserver: "Homeserver",
welcome: "Welcome to Synapse-admin",
force_server: "Force homeserver address",
},
users: {
invalid_user_id:

View File

@ -15,9 +15,17 @@ const stripTrailingSlash = str => {
return str.endsWith("/") ? str.slice(0, -1) : str;
};
const getBaseUrl = (login_base_url, json_base_url, force_server) => {
if (force_server) {
return ensureHttpsForUrl(login_base_url);
} else {
return json_base_url;
}
}
const authProvider = {
// called when the user attempts to log in
login: ({ homeserver, username, password }) => {
login: ({ homeserver, force_server, username, password }) => {
console.log("login ");
const options = {
method: "POST",
@ -34,11 +42,15 @@ const authProvider = {
ensureHttpsForUrl(trimmed_url) + "/_matrix/client/r0/login";
return fetchUtils.fetchJson(login_api_url, options).then(({ json }) => {
const normalized_base_url = stripTrailingSlash(
json.well_known["m.homeserver"].base_url
);
const normalized_base_url = stripTrailingSlash(getBaseUrl(
trimmed_url,
json.well_known["m.homeserver"].base_url,
force_server
));
localStorage.setItem("base_url", normalized_base_url);
localStorage.setItem("home_server_url", json.home_server);
localStorage.setItem("force_server", force_server);
localStorage.setItem("user_id", json.user_id);
localStorage.setItem("access_token", json.access_token);
localStorage.setItem("device_id", json.device_id);