diff --git a/api/src/app/routes/auth/index.ts b/api/src/app/routes/auth/index.ts index f13d76e..c679da4 100644 --- a/api/src/app/routes/auth/index.ts +++ b/api/src/app/routes/auth/index.ts @@ -102,6 +102,53 @@ const authRoutes: FastifyPluginAsync = async (app) => { request ); + // Assign library member role if user is in Discord server but doesn't have it + const libraryRoleId = process.env.LIBRARY_ROLE_ID; + if (inDiscord && guildId && libraryRoleId) { + try { + const memberResponse = await fetch( + `https://discord.com/api/users/@me/guilds/${guildId}/member`, + { + headers: { + Authorization: `Bearer ${tokenResult.token.access_token}`, + }, + } + ); + + if (memberResponse.ok) { + const memberData = await memberResponse.json() as { roles: string[] }; + const hasLibraryRole = memberData.roles.includes(libraryRoleId); + + if (!hasLibraryRole) { + const botToken = process.env.DISCORD_BOT_TOKEN; + if (botToken) { + const assignRoleResponse = await fetch( + `https://discord.com/api/v10/guilds/${guildId}/members/${userData.id}/roles/${libraryRoleId}`, + { + method: "PUT", + headers: { + Authorization: `Bot ${botToken}`, + "Content-Type": "application/json", + }, + } + ); + + if (assignRoleResponse.ok || assignRoleResponse.status === 204) { + app.log.info(`Assigned library role to user ${user.username} (${user.id})`); + } else { + app.log.error( + `Failed to assign library role to user ${user.username}: ${assignRoleResponse.status}` + ); + } + } + } + } + } catch (error) { + // Don't fail the login if role assignment fails + app.log.error({ err: error }, "Error assigning library role"); + } + } + // Set signed cookies and redirect to frontend reply .setCookie("auth-token", accessToken, { diff --git a/dev.env b/dev.env index d0fc8c4..0d34dec 100644 --- a/dev.env +++ b/dev.env @@ -16,6 +16,8 @@ DISCORD_GUILD_ID="op://Environment Variables - Naomi/Library/discord server id" SPONSOR_ROLE_ID="op://Environment Variables - Naomi/Library/sponsor role id" MOD_ROLE_ID="op://Environment Variables - Naomi/Library/mod role id" STAFF_ROLE_ID="op://Environment Variables - Naomi/Library/staff role id" +DISCORD_BOT_TOKEN="op://Environment Variables - Naomi/Library/discord bot token" +LIBRARY_ROLE_ID="op://Environment Variables - Naomi/Library/library role id" # Application URL BASE_URL="op://Environment Variables - Naomi/Library/localhost url" diff --git a/prod.env b/prod.env index 6e20d68..47ed1f8 100644 --- a/prod.env +++ b/prod.env @@ -16,6 +16,8 @@ DISCORD_GUILD_ID="op://Environment Variables - Naomi/Library/discord server id" SPONSOR_ROLE_ID="op://Environment Variables - Naomi/Library/sponsor role id" MOD_ROLE_ID="op://Environment Variables - Naomi/Library/mod role id" STAFF_ROLE_ID="op://Environment Variables - Naomi/Library/staff role id" +DISCORD_BOT_TOKEN="op://Environment Variables - Naomi/Library/discord bot token" +LIBRARY_ROLE_ID="op://Environment Variables - Naomi/Library/library role id" # Application URL BASE_URL="op://Environment Variables - Naomi/Library/base url"