-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathauth.ts
More file actions
72 lines (54 loc) · 1.67 KB
/
Copy pathauth.ts
File metadata and controls
72 lines (54 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import * as os from 'os';
import { existsSync, promises as fs } from 'fs';
import { testAuth } from './api';
import { getCookiesFromBrowser } from './cookies';
export const HOMEPAGE = process.env.HOMEPAGE || 'https://timesheets.eficode.fi';
const createSessionDirectoryIfMissing = async () => {
const dir = `${os.homedir()}/.tscli`;
if (!existsSync(dir)) {
await fs.mkdir(dir);
}
return dir;
};
const testCurrentSession = async (cookies: any) => {
try {
await testAuth(cookies);
return true;
} catch (err) {
console.log('Current session failed, refreshing cookie information...');
return false;
}
};
const failSessionIfError = async (cookies: any) => {
try {
await testAuth(cookies);
} catch (err) {
console.log(`Authentication failed. Please login to ${HOMEPAGE} and try again.`);
process.exit(1);
}
};
export const getCurrentCookiesFrom = async (filename: string) => {
if (existsSync(filename)) {
const content = await fs.readFile(filename, 'utf8');
return (content.match(/(^.*)/) || [])[1] || '';
}
return null;
};
const saveCookiesTo = async (filename: string, cookies: any) => {
await fs.writeFile(filename, cookies);
return cookies;
};
export const getSessionCookies = async () => {
const sessionDir = await createSessionDirectoryIfMissing();
const sessionFile = `${sessionDir}/.session`;
const cookies = await getCurrentCookiesFrom(sessionFile);
if (cookies) {
if (await testCurrentSession(cookies)) {
return cookies;
}
}
const newCookies = await getCookiesFromBrowser();
await saveCookiesTo(sessionFile, newCookies);
await failSessionIfError(newCookies);
return newCookies;
};