diff --git a/src/locales/en.po b/src/locales/en.po index bf6cffa5e4..e9c9f063a8 100644 --- a/src/locales/en.po +++ b/src/locales/en.po @@ -1319,8 +1319,8 @@ msgid "Accounts…" msgstr "" #: src/components/nav-menu.jsx:326 -#: src/pages/login.jsx:32 -#: src/pages/login.jsx:199 +#: src/pages/login.jsx:35 +#: src/pages/login.jsx:207 #: src/pages/status.jsx:1000 #: src/pages/welcome.jsx:65 msgid "Log in" @@ -2079,7 +2079,7 @@ msgstr "" #: src/components/shortcuts-settings.jsx:75 #: src/components/shortcuts-settings.jsx:84 #: src/components/shortcuts-settings.jsx:122 -#: src/pages/login.jsx:203 +#: src/pages/login.jsx:211 msgid "Instance" msgstr "" @@ -2716,7 +2716,7 @@ msgstr "Login required." #: src/compose.jsx:91 #: src/pages/annual-report.jsx:164 #: src/pages/http-route.jsx:91 -#: src/pages/login.jsx:280 +#: src/pages/login.jsx:288 msgid "Go home" msgstr "" @@ -3421,32 +3421,32 @@ msgstr "" msgid "No lists yet." msgstr "" -#: src/pages/login.jsx:122 -#: src/pages/login.jsx:132 +#: src/pages/login.jsx:127 +#: src/pages/login.jsx:137 msgid "Failed to register application" msgstr "Failed to register application" -#: src/pages/login.jsx:218 +#: src/pages/login.jsx:226 msgid "instance domain" msgstr "instance domain" -#: src/pages/login.jsx:242 +#: src/pages/login.jsx:250 msgid "e.g. “mastodon.social”" msgstr "" -#: src/pages/login.jsx:253 +#: src/pages/login.jsx:261 msgid "Failed to log in. Please try again or try another instance." msgstr "" -#: src/pages/login.jsx:265 +#: src/pages/login.jsx:273 msgid "Continue with {selectedInstanceText}" msgstr "" -#: src/pages/login.jsx:266 +#: src/pages/login.jsx:274 msgid "Continue" msgstr "" -#: src/pages/login.jsx:274 +#: src/pages/login.jsx:282 msgid "Don't have an account? Create one!" msgstr "" diff --git a/src/pages/login.jsx b/src/pages/login.jsx index 6ace1f8876..e60dc6d3da 100644 --- a/src/pages/login.jsx +++ b/src/pages/login.jsx @@ -25,7 +25,10 @@ import { } from '../utils/store-utils'; import useTitle from '../utils/useTitle'; -const { PHANPY_DEFAULT_INSTANCE: DEFAULT_INSTANCE } = import.meta.env; +const { + PHANPY_DEFAULT_INSTANCE: DEFAULT_INSTANCE, + PHANPY_SCHEME: SCHEME = 'https', +} = import.meta.env; function Login() { const { t } = useLingui(); @@ -69,7 +72,9 @@ function Login() { // WEB_DOMAIN vs LOCAL_DOMAIN negotiation time // https://docs.joinmastodon.org/admin/config/#web_domain try { - const res = await fetch(`https://${instanceURL}/.well-known/host-meta`); // returns XML + const res = await fetch( + `${PHANPY_SCHEME}://${instanceURL}/.well-known/host-meta`, + ); // returns XML const text = await res.text(); // Parse XML const parser = new DOMParser(); @@ -148,8 +153,11 @@ function Login() { .trim() : null; const instanceTextLooksLikeDomain = - /[^\s\r\n\t\/\\]+\.[^\s\r\n\t\/\\]+/.test(cleanInstanceText) && - !/[\s\/\\@]/.test(cleanInstanceText); + (/[^\s\r\n\t\/\\]+\.[^\s\r\n\t\/\\]+/.test(cleanInstanceText) && + !/[\s\/\\@]/.test(cleanInstanceText)) || + SCHEME === 'http'; + + console.log(SCHEME); const instancesSuggestions = cleanInstanceText ? searcher.current diff --git a/src/utils/api.js b/src/utils/api.js index 560e5b36fa..aa5892d936 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -13,6 +13,8 @@ import { setCurrentAccountID, } from './store-utils'; +const { PHANPY_SCHEME: SCHEME = 'https' } = import.meta.env; + // Default *fallback* instance const DEFAULT_INSTANCE = 'mastodon.social'; @@ -40,7 +42,9 @@ export function initClient({ instance, accessToken }) { .replace(/\/+$/, '') .toLowerCase(); } - const url = instance ? `https://${instance}` : `https://${DEFAULT_INSTANCE}`; + const url = instance + ? `${SCHEME}://${instance}` + : `${SCHEME}://${DEFAULT_INSTANCE}`; const masto = createRestAPIClient({ url, diff --git a/src/utils/auth.js b/src/utils/auth.js index b103eff5b1..ce6f3c7df8 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -4,6 +4,7 @@ const { DEV, PHANPY_CLIENT_NAME: CLIENT_NAME, PHANPY_WEBSITE: WEBSITE, + PHANPY_SCHEME: SCHEME = 'https', } = import.meta.env; const SCOPES = 'read write follow push'; @@ -31,7 +32,7 @@ export async function registerApplication({ instanceURL }) { website: WEBSITE, }); const registrationResponse = await fetch( - `https://${instanceURL}/api/v1/apps`, + `${SCHEME}://${instanceURL}/api/v1/apps`, { method: 'POST', headers: { @@ -78,7 +79,7 @@ export async function getAuthorizationURL({ response_type: 'code', }); if (forceLogin) authorizationParams.append('force_login', true); - const authorizationURL = `https://${instanceURL}/oauth/authorize?${authorizationParams.toString()}`; + const authorizationURL = `${SCHEME}://${instanceURL}/oauth/authorize?${authorizationParams.toString()}`; return authorizationURL; } @@ -104,7 +105,7 @@ export async function getAccessToken({ if (code_verifier) { params.append('code_verifier', code_verifier); } - const tokenResponse = await fetch(`https://${instanceURL}/oauth/token`, { + const tokenResponse = await fetch(`${SCHEME}://${instanceURL}/oauth/token`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded',