fix: jellyfin integration does not allow username password auth (#1714)
This commit is contained in:
@@ -29,6 +29,10 @@ export abstract class Integration {
|
|||||||
return secret.value;
|
return secret.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected hasSecretValue(kind: IntegrationSecretKind) {
|
||||||
|
return this.integration.decryptedSecrets.some((secret) => secret.kind === kind);
|
||||||
|
}
|
||||||
|
|
||||||
protected url(path: `/${string}`, queryParams?: Record<string, string | Date | number | boolean>) {
|
protected url(path: `/${string}`, queryParams?: Record<string, string | Date | number | boolean>) {
|
||||||
const baseUrl = removeTrailingSlash(this.integration.url);
|
const baseUrl = removeTrailingSlash(this.integration.url);
|
||||||
const url = new URL(`${baseUrl}${path}`);
|
const url = new URL(`${baseUrl}${path}`);
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ export class JellyfinIntegration extends Integration {
|
|||||||
});
|
});
|
||||||
|
|
||||||
public async testConnectionAsync(): Promise<void> {
|
public async testConnectionAsync(): Promise<void> {
|
||||||
const api = this.getApi();
|
const api = await this.getApiAsync();
|
||||||
const systemApi = getSystemApi(api);
|
const systemApi = getSystemApi(api);
|
||||||
await systemApi.getPingSystem();
|
await systemApi.getPingSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getCurrentSessionsAsync(): Promise<StreamSession[]> {
|
public async getCurrentSessionsAsync(): Promise<StreamSession[]> {
|
||||||
const api = this.getApi();
|
const api = await this.getApiAsync();
|
||||||
const sessionApi = getSessionApi(api);
|
const sessionApi = getSessionApi(api);
|
||||||
const sessions = await sessionApi.getSessions();
|
const sessions = await sessionApi.getSessions();
|
||||||
|
|
||||||
@@ -59,8 +59,22 @@ export class JellyfinIntegration extends Integration {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private getApi() {
|
/**
|
||||||
const apiKey = this.getSecretValue("apiKey");
|
* Constructs an ApiClient synchronously with an ApiKey or asynchronously
|
||||||
return this.jellyfin.createApi(this.url("/").toString(), apiKey);
|
* with a username and password.
|
||||||
|
* @returns An instance of Api that has been authenticated
|
||||||
|
*/
|
||||||
|
private async getApiAsync() {
|
||||||
|
if (this.hasSecretValue("apiKey")) {
|
||||||
|
const apiKey = this.getSecretValue("apiKey");
|
||||||
|
return this.jellyfin.createApi(this.url("/").toString(), apiKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
const apiClient = this.jellyfin.createApi(this.url("/").toString());
|
||||||
|
// Authentication state is stored internally in the Api class, so now
|
||||||
|
// requests that require authentication can be made normally.
|
||||||
|
// see https://typescript-sdk.jellyfin.org/#usage
|
||||||
|
await apiClient.authenticateUserByName(this.getSecretValue("username"), this.getSecretValue("password"));
|
||||||
|
return apiClient;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user