mirror of
https://github.com/sct/overseerr.git
synced 2025-09-17 17:24:35 +02:00
feat: user avatars from plex (#53)
This commit is contained in:
@@ -27,6 +27,9 @@ export class User {
|
|||||||
@Column({ type: 'integer', default: 0 })
|
@Column({ type: 'integer', default: 0 })
|
||||||
public permissions = 0;
|
public permissions = 0;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
public avatar: string;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@CreateDateColumn()
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
|
@@ -23,6 +23,8 @@ components:
|
|||||||
permissions:
|
permissions:
|
||||||
type: number
|
type: number
|
||||||
example: 0
|
example: 0
|
||||||
|
avatar:
|
||||||
|
type: string
|
||||||
createdAt:
|
createdAt:
|
||||||
type: string
|
type: string
|
||||||
example: '2020-09-02T05:02:23.000Z'
|
example: '2020-09-02T05:02:23.000Z'
|
||||||
|
@@ -46,6 +46,9 @@ authRoutes.post('/login', async (req, res) => {
|
|||||||
user.plexToken = body.authToken;
|
user.plexToken = body.authToken;
|
||||||
await userRepository.save(user);
|
await userRepository.save(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update the users avatar with their plex thumbnail (incase it changed)
|
||||||
|
user.avatar = account.thumb;
|
||||||
} else {
|
} else {
|
||||||
// Here we check if it's the first user. If it is, we create the user with no check
|
// Here we check if it's the first user. If it is, we create the user with no check
|
||||||
// and give them admin permissions
|
// and give them admin permissions
|
||||||
@@ -56,6 +59,7 @@ authRoutes.post('/login', async (req, res) => {
|
|||||||
email: account.email,
|
email: account.email,
|
||||||
plexToken: account.authToken,
|
plexToken: account.authToken,
|
||||||
permissions: Permission.ADMIN,
|
permissions: Permission.ADMIN,
|
||||||
|
avatar: account.thumb,
|
||||||
});
|
});
|
||||||
await userRepository.save(user);
|
await userRepository.save(user);
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import Transition from '../../Transition';
|
import Transition from '../../Transition';
|
||||||
|
import { useUser } from '../../../hooks/useUser';
|
||||||
|
|
||||||
const UserDropdown: React.FC = () => {
|
const UserDropdown: React.FC = () => {
|
||||||
|
const { user } = useUser();
|
||||||
const [isDropdownOpen, setDropdownOpen] = useState(false);
|
const [isDropdownOpen, setDropdownOpen] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -14,11 +16,7 @@ const UserDropdown: React.FC = () => {
|
|||||||
aria-haspopup="true"
|
aria-haspopup="true"
|
||||||
onClick={() => setDropdownOpen((state) => !state)}
|
onClick={() => setDropdownOpen((state) => !state)}
|
||||||
>
|
>
|
||||||
<img
|
<img className="h-8 w-8 rounded-full" src={user?.avatar} alt="" />
|
||||||
className="h-8 w-8 rounded-full"
|
|
||||||
src="https://avatars1.githubusercontent.com/u/234213?s=460&u=7f30f76bd7bbdab45bab7544ebd80aa88ea11caf&v=4"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<Transition
|
<Transition
|
||||||
|
@@ -15,9 +15,13 @@ export const UserContext: React.FC<UserContextProps> = ({
|
|||||||
initialUser,
|
initialUser,
|
||||||
children,
|
children,
|
||||||
}) => {
|
}) => {
|
||||||
const { user } = useUser({ initialData: initialUser });
|
const { user, revalidate } = useUser({ initialData: initialUser });
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
revalidate();
|
||||||
|
}, [router.pathname, revalidate]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!router.pathname.match(/(setup|login)/) && !user) {
|
if (!router.pathname.match(/(setup|login)/) && !user) {
|
||||||
router.push('/login');
|
router.push('/login');
|
||||||
|
@@ -3,6 +3,8 @@ import { useRef } from 'react';
|
|||||||
export interface User {
|
export interface User {
|
||||||
id: number;
|
id: number;
|
||||||
email: string;
|
email: string;
|
||||||
|
avatar: string;
|
||||||
|
permissions: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface UserHookResponse {
|
interface UserHookResponse {
|
||||||
|
Reference in New Issue
Block a user