1
0
Fork 0
mirror of https://gitlab.com/Alamantus/Readlebee.git synced 2026-09-20 19:17:52 +02:00

Compare commits

..

No commits in common. "9f736d4731467e5cc6375cc03551c249c431be47" and "34403b8ec7b2bfa3629dbe2b21b3dfd5e4604f24" have entirely different histories.

14 changed files with 11 additions and 121 deletions

View file

@ -13,7 +13,6 @@ export class LoginController extends ViewController {
createDisplayName: '',
createPassword: '',
createConfirm: '',
createPermission: 100,
},
loginError: '',
createError: '',
@ -147,8 +146,7 @@ export class LoginController extends ViewController {
createEmail,
createUsername,
createDisplayName,
createPassword,
createPermission
createPassword
} = this.state.fieldValues;
fetch('/api/account/create', {
@ -161,7 +159,6 @@ export class LoginController extends ViewController {
username: createUsername,
displayName: createDisplayName,
password: createPassword,
permissionLevel: createPermission,
}),
}).then(response => response.json())
.then(response => {

View file

@ -127,22 +127,6 @@ export const loginView = (state, emit, i18n) => {
onkeyup=${e => { if (e.key === 'Enter') controller.validateCreateAccount() }}
>
</label>
<label>
<span>${__('login.permissions.label')}</span>
<select name="new_visibility"
onchange=${e => controller.state.fieldValues.createPermission = e.target.value.trim()}
>
<option value="100" ${controller.state.fieldValues.createPermission === 100 ? 'selected' : null}>
${__('login.permissions.public')}
</option>
<option value="33" ${controller.state.fieldValues.createPermission === 33 ? 'selected' : null}>
${__('login.permissions.following')}
</option>
<option value="0" ${controller.state.fieldValues.createPermission === 0 ? 'selected' : null}>
${__('login.permissions.private')}
</option>
</select>
</label>
${
controller.state.createError === ''
? null

View file

@ -27,7 +27,6 @@ class AccountController {
if (typeof createAccountData.email === 'undefined'
|| typeof createAccountData.username === 'undefined'
|| typeof createAccountData.password === 'undefined'
|| typeof createAccountData.permissionLevel === 'undefined'
|| createAccountData.password === '') {
return {
error: true,
@ -46,12 +45,6 @@ class AccountController {
message: 'api.account.create.invalid_username',
};
}
if (![100, 33, 0].includes(createAccountData.permissionLevel)) {
return {
error: true,
message: 'api.account.create.invalid_permissionLevel',
};
}
return true;
}
@ -82,7 +75,6 @@ class AccountController {
username: formData.username.toString().trim(),
displayName: displayName.length > 0 ? displayName : 'A Bee',
password: formData.password,
permissionLevel: formData.permissionLevel,
}
}
@ -138,7 +130,7 @@ class AccountController {
return true;
}
async createUser (email, username, displayName, permissionLevel, password, needsConfirmation) {
async createUser (email, username, displayName, password, needsConfirmation) {
const hashData = AccountController.hashPassword(password);
// The data should already have gone through AccountController.cleanCreateAccountFormData()
try {
@ -146,7 +138,6 @@ class AccountController {
email,
username,
displayName,
permissionLevel,
passwordHash: hashData.hash,
passwordSalt: hashData.salt,
accountConfirm: needsConfirmation ? crypto.randomBytes(32).toString('hex') : null,

View file

@ -286,25 +286,6 @@ class ShelfController {
return success;
}
async deleteShelfItem(shelfItem) {
// Only fully remove if no statuses are associated
const statuses = await shelfItem.getStatuses();
const options = {};
if (statuses.length < 1) {
options.force = true;
}
const success = await shelfItem.destroy(options);
if (!success) {
return {
error: shelfItem,
};
}
return success;
}
}
module.exports = ShelfController;

View file

@ -41,12 +41,6 @@
"confirm_password": "Confirm Password",
"username": "Username",
"display_name": "Display Name",
"permissions": {
"label": "Profile Visibility",
"public": "Public (anyone can see you)",
"following": "Following (only accounts you follow can see you)",
"private": "Private (nobody can see you)"
},
"create_account_button": "Create Account!",
"login_required_field_blank": "You must enter both a valid email address and password.",
"create_required_field_blank": "You must complete all required fields.",
@ -99,8 +93,7 @@
"fail": "Something went wrong and the account could not be created. Please try again later.",
"required_data_missing": "Could not create account because required data is missing.",
"invalid_email": "The email address entered is not valid.",
"invalid_username": "The username entered is not valid. Usernames must be at least 2 characters long and can only contain letters az, numbers 09, and underscores.",
"invalid_permissionLevel": "The permissionLevel entered is not valid. PermissionLevel must be one 100, 33, or 0. Contact the front-end developer and ask them to fix their permission selector.",
"invalid_username": "The username entered is not valid. Usernames must be at least 2 characters long and can only contain letters az, numbers 09, and underscores",
"success": "Account created successfully! You may now log in using the email address and password you provided."
},
"confirm": {

View file

@ -11,12 +11,7 @@ async function routes(fastify, options) {
response.locale = fastify.i18n[request.params.locale];
}
return reply.setCookie('lang', request.params.locale, {
path: '/',
expires: new Date('December 31, 9999'), // Don't expire
maxAge: new Date('December 31, 9999'), // Both are set as a "just in case"
sameSite: true, // Prevents the cookie from being used outside of this site
}).send(response);
return response;
});
fastify.get('/locales/:locale/page/:page', async (request, reply) => {

View file

@ -82,9 +82,6 @@ fastify.addHook('onRequest', async (request, reply) => {
request.user = user;
}
}
if (typeof request.cookies.lang !== 'undefined') {
request.language = request.cookies.lang;
}
});
// Store i18n files in fastify object and register locales routes

View file

@ -30,14 +30,14 @@ async function routes(fastify, options) {
return reply.code(400).send(canCreateUser);
}
const newUser = await account.createUser(formData.email, formData.username, formData.displayName, formData.permissionLevel, formData.password, fastify.canEmail);
const newUser = await account.createUser(formData.email, formData.username, formData.displayName, formData.password, fastify.canEmail);
if (typeof newUser.error !== 'undefined' && newUser.error !== false) {
newUser.message = 'api.account.create.fail';
return reply.code(400).send(newUser);
}
const shelf = new ShelfController(fastify.models, null);
const shelf = new ShelfController(fastify.models.Shelf, fastify.models.ShelfItem);
const defaultShelvesCreated = await shelf.createDefaultShelves(newUser);
// If some of the default shelves are not created successfully, delete the user and send an error

View file

@ -18,7 +18,7 @@ async function routes(fastify, options) {
const shelfController = new ShelfController(fastify.models);
const shelves = await request.user.getShelves({
attributes: ['id', 'name', 'isDeletable', 'permissionLevel', 'updatedAt'],
attributes: ['id', 'name', 'isDeletable', 'isPublic', 'updatedAt'],
});
return shelves.map(shelf => {
@ -258,11 +258,11 @@ async function routes(fastify, options) {
const shelfController = new ShelfController(fastify.models, request.language);
const moveSuccess = await shelfController.moveShelfItem(shelfItem, toShelf);
const shelfItem = await shelfController.moveShelfItem(shelfItem, toShelf);
if (typeof moveSuccess.error !== 'undefined') {
if (typeof shelfItem.error !== 'undefined') {
return reply.code(400).send({
error: moveSuccess.error,
error: shelfItem.error,
message: 'api.shelf.moveItem.could_not_move',
});
}
@ -272,49 +272,6 @@ async function routes(fastify, options) {
message: 'api.shelf.moveItem.success',
});
});
fastify.post('/api/shelf/deleteItem', async (request, reply) => {
if (!request.isLoggedInUser) {
return reply.code(401).send({
error: true,
message: 'api.not_logged_in',
});
}
if (typeof request.body.itemId === 'undefined') {
return reply.code(400).send({
error: true,
message: 'api.shelf.deleteItem.missing_item_id',
});
}
const shelfItem = await fastify.models.ShelfItem.findByPk(request.body.itemId, {
include: [ fastify.models.Shelf ],
});
if (!ShelfController.userOwnsShelf(request.user, shelfItem.Shelf)) {
return reply.code(403).send({
error: true,
message: 'api.shelf.not_owner',
});
}
const shelfController = new ShelfController(fastify.models, request.language);
const deleteSuccess = await shelfController.deleteShelfItem(shelfItem);
if (typeof deleteSuccess.error !== 'undefined') {
return reply.code(400).send({
error: deleteSuccess.error,
message: 'api.shelf.deleteItem.could_not_delete',
});
}
return reply.send({
error: false,
message: 'api.shelf.deleteItem.success',
});
});
}
module.exports = routes;

View file

@ -18,7 +18,6 @@ module.exports = sequelize => sequelize.define('Review', {
permissionLevel: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 0,
references: {
model: sequelize.models.PermissionLevel,
key: 'id',

View file

@ -25,7 +25,6 @@ module.exports = sequelize => sequelize.define('Shelf', {
permissionLevel: {
type: Sequelize.NUMBER,
allowNull: false,
defaultValue: 0,
references: {
model: sequelize.models.PermissionLevel,
key: 'id',

View file

@ -51,5 +51,4 @@ module.exports = sequelize => sequelize.define('ShelfItem', {
fields: ['shelfId'],
},
],
paranoid: true, // Keep shelfItems in database just in case there are Statuses associated
});

View file

@ -18,7 +18,6 @@ module.exports = sequelize => sequelize.define('Status', {
permissionLevel: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 0,
references: {
model: sequelize.models.PermissionLevel,
key: 'id',

View file

@ -34,7 +34,6 @@ module.exports = sequelize => sequelize.define('User', {
permissionLevel: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 0,
references: {
model: sequelize.models.PermissionLevel,
key: 'id',