From 7ea2c37116a5aded2b20677700a0c4d06ca0a8f6 Mon Sep 17 00:00:00 2001 From: ntr Date: Tue, 30 Aug 2022 23:02:34 +1000 Subject: [PATCH] logout and info --- api/src/api.ts | 10 +++++++--- api/src/discogs.ts | 3 +++ api/src/routers/router.auth.ts | 10 ---------- client/src/actions.ts | 4 ++++ client/src/app.tsx | 9 ++++++++- client/src/components/header.tsx | 15 ++++++++++++--- client/src/routes/login.tsx | 12 +++++------- client/src/routes/search.tsx | 18 +++++++++--------- docker-compose.TEST.yaml | 2 +- 9 files changed, 49 insertions(+), 34 deletions(-) diff --git a/api/src/api.ts b/api/src/api.ts index 12f1ed5..4f0a679 100644 --- a/api/src/api.ts +++ b/api/src/api.ts @@ -167,11 +167,8 @@ export default function createApi(log: Log, pg: Pg, discogs, offers, events) { ctx.assert(ctx.isAuthenticated(), 401, 'log in required'); const { username } = ctx.request.body; const user = await pg.userFindId(ctx.state.user.id); - const wants = await discogs.wantListSync(username, user); - events.emit(Events.WantsAdded, wants); - ctx.response.body = wants; }); @@ -189,6 +186,13 @@ export default function createApi(log: Log, pg: Pg, discogs, offers, events) { ctx.response.body = results; }); + router.post('/auth/logout', async (ctx, next) => { + ctx.assert(ctx.isAuthenticated(), 401, 'log in required'); + ctx.logout(); + ctx.status = 200; + ctx.body = { success: true }; + }); + app.use(router.routes()); return { diff --git a/api/src/discogs.ts b/api/src/discogs.ts index c8a29f9..c6289ce 100644 --- a/api/src/discogs.ts +++ b/api/src/discogs.ts @@ -47,6 +47,9 @@ export default function createDiscogs(log: Log, pg: Pg) { const results = await Promise.allSettled(releases.map(release => pg.wantCreate(release, user))); // @ts-ignore const additions = results.filter(r => r.status === 'fulfilled').map(r => r.value); + + log.info(additions); + return additions; } diff --git a/api/src/routers/router.auth.ts b/api/src/routers/router.auth.ts index d7c721c..829133a 100644 --- a/api/src/routers/router.auth.ts +++ b/api/src/routers/router.auth.ts @@ -39,7 +39,6 @@ export default function authRouter(log, pg: Pg) { authRouter.post('/login', async (ctx, next) => { await passport.authenticate('local', (err, user, info, status) => { ctx.assert(user, 401, 'incorrect login'); - ctx.login(user); ctx.status = 200; ctx.body = { @@ -59,15 +58,6 @@ export default function authRouter(log, pg: Pg) { }; }); - authRouter.post('/logout', async (ctx, next) => { - await passport.authenticate('local', (err, user, info, status) => { - ctx.assert(user, 401, 'incorrect login'); - ctx.logout(); - ctx.status = 200; - ctx.body = { success: true }; - })(ctx, next); - }); - authRouter.post('/register', async (ctx, next) => { const { discogs, email, password } = ctx.request.body; // fetch discogs data if they have it diff --git a/client/src/actions.ts b/client/src/actions.ts index 761ec53..512071b 100644 --- a/client/src/actions.ts +++ b/client/src/actions.ts @@ -72,6 +72,10 @@ const actions = { }); }, + postLogout: async function postLogout() { + return api.post('/auth/logout', {}); + }, + postRegister: async function postRegister(email, password) { return api.post('/auth/register', { email, diff --git a/client/src/app.tsx b/client/src/app.tsx index 7843f36..5ce7c96 100644 --- a/client/src/app.tsx +++ b/client/src/app.tsx @@ -32,9 +32,16 @@ function App() { route('/search'); } + async function logout(e) { + e.preventDefault(); + await actions.postLogout(); + route('/login'); + setUser(null); + } + return (
-
+
diff --git a/client/src/components/header.tsx b/client/src/components/header.tsx index a910463..5f50532 100644 --- a/client/src/components/header.tsx +++ b/client/src/components/header.tsx @@ -1,7 +1,9 @@ import { h } from 'preact'; -// import { Link } from 'preact-router/match'; +import { route } from 'preact-router'; -const Header = ({ user }) => { +import actions from './../actions'; + +const Header = ({ user, logout }) => { const nav = () => ( + ) + + const userNav = () => ( + ) return (
{user ? nav() : anonNav()} -
{user ? adminNav() : null} + {user ? userNav() : null}
); } diff --git a/client/src/routes/login.tsx b/client/src/routes/login.tsx index e947488..b5450c4 100644 --- a/client/src/routes/login.tsx +++ b/client/src/routes/login.tsx @@ -8,8 +8,6 @@ const Login = ({ success, mode }) => { const [confirmPassword, setConfirmPassword] = useState(''); const [error, setError] = useState(''); - console.log(confirmPassword); - async function postLogin() { const [error, user] = await actions.postLogin(email, password); if (error) return setError(error); @@ -38,15 +36,15 @@ const Login = ({ success, mode }) => {
- setEmail((e.target as HTMLInputElement).value)} /> + setEmail((e.target as HTMLInputElement).value)} />
- setConfirmPassword((e.target as HTMLInputElement).value)} /> + setConfirmPassword((e.target as HTMLInputElement).value)} />
- setConfirmPassword((e.target as HTMLInputElement).value)} /> + setConfirmPassword((e.target as HTMLInputElement).value)} />
@@ -62,11 +60,11 @@ const Login = ({ success, mode }) => {
- setEmail((e.target as HTMLInputElement).value)} /> + setEmail((e.target as HTMLInputElement).value)} />
- setPassword((e.target as HTMLInputElement).value)} /> + setPassword((e.target as HTMLInputElement).value)} />
diff --git a/client/src/routes/search.tsx b/client/src/routes/search.tsx index 0001dfc..7ab5fa1 100644 --- a/client/src/routes/search.tsx +++ b/client/src/routes/search.tsx @@ -37,28 +37,28 @@ const User = () => { const [title, setTitle] = useState(''); const [username, setUsername] = useState(''); const [results, setResults] = useState([]); - const [noResults, setNoResults] = useState(false); + const [infoText, setInfoText] = useState(''); async function fetchResults() { const [error, results] = await actions.postWantSearch(artist, title); if (results.length === 0) { setResults([]); - return setNoResults(true); + return setInfoText('No results'); } - setNoResults(false); + setInfoText(''); setResults(results); } async function submitWantlist() { const [error, wants] = await actions.postDiscogs(username); - if (results.length === 0) { + if (wants.length === 0) { setResults([]); - return setNoResults(true); + return setInfoText('No new additions'); } - console.log('synced', wants.length, 'wants'); + setInfoText(`Added ${wants.length} items to your list.`); } const searchRef = useRef() @@ -81,8 +81,8 @@ const User = () => { ? : null; - const noResultsEl = noResults - ?
No Results
+ const infoEl = infoText + ?
{infoText}
: null; return ( @@ -108,7 +108,7 @@ const User = () => {
- {noResultsEl} + {infoEl} {results.map(Result)} {topEl}
diff --git a/docker-compose.TEST.yaml b/docker-compose.TEST.yaml index 709a162..3405354 100644 --- a/docker-compose.TEST.yaml +++ b/docker-compose.TEST.yaml @@ -11,7 +11,7 @@ services: api: image: node:16 working_dir: /opt/mcrates/api - entrypoint: sleep 10000 + entrypoint: npm run test:watch depends_on: - pg environment: