From ce6c1638fd4a2860f245df88304cdba1768a2371 Mon Sep 17 00:00:00 2001 From: simojenki Date: Tue, 2 Mar 2021 11:54:27 +1100 Subject: [PATCH] Adding some css, fix message on log in failure --- src/music_service.ts | 8 ++++---- src/navidrome.ts | 16 +++++++++++++--- src/server.ts | 4 ++-- tests/navidrome.test.ts | 12 +++++++----- tests/smapi.test.ts | 2 +- web/views/failure.eta | 2 +- web/views/index.eta | 3 +-- web/views/layout.eta | 27 +++++++++++++++++++++++++++ web/views/login.eta | 10 ++++++---- web/views/success.eta | 2 +- 10 files changed, 63 insertions(+), 23 deletions(-) diff --git a/src/music_service.ts b/src/music_service.ts index 23da79c..23b86e1 100644 --- a/src/music_service.ts +++ b/src/music_service.ts @@ -22,10 +22,6 @@ export type AuthFailure = { message: string; }; -export interface MusicService { - generateToken(credentials: Credentials): Promise; - login(authToken: string): Promise; -} export type Artist = { id: string; @@ -64,6 +60,10 @@ export type ArtistQuery = Paging export type AlbumQuery = Paging & { artistId?: string } +export interface MusicService { + generateToken(credentials: Credentials): Promise; + login(authToken: string): Promise; +} export interface MusicLibrary { artists(q: ArtistQuery): Promise>; diff --git a/src/navidrome.ts b/src/navidrome.ts index fc5d7e0..10c7148 100644 --- a/src/navidrome.ts +++ b/src/navidrome.ts @@ -1,5 +1,15 @@ import { Md5 } from "ts-md5/dist/md5"; -import { Credentials, MusicService, Album, Artist, Result, slice2, asResult, AlbumQuery, ArtistQuery } from "./music_service"; +import { + Credentials, + MusicService, + Album, + Artist, + Result, + slice2, + asResult, + AlbumQuery, + ArtistQuery, +} from "./music_service"; import X2JS from "x2js"; import axios from "axios"; @@ -85,7 +95,7 @@ export class Navidrome implements MusicService { ).toString("base64"), userId: credentials.username, nickname: credentials.username, - })); + })).catch(e => ({ message: `${e}` })); parseToken = (token: string): Credentials => JSON.parse( @@ -112,7 +122,7 @@ export class Navidrome implements MusicService { name: id, }), albums: (_: AlbumQuery): Promise> => { - return Promise.resolve({ results: [], total: 0}); + return Promise.resolve({ results: [], total: 0 }); }, }); } diff --git a/src/server.ts b/src/server.ts index 2c2e0cd..62f7f9e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -83,11 +83,11 @@ function server( if (isSuccess(authResult)) { linkCodes.associate(linkCode, authResult); res.render("success", { - message: `Login successful`, + message: `Login successful!`, }); } else { res.status(403).render("failure", { - message: `Login failed, ${authResult.message}!`, + message: `Login failed! ${authResult.message}!`, }); } } diff --git a/tests/navidrome.test.ts b/tests/navidrome.test.ts index 1bff503..e3226a6 100644 --- a/tests/navidrome.test.ts +++ b/tests/navidrome.test.ts @@ -7,6 +7,7 @@ import axios from "axios"; jest.mock("axios"); import randomString from "../src/random_string"; +import { AuthSuccess } from "../src/music_service"; jest.mock("../src/random_string"); describe("t", () => { @@ -52,7 +53,7 @@ describe("navidrome", () => { `, }); - const token = await navidrome.generateToken({ username, password }); + const token = await navidrome.generateToken({ username, password }) as AuthSuccess; expect(token.authToken).toBeDefined(); expect(token.nickname).toEqual(username); @@ -73,9 +74,8 @@ describe("navidrome", () => { `, }); - return expect( - navidrome.generateToken({ username, password }) - ).rejects.toMatch("Wrong username or password"); + const token = await navidrome.generateToken({ username, password }); + expect(token).toEqual({ message: "Wrong username or password" }) }); }); }); @@ -101,10 +101,11 @@ describe("navidrome", () => { }); }); - describe("when no paging is ineffect", () => { + describe("when no paging is in effect", () => { it("should return all the artists", async () => { const artists = await navidrome .generateToken({ username, password }) + .then(it => it as AuthSuccess) .then((it) => navidrome.login(it.authToken)) .then((it) => it.artists({ _index: 0, _count: 100 })); @@ -126,6 +127,7 @@ describe("navidrome", () => { it("should return only the correct page of artists", async () => { const artists = await navidrome .generateToken({ username, password }) + .then(it => it as AuthSuccess) .then((it) => navidrome.login(it.authToken)) .then((it) => it.artists({ _index: 1, _count: 2 })); diff --git a/tests/smapi.test.ts b/tests/smapi.test.ts index 739aeac..d59a825 100644 --- a/tests/smapi.test.ts +++ b/tests/smapi.test.ts @@ -138,7 +138,7 @@ describe("api", () => { .send({ username, password, linkCode }) .expect(403); - expect(res.text).toContain(`Login failed, Invalid user:${username}`); + expect(res.text).toContain(`Login failed! Invalid user:${username}`); }); }); diff --git a/web/views/failure.eta b/web/views/failure.eta index f975859..e6eae31 100644 --- a/web/views/failure.eta +++ b/web/views/failure.eta @@ -1,5 +1,5 @@ <% layout('./layout', { title: "Failure" }) %>
-

<%= it.message %>

+

<%= it.message %>

\ No newline at end of file diff --git a/web/views/index.eta b/web/views/index.eta index 4f3ba82..7271d06 100644 --- a/web/views/index.eta +++ b/web/views/index.eta @@ -1,8 +1,7 @@ <% layout('./layout') %>
-

bonob service

-

<%= it.bonobService.name %> (<%= it.bonobService.sid %>) +

<%= it.bonobService.name %> (<%= it.bonobService.sid %>)

Expected config

<%= JSON.stringify(it.bonobService) %>
<% if(it.registeredBonobService) { %> diff --git a/web/views/layout.eta b/web/views/layout.eta index 8f17102..21d5827 100644 --- a/web/views/layout.eta +++ b/web/views/layout.eta @@ -2,6 +2,33 @@ <%= it.title || "bonob" %> + <%~ it.body %> diff --git a/web/views/login.eta b/web/views/login.eta index 3a4d3a7..eee592f 100644 --- a/web/views/login.eta +++ b/web/views/login.eta @@ -1,11 +1,13 @@ <% layout('./layout', { title: "Login" }) %>
-

Log in to <%= it.bonobService.name %>

+

Log
in
to
<%= it.bonobService.name %>

-
-
+
+

+
+
- +
\ No newline at end of file diff --git a/web/views/success.eta b/web/views/success.eta index ecbc835..579ac21 100644 --- a/web/views/success.eta +++ b/web/views/success.eta @@ -1,5 +1,5 @@ <% layout('./layout', { title: "Yippee" }) %>
-

<%= it.message %>

+

<%= it.message %>

\ No newline at end of file