Compare commits

...

2 Commits

Author SHA1 Message Date
d3fff38e36 implemented handling of password resets 2023-06-04 03:14:45 +02:00
11dac10a07 Added handler for password reset command 2023-06-04 03:10:33 +02:00
3 changed files with 59 additions and 18 deletions

View File

@ -0,0 +1,17 @@
import { ApplicationCommandOptionType, BurstHandlerMajorIdKey } from 'discord.js'
import { Command } from '../structures/command'
import { RunOptions } from '../types/commandTypes'
import { jellyfinHandler } from "../.."
import { v4 as uuid } from 'uuid'
export default new Command({
name: 'passwort_reset',
description: 'Ich vergebe dir ein neues Passwort und schicke es dir per DM zu. Kostet auch nix! Versprochen! 😉',
options: [],
run: async (interaction: RunOptions) => {
console.log('PasswortReset called')
interaction.interaction.followUp('Yo, ich schick dir eins!')
console.log(JSON.stringify(interaction.interaction.member, null, 2))
jellyfinHandler.resetUserPasswort(interaction.interaction.member, uuid())
}
})

View File

@ -19,6 +19,7 @@ export interface Config {
jellfin_token: string jellfin_token: string
jellyfin_url: string jellyfin_url: string
port: number port: number
workaround_token: string
} }
} }
export const config: Config = { export const config: Config = {
@ -47,6 +48,7 @@ export const config: Config = {
guild_id: process.env.GUILD_ID ?? "", guild_id: process.env.GUILD_ID ?? "",
client_id: process.env.CLIENT_ID ?? "", client_id: process.env.CLIENT_ID ?? "",
jellfin_token: process.env.JELLYFIN_TOKEN ?? "", jellfin_token: process.env.JELLYFIN_TOKEN ?? "",
jellyfin_url: process.env.JELLYFIN_URL ?? "" jellyfin_url: process.env.JELLYFIN_URL ?? "",
workaround_token: process.env.TOKEN ?? ""
} }
} }

View File

@ -14,7 +14,7 @@ export class JellyfinHandler {
private userApi: UserApi private userApi: UserApi
private systemApi: SystemApi private systemApi: SystemApi
private token: string private token: string
private authHeader: { headers: { 'X-MediaBrowser-Token': string } } private authHeader: { headers: { 'X-Emby-Authorization': string } }
private config: Config private config: Config
private serverName = ""; private serverName = "";
@ -30,7 +30,7 @@ export class JellyfinHandler {
this.token = this.config.bot.jellfin_token this.token = this.config.bot.jellfin_token
this.authHeader = { this.authHeader = {
headers: { headers: {
"X-MediaBrowser-Token": this.token "X-Emby-Authorization": this.config.bot.workaround_token
} }
} }
const userApiConfigurationParams: ConfigurationParameters = { const userApiConfigurationParams: ConfigurationParameters = {
@ -94,6 +94,7 @@ export class JellyfinHandler {
} }
public async getUser(discordUser: GuildMember, requestId?: string): Promise<Maybe<UserDto>> { public async getUser(discordUser: GuildMember, requestId?: string): Promise<Maybe<UserDto>> {
logger.info(`Getting user for discord member ${discordUser.displayName}`, {requestId})
const jfUsernameFromDiscordUsername = this.generateJFUserName(discordUser) const jfUsernameFromDiscordUsername = this.generateJFUserName(discordUser)
const jfUsers = await this.getCurrentUsers(discordUser.guild.id, requestId) const jfUsers = await this.getCurrentUsers(discordUser.guild.id, requestId)
const foundUser = jfUsers.find(x => x.name === jfUsernameFromDiscordUsername) const foundUser = jfUsers.find(x => x.name === jfUsernameFromDiscordUsername)
@ -101,7 +102,7 @@ export class JellyfinHandler {
} }
public async removeUser(newMember: GuildMember, requestId?: string) { public async removeUser(newMember: GuildMember, requestId?: string) {
logger.error(`Trying to remove user ${newMember.displayName}, but method is not implemented`) logger.error(`Trying to remove user ${newMember.displayName}, but method is not implemented`, {requestId})
const jfuser = await this.getUser(newMember, requestId) const jfuser = await this.getUser(newMember, requestId)
if (jfuser) { if (jfuser) {
await this.disableUser(jfuser, newMember.guild.id, requestId) await this.disableUser(jfuser, newMember.guild.id, requestId)
@ -109,20 +110,41 @@ export class JellyfinHandler {
} }
public async resetUserPasswort(member: GuildMember, requestId?: string) { public async resetUserPasswort(member: GuildMember, requestId?: string) {
logger.info(`Resetting password for user ${member.displayName}`, {requestId})
const jfUser = await this.getUser(member, requestId) const jfUser = await this.getUser(member, requestId)
if (jfUser && jfUser.id) { if (jfUser && jfUser.id) {
const r: UpdateUserPasswordRequest = { // const reset: UpdateUserPasswordRequest = {
newPw: this.generatePasswordForUser() // resetPassword: true
// }
// const shit: UpdateUserPasswordOperationRequest = {
// updateUserPasswordRequest: reset,
// userId: jfUser.id
// }
// logger.info(JSON.stringify(jfUser.policy, null, 2))
// logger.info("Resetting password", {requestId})
// await this.userApi.updateUserPassword(shit);
const password = this.generatePasswordForUser()
const passwordRequest: UpdateUserPasswordRequest = {
// resetPassword: true,
currentPw: "",
newPw: password
} }
const shit: UpdateUserPasswordOperationRequest = { const passwordOperationRequest: UpdateUserPasswordOperationRequest = {
updateUserPasswordRequest: r, updateUserPasswordRequest: passwordRequest,
userId: jfUser.id userId: jfUser.id
} }
this.userApi.updateUserPassword(shit) logger.info("Setting new password", {requestId})
await this.userApi.updateUserPassword(passwordOperationRequest);
(await member.createDM()).send(`Hier ist dein neues Passwort: ${password}`)
} else { } else {
(await member.createDM()).send("Ich konnte leider keinen User von dir auf Jellyfin finden. Bitte melde dich bei Markus oder Samantha!") (await member.createDM()).send("Ich konnte leider keinen User von dir auf Jellyfin finden. Bitte melde dich bei Markus oder Samantha!")
} }