feat(tui): reject expired token
This commit is contained in:
@@ -10,7 +10,9 @@ const CLIENT_ID = "koon-family";
|
||||
const getFromFromDisk = Effect.gen(function* () {
|
||||
const fs = yield* FileSystem.FileSystem;
|
||||
const content = yield* fs.readFileString(config.authPath);
|
||||
return yield* Schema.decode(Schema.parseJson(AuthState))(content);
|
||||
const auth = yield* Schema.decode(Schema.parseJson(AuthState))(content);
|
||||
if (auth.session.expiresAt < new Date()) yield* Effect.fail("Token expired");
|
||||
return auth;
|
||||
});
|
||||
|
||||
|
||||
@@ -123,10 +125,12 @@ const requestAuth = Effect.gen(function* () {
|
||||
}));
|
||||
if (sessionData == null) return yield* Effect.fail("Session was null");
|
||||
|
||||
const fs = yield* FileSystem.FileSystem;
|
||||
yield* fs.writeFileString(config.authPath, JSON.stringify(sessionData));
|
||||
const result = yield* Schema.decodeUnknown(AuthState)(sessionData)
|
||||
|
||||
return sessionData;
|
||||
const fs = yield* FileSystem.FileSystem;
|
||||
yield* fs.writeFileString(config.authPath, JSON.stringify(result));
|
||||
|
||||
return result;
|
||||
});
|
||||
|
||||
export const getAuth = Effect.gen(function* () {
|
||||
|
||||
@@ -7,4 +7,5 @@ const AUTH_PATH = join(PATH, "auth.json");
|
||||
export const config = {
|
||||
dir: PATH,
|
||||
authPath: AUTH_PATH,
|
||||
zeroUrl: "http://laptop:4848",
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { createCliRenderer } from "@opentui/core";
|
||||
import { createRoot } from "@opentui/react";
|
||||
import { createRoot, useKeyboard } from "@opentui/react";
|
||||
import { App, type Route } from "@money/ui";
|
||||
import { ZeroProvider } from "@rocicorp/zero/react";
|
||||
import { schema } from '@money/shared';
|
||||
@@ -9,15 +9,17 @@ import { Effect } from "effect";
|
||||
import { BunContext } from "@effect/platform-bun";
|
||||
import type { AuthData } from "./schema";
|
||||
import { kvStore } from "./store";
|
||||
|
||||
const userID = "anon";
|
||||
const server = "http://laptop:4848";
|
||||
import { config } from "./config";
|
||||
|
||||
function Main({ auth }: { auth: AuthData }) {
|
||||
const [route, setRoute] = useState<Route>("/");
|
||||
|
||||
useKeyboard(key => {
|
||||
if (key.name == "c" && key.ctrl) process.exit(0);
|
||||
});
|
||||
|
||||
return (
|
||||
<ZeroProvider {...{ userID, auth: auth.session.token, server, schema, kvStore }}>
|
||||
<ZeroProvider {...{ userID: auth.user.id, auth: auth.session.token, server: config.zeroUrl, schema, kvStore }}>
|
||||
<App
|
||||
auth={auth || null}
|
||||
route={route}
|
||||
@@ -35,5 +37,5 @@ const auth = await Effect.runPromise(
|
||||
Effect.provide(layer()),
|
||||
)
|
||||
);
|
||||
const renderer = await createCliRenderer();
|
||||
const renderer = await createCliRenderer({ exitOnCtrlC: false });
|
||||
createRoot(renderer).render(<Main auth={auth} />);
|
||||
|
||||
Reference in New Issue
Block a user