forked from NotNet/gluestick
use discord avatar as fallback
This commit is contained in:
parent
9c65c76026
commit
234518a62e
|
@ -1,6 +1,7 @@
|
||||||
import * as ldap from "@/ldap";
|
import * as ldap from "@/ldap";
|
||||||
import prisma from "@/prisma";
|
import prisma from "@/prisma";
|
||||||
import { getUserFromRequest } from "@/auth";
|
import { getUserFromRequest } from "@/auth";
|
||||||
|
import { getDiscordAvatar } from "@/app/oauth/discord/oauth";
|
||||||
|
|
||||||
type RequestBody = {
|
type RequestBody = {
|
||||||
username: string;
|
username: string;
|
||||||
|
@ -67,6 +68,16 @@ export async function POST(request: Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const discordAuth = await prisma.discordAuth.findFirst({
|
||||||
|
where: {
|
||||||
|
userId: user.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (discordAuth !== null && avatarBuf === undefined) {
|
||||||
|
avatarBuf = await getDiscordAvatar(discordAuth.accessToken);
|
||||||
|
}
|
||||||
|
|
||||||
const users = await ldap.getUsers();
|
const users = await ldap.getUsers();
|
||||||
for (const user of users) {
|
for (const user of users) {
|
||||||
if (user.id.toLowerCase() === username.toLowerCase()) {
|
if (user.id.toLowerCase() === username.toLowerCase()) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ export type DiscordAccessTokenResponse = {
|
||||||
|
|
||||||
export type DiscordUserResponse = {
|
export type DiscordUserResponse = {
|
||||||
id: string;
|
id: string;
|
||||||
|
avatar: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type DiscordGuildResponse = {
|
export type DiscordGuildResponse = {
|
||||||
|
@ -39,3 +40,18 @@ export async function getDiscordGuilds(token: string) {
|
||||||
const res: DiscordGuildResponse[] = await req.json();
|
const res: DiscordGuildResponse[] = await req.json();
|
||||||
return res.map((guild) => guild.id);
|
return res.map((guild) => guild.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getDiscordAvatar(token: string) {
|
||||||
|
const req = await fetch("https://discord.com/api/users/@me", {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const res: DiscordUserResponse = await req.json();
|
||||||
|
const file = `https://cdn.discordapp.com/avatars/${res.id}/${res.avatar}.png`;
|
||||||
|
|
||||||
|
const avatarReq = await fetch(file);
|
||||||
|
const avatarBuffer = await avatarReq.arrayBuffer();
|
||||||
|
return Buffer.from(avatarBuffer);
|
||||||
|
}
|
||||||
|
|
|
@ -184,7 +184,10 @@ export default function RegisterForm({ ticket }: { ticket: string }) {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Input
|
<Input
|
||||||
hint="This image will automatically be used as your avatar with supported services. Optional - maximum 1 MB."
|
hint={
|
||||||
|
"This image will automatically be used as your avatar with supported services - maximum 1 MB. " +
|
||||||
|
"Will use the avatar of the service you signed up with if not provided."
|
||||||
|
}
|
||||||
type="file"
|
type="file"
|
||||||
name="avatar"
|
name="avatar"
|
||||||
label="Avatar"
|
label="Avatar"
|
||||||
|
|
Loading…
Reference in New Issue