1 | const os = require('os')
|
2 | const path = require('path')
|
3 | const fsEx = require('fs-extra')
|
4 |
|
5 |
|
6 | class UserSettings {
|
7 | constructor () {
|
8 | this.settingsFolder = process.env.USER_PATH ? process.env.USER_PATH : path.join(os.homedir(), '.sgcloud')
|
9 | this.sessionFile = path.join(this.settingsFolder, 'session.json')
|
10 | this.userData = null
|
11 | }
|
12 |
|
13 | |
14 |
|
15 |
|
16 | async validate () {
|
17 | await this.getToken()
|
18 | return this
|
19 | }
|
20 |
|
21 | |
22 |
|
23 |
|
24 | async getToken () {
|
25 | const data = await this._loadSession()
|
26 | if (!data.token) throw new Error('You\'re not logged in! Please run `sgconnect login` again.')
|
27 | return data.token
|
28 | }
|
29 |
|
30 | |
31 |
|
32 |
|
33 |
|
34 | async setToken (token) {
|
35 | const data = await this._loadSession()
|
36 | data.token = token
|
37 | await this._updateSession(data)
|
38 | return this
|
39 | }
|
40 |
|
41 | |
42 |
|
43 |
|
44 | async getUsername () {
|
45 | const data = await this._loadSession()
|
46 | return !data.user ? undefined : data.user
|
47 | }
|
48 |
|
49 | |
50 |
|
51 |
|
52 |
|
53 | async setUsername (user) {
|
54 | const data = await this._loadSession()
|
55 | data.user = user
|
56 | await this._updateSession(data)
|
57 | return this
|
58 | }
|
59 |
|
60 | |
61 |
|
62 |
|
63 |
|
64 | async _loadSession () {
|
65 | if (this.userData) return this.userData
|
66 |
|
67 | try {
|
68 | this.userData = await fsEx.readJson(this.sessionFile) || {}
|
69 | return this.userData
|
70 | } catch (err) {
|
71 | return {}
|
72 | }
|
73 | }
|
74 |
|
75 | |
76 |
|
77 |
|
78 |
|
79 |
|
80 | async _updateSession (data) {
|
81 | await fsEx.ensureDir(this.settingsFolder)
|
82 | await fsEx.writeJson(this.sessionFile, data)
|
83 | this.userData = data
|
84 | }
|
85 | }
|
86 |
|
87 | module.exports = UserSettings
|