fix(user edit): fix user edit not being able to be saved (#651)

Co-authored-by: sct <sctsnipe@gmail.com>
This commit is contained in:
Jakob Ankarhem
2021-01-15 04:05:58 +01:00
committed by GitHub
parent 23624bd144
commit b04d00ef50
7 changed files with 15 additions and 13 deletions

View File

@@ -23,11 +23,13 @@ components:
userType: userType:
type: integer type: integer
example: 1 example: 1
readOnly: true
permissions: permissions:
type: number type: number
example: 0 example: 0
avatar: avatar:
type: string type: string
readOnly: true
createdAt: createdAt:
type: string type: string
example: '2020-09-02T05:02:23.000Z' example: '2020-09-02T05:02:23.000Z'
@@ -47,9 +49,7 @@ components:
$ref: '#/components/schemas/MediaRequest' $ref: '#/components/schemas/MediaRequest'
required: required:
- id - id
- userType
- email - email
- permissions
- createdAt - createdAt
- updatedAt - updatedAt
MainSettings: MainSettings:

View File

@@ -15,6 +15,7 @@ import PreparedEmail from '../lib/email';
import logger from '../logger'; import logger from '../logger';
import { getSettings } from '../lib/settings'; import { getSettings } from '../lib/settings';
import { default as generatePassword } from 'secure-random-password'; import { default as generatePassword } from 'secure-random-password';
import { UserType } from '../constants/user';
@Entity() @Entity()
export class User { export class User {
@@ -36,8 +37,8 @@ export class User {
@Column({ nullable: true, select: false }) @Column({ nullable: true, select: false })
public password?: string; public password?: string;
@Column({ type: 'integer', default: 1 }) @Column({ type: 'integer', default: UserType.PLEX })
public userType = 1; public userType: UserType;
@Column({ nullable: true, select: false }) @Column({ nullable: true, select: false })
public plexId?: number; public plexId?: number;

View File

@@ -68,6 +68,7 @@ authRoutes.post('/login', async (req, res, next) => {
plexToken: account.authToken, plexToken: account.authToken,
permissions: Permission.ADMIN, permissions: Permission.ADMIN,
avatar: account.thumb, avatar: account.thumb,
userType: UserType.PLEX,
}); });
await userRepository.save(user); await userRepository.save(user);
} }
@@ -90,6 +91,7 @@ authRoutes.post('/login', async (req, res, next) => {
plexToken: account.authToken, plexToken: account.authToken,
permissions: settings.main.defaultPermissions, permissions: settings.main.defaultPermissions,
avatar: account.thumb, avatar: account.thumb,
userType: UserType.PLEX,
}); });
await userRepository.save(user); await userRepository.save(user);
} else { } else {

View File

@@ -7,6 +7,7 @@ import { hasPermission, Permission } from '../lib/permissions';
import { getSettings } from '../lib/settings'; import { getSettings } from '../lib/settings';
import logger from '../logger'; import logger from '../logger';
import gravatarUrl from 'gravatar-url'; import gravatarUrl from 'gravatar-url';
import { UserType } from '../constants/user';
const router = Router(); const router = Router();
@@ -26,7 +27,7 @@ router.post('/', async (req, res, next) => {
const userRepository = getRepository(User); const userRepository = getRepository(User);
const passedExplicitPassword = body.password && body.password.length > 0; const passedExplicitPassword = body.password && body.password.length > 0;
const avatar = gravatarUrl(body.email); const avatar = gravatarUrl(body.email, { default: 'mm', size: 200 });
if (!passedExplicitPassword && !settings.enabled) { if (!passedExplicitPassword && !settings.enabled) {
throw new Error('Email notifications must be enabled'); throw new Error('Email notifications must be enabled');
@@ -37,9 +38,9 @@ router.post('/', async (req, res, next) => {
username: body.username ?? body.email, username: body.username ?? body.email,
email: body.email, email: body.email,
password: body.password, password: body.password,
permissions: body.permissions, permissions: Permission.REQUEST,
plexToken: '', plexToken: '',
userType: body.userType, userType: UserType.LOCAL,
}); });
if (passedExplicitPassword) { if (passedExplicitPassword) {
@@ -201,6 +202,7 @@ router.post('/import-from-plex', async (req, res, next) => {
plexId: parseInt(account.id), plexId: parseInt(account.id),
plexToken: '', plexToken: '',
avatar: account.thumb, avatar: account.thumb,
userType: UserType.PLEX,
}); });
await userRepository.save(newUser); await userRepository.save(newUser);
createdUsers.push(newUser); createdUsers.push(newUser);

View File

@@ -59,7 +59,7 @@ const PermissionOption: React.FC<PermissionOptionProps> = ({
!hasPermission(Permission.MANAGE_SETTINGS, user.permissions) && !hasPermission(Permission.MANAGE_SETTINGS, user.permissions) &&
option.permission === Permission.MANAGE_SETTINGS) option.permission === Permission.MANAGE_SETTINGS)
} }
onClick={() => { onChange={() => {
onUpdate( onUpdate(
hasPermission(option.permission, currentPermission) hasPermission(option.permission, currentPermission)
? currentPermission - option.permission ? currentPermission - option.permission

View File

@@ -79,7 +79,6 @@ const UserEdit: React.FC = () => {
await axios.put(`/api/v1/user/${user?.id}`, { await axios.put(`/api/v1/user/${user?.id}`, {
permissions: currentPermission, permissions: currentPermission,
email: user?.email, email: user?.email,
avatar: user?.avatar,
}); });
addToast(intl.formatMessage(messages.usersaved), { addToast(intl.formatMessage(messages.usersaved), {

View File

@@ -204,8 +204,6 @@ const UserList: React.FC = () => {
await axios.post('/api/v1/user', { await axios.post('/api/v1/user', {
email: values.email, email: values.email,
password: values.genpassword ? null : values.password, password: values.genpassword ? null : values.password,
permissions: Permission.REQUEST,
userType: UserType.LOCAL,
}); });
addToast(intl.formatMessage(messages.usercreatedsuccess), { addToast(intl.formatMessage(messages.usercreatedsuccess), {
appearance: 'success', appearance: 'success',
@@ -315,7 +313,7 @@ const UserList: React.FC = () => {
}} }}
</Formik> </Formik>
</Transition> </Transition>
<div className="flex-col sm:flex-row flex justify-between"> <div className="flex flex-col justify-between sm:flex-row">
<Header>{intl.formatMessage(messages.userlist)}</Header> <Header>{intl.formatMessage(messages.userlist)}</Header>
<div className="flex"> <div className="flex">
<Button <Button
@@ -363,7 +361,7 @@ const UserList: React.FC = () => {
<div className="text-sm font-medium leading-5"> <div className="text-sm font-medium leading-5">
{user.username} {user.username}
</div> </div>
<div className="text-sm text-gray-300 leading-5"> <div className="text-sm leading-5 text-gray-300">
{user.email} {user.email}
</div> </div>
</div> </div>