mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
* add new frontend files * Add UI for managing blockers * correctly reset local data after creating blocker * Tweak wording * Add UI for managing blockers * restructure admin pages * add blocker to block emails from registration * lint fixes * Await genericPurchase completion before page reload to prevent request cancellation. Also adds defensive check for undefined error.response in axios interceptor to prevent "t.response undefined" errors. * Fix shop tabs overflow off screen at certain zoom levels Fix quest cards get cut off on small screens Fix pop-up windows extend past screen edges on mobile * Update ToS error message - Updated account suspension message from "This account, User ID..." to "Your account @[username] has been blocked..." - Modified server auth middleware to pass username parameter when throwing account suspended error -Modified auth utils loginRes function to include username in suspended account error - Updated client bannedAccountModal component to pass username (empty string if unavailable) - Updated login test to expect username in account suspended message * lint fix * Responsive Layout for Equipment Containers - Added responsive CSS for mobile (<768px) and tablet (769px-1024px) - Implemented flex-wrap layout that automatically stacks items in rows of 4 on smaller * remove redundant disabled styles in task modals The .disabled class conflicting with existing disabled state implementations * Revert "Merge branch 'fiz/item-container-scaling' into qa/bat" This reverts commit4f28bfaad4, reversing changes made to477dd6328a. * fix(blockers): duplicated code from rebase * fix(admin): revert accidental change from rebase * move !error.response to correct level !error.response before any attempt to access error.response.status * chore(github): split responsiveness to #15514 --------- Co-authored-by: Phillip Thelen <phillip@habitica.com> Co-authored-by: Kalista Payne <kalista@habitica.com>
47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
import nconf from 'nconf';
|
|
import shortid from 'short-uuid';
|
|
import url from 'url';
|
|
|
|
import { NotAuthorized } from '../errors';
|
|
|
|
export const RESTRICTED_EMAIL_DOMAINS = Object.freeze(['habitica.com', 'habitrpg.com']);
|
|
const COMMUNITY_MANAGER_EMAIL = nconf.get('EMAILS_COMMUNITY_MANAGER_EMAIL');
|
|
const translator = shortid('0123456789abcdefghijklmnopqrstuvwxyz');
|
|
|
|
export function generateUsername () {
|
|
const newName = `hb-${translator.new()}`;
|
|
return newName.substring(0, 20);
|
|
}
|
|
|
|
export function loginRes (user, req, res) {
|
|
if (user.auth.blocked) {
|
|
throw new NotAuthorized(res.t(
|
|
'accountSuspended',
|
|
{
|
|
communityManagerEmail: COMMUNITY_MANAGER_EMAIL,
|
|
userId: user._id,
|
|
username: user.auth.local.username,
|
|
},
|
|
));
|
|
}
|
|
const urlPath = url.parse(req.url).pathname;
|
|
if (req.headers['x-client'] === 'habitica-android' && urlPath.includes('apple')) {
|
|
// This is a workaround for android not being able to handle sign in with apple better.
|
|
return res.redirect(`/?id=${user._id}&key=${user.apiToken}&newUser=${user.newUser || false}`);
|
|
}
|
|
|
|
const responseData = {
|
|
id: user._id,
|
|
apiToken: user.apiToken,
|
|
newUser: user.newUser || false,
|
|
username: user.auth.local.username,
|
|
};
|
|
return res.respond(200, responseData);
|
|
}
|
|
|
|
export function isRestrictedEmailDomain (email) {
|
|
if (!email) return false;
|
|
const domain = email.toLowerCase().split('@')[1];
|
|
return RESTRICTED_EMAIL_DOMAINS.includes(domain);
|
|
}
|