diff --git a/config.json b/config.json index c647dbb..2aa67dd 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,6 @@ { - "defaultHomeserver": 4, + "defaultHomeserver": 3, "homeserverList": [ - "converser.eu", "envs.net", "halogen.city", "kde.org", diff --git a/src/app/templates/auth/Auth.jsx b/src/app/templates/auth/Auth.jsx index 0c27c00..7c21173 100644 --- a/src/app/templates/auth/Auth.jsx +++ b/src/app/templates/auth/Auth.jsx @@ -56,11 +56,8 @@ function Homeserver({ onChange }) { const setupHsConfig = async (servername) => { setProcess({ isLoading: true, message: 'Looking for homeserver...' }); let baseUrl = null; - try { - baseUrl = await getBaseUrl(servername); - } catch (e) { - baseUrl = e.message; - } + baseUrl = await getBaseUrl(servername); + if (searchingHs !== servername) return; setProcess({ isLoading: true, message: `Connecting to ${baseUrl}...` }); const tempClient = auth.createTemporaryClient(baseUrl); @@ -175,31 +172,38 @@ function Login({ loginFlow, baseUrl }) { const validator = (values) => { const errors = {}; - if (typeIndex === 0 && values.username.length > 0 && values.username.indexOf(':') > -1) { - errors.username = 'Username must contain local-part only'; - } if (typeIndex === 1 && values.email.length > 0 && !isValidInput(values.email, EMAIL_REGEX)) { errors.email = BAD_EMAIL_ERROR; } return errors; }; - const submitter = (values, actions) => auth.login( - baseUrl, - typeIndex === 0 ? normalizeUsername(values.username) : undefined, - typeIndex === 1 ? values.email : undefined, - values.password, - ).then(() => { - actions.setSubmitting(true); - window.location.reload(); - }).catch((error) => { - let msg = error.message; - if (msg === 'Unknown message') msg = 'Please check your credentials'; - actions.setErrors({ - password: msg === 'Invalid password' ? msg : undefined, - other: msg !== 'Invalid password' ? msg : undefined, + const submitter = async (values, actions) => { + let userBaseUrl = baseUrl; + let { username } = values; + const mxIdMatch = username.match(/^@(.+):(.+\..+)$/); + if (typeIndex === 0 && mxIdMatch) { + [, username, userBaseUrl] = mxIdMatch; + userBaseUrl = await getBaseUrl(userBaseUrl); + } + + return auth.login( + userBaseUrl, + typeIndex === 0 ? normalizeUsername(username) : undefined, + typeIndex === 1 ? values.email : undefined, + values.password, + ).then(() => { + actions.setSubmitting(true); + window.location.reload(); + }).catch((error) => { + let msg = error.message; + if (msg === 'Unknown message') msg = 'Please check your credentials'; + actions.setErrors({ + password: msg === 'Invalid password' ? msg : undefined, + other: msg !== 'Invalid password' ? msg : undefined, + }); + actions.setSubmitting(false); }); - actions.setSubmitting(false); - }); + }; return ( <> diff --git a/src/util/matrixUtil.js b/src/util/matrixUtil.js index fb97d85..ef016ed 100644 --- a/src/util/matrixUtil.js +++ b/src/util/matrixUtil.js @@ -20,7 +20,7 @@ export async function getBaseUrl(servername) { if (baseUrl === undefined) throw new Error(); return baseUrl; } catch (e) { - throw new Error(`${protocol}${servername}`); + return `${protocol}${servername}`; } } @@ -204,11 +204,10 @@ export async function hasDevices(userId) { const mx = initMatrix.matrixClient; try { const usersDeviceMap = await mx.downloadKeys([userId, mx.getUserId()]); - return Object.values(usersDeviceMap).every((userDevices) => - Object.keys(userDevices).length > 0, - ); + return Object.values(usersDeviceMap) + .every((userDevices) => (Object.keys(userDevices).length > 0)); } catch (e) { console.error("Error determining if it's possible to encrypt to all users: ", e); return false; } -} \ No newline at end of file +}