diff --git a/net/web/src/api/clearLogin.js b/net/web/src/api/clearLogin.js new file mode 100644 index 00000000..8dcf4bde --- /dev/null +++ b/net/web/src/api/clearLogin.js @@ -0,0 +1,8 @@ +import { checkResponse, fetchWithTimeout } from './fetchUtil'; + +export async function clearLogin(token) { + let logout = await fetchWithTimeout(`/account/apps?agent=${token}`, { method: 'DELETE' }) + checkResponse(logout) +} + + diff --git a/net/web/src/api/setAccountAccess.js b/net/web/src/api/setAccountAccess.js index 48a947d6..86f2446b 100644 --- a/net/web/src/api/setAccountAccess.js +++ b/net/web/src/api/setAccountAccess.js @@ -1,8 +1,8 @@ import { checkResponse, fetchWithTimeout } from './fetchUtil'; -export async function setAccountAccess(token) { +export async function setAccountAccess(token, appName, appVersion, platform) { let app = { Name: "indicom", Description: "decentralized communication" } - let access = await fetchWithTimeout(`/account/access?token=${token}`, { method: 'PUT', body: JSON.stringify(app) }) + let access = await fetchWithTimeout(`/account/access?token=${token}&appName=${appName}&appVersion=${appVersion}&platform=${platform}`, { method: 'PUT', body: JSON.stringify(app) }) checkResponse(access) return await access.json() } diff --git a/net/web/src/api/setLogin.js b/net/web/src/api/setLogin.js index c7593d0b..96af1f54 100644 --- a/net/web/src/api/setLogin.js +++ b/net/web/src/api/setLogin.js @@ -1,11 +1,12 @@ import { checkResponse, fetchWithTimeout } from './fetchUtil'; var base64 = require('base-64'); -export async function setLogin(username, password) { +export async function setLogin(username, password, appName, appVersion, userAgent) { + const platform = encodeURIComponent(userAgent); let headers = new Headers() headers.append('Authorization', 'Basic ' + base64.encode(username + ":" + password)); let app = { Name: "indicom", Description: "decentralized communication" } - let login = await fetchWithTimeout('/account/apps', { method: 'POST', body: JSON.stringify(app), headers: headers }) + let login = await fetchWithTimeout(`/account/apps?appName=${appName}&appVersion=${appVersion}&platform=${platform}`, { method: 'POST', body: JSON.stringify(app), headers: headers }) checkResponse(login) return await login.json() } diff --git a/net/web/src/context/useAppContext.hook.js b/net/web/src/context/useAppContext.hook.js index 5fb21023..5d988c4c 100644 --- a/net/web/src/context/useAppContext.hook.js +++ b/net/web/src/context/useAppContext.hook.js @@ -1,6 +1,7 @@ import { useEffect, useState, useRef, useContext } from 'react'; import { getAvailable } from 'api/getAvailable'; import { setLogin } from 'api/setLogin'; +import { clearLogin } from 'api/clearLogin'; import { setAccountAccess } from 'api/setAccountAccess'; import { addAccount } from 'api/addAccount'; import { getUsername } from 'api/getUsername'; @@ -14,9 +15,14 @@ import { StoreContext } from './StoreContext'; import { UploadContext } from './UploadContext'; export function useAppContext() { - const [state, setState] = useState({}); + const [state, setState] = useState({ + }); const [appRevision, setAppRevision] = useState(); + const appName = "Databag"; + const appVersion = "1.0.0"; + const userAgent = window.navigator.userAgent; + const ws = useRef(null); const revision = useRef(null); @@ -66,7 +72,7 @@ export function useAppContext() { const appCreate = async (username, password, token) => { await addAccount(username, password, token); - let access = await setLogin(username, password) + let access = await setLogin(username, password, appName, appVersion, userAgent) updateState({ access: access.appToken }); storeContext.actions.setValue('login:timestamp', access.created); setWebsocket(access.appToken) @@ -78,7 +84,7 @@ export function useAppContext() { } const appLogin = async (username, password) => { - let access = await setLogin(username, password) + let access = await setLogin(username, password, appName, appVersion, userAgent) updateState({ access: access.appToken }); storeContext.actions.setValue('login:timestamp', access.created); setWebsocket(access.appToken) @@ -90,7 +96,7 @@ export function useAppContext() { } const appAccess = async (token) => { - let access = await setAccountAccess(token) + let access = await setAccountAccess(token, appName, appVersion, userAgent) updateState({ access: access.appToken }); storeContext.actions.setValue('login:timestamp', access.created); setWebsocket(access.appToken) @@ -101,7 +107,13 @@ export function useAppContext() { return access.created; } - const appLogout = () => { + const appLogout = async () => { + try { + await clearLogin(state.access); + } + catch (err) { + console.log(err); + } updateState({ access: null }); clearWebsocket() localStorage.removeItem("session");