Skip to content

Commit e2e5779

Browse files
authored
Merge pull request #684 from secondl1ght/keysend-messenger-perms
feat: add keysend messenger to custom permissions
2 parents 8b60f1c + a751f16 commit e2e5779

File tree

5 files changed

+93
-34
lines changed

5 files changed

+93
-34
lines changed

app/src/components/connect/AddSession.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import FormField from 'components/common/FormField';
88
import FormInput from 'components/common/FormInput';
99
import FormSelect from 'components/common/FormSelect';
1010
import PurpleButton from './PurpleButton';
11+
import { PermissionTypeValues } from 'store/views/addSessionView';
1112

1213
const Styled = {
1314
Wrapper: styled.div``,
@@ -50,6 +51,14 @@ const AddSession: React.FC<Props> = ({ primary }) => {
5051
);
5152
}
5253

54+
const validatePermissionType = (v: string) => {
55+
const permissionType = Object.values(PermissionTypeValues).find(value => value === v);
56+
57+
if (!permissionType) return;
58+
59+
addSessionView.setPermissionType(permissionType);
60+
};
61+
5362
return (
5463
<Wrapper>
5564
<Row>
@@ -74,18 +83,18 @@ const AddSession: React.FC<Props> = ({ primary }) => {
7483
<FormField>
7584
<FormSelect
7685
value={addSessionView.permissionType}
77-
onChange={addSessionView.setPermissionType}
86+
onChange={validatePermissionType}
7887
options={[
79-
{ label: l('admin'), value: 'admin' },
80-
{ label: l('readonly'), value: 'read-only' },
81-
{ label: l('custom'), value: 'custom' },
88+
{ label: l('admin'), value: PermissionTypeValues.Admin },
89+
{ label: l('readonly'), value: PermissionTypeValues.ReadOnly },
90+
{ label: l('custom'), value: PermissionTypeValues.Custom },
8291
]}
8392
/>
8493
</FormField>
8594
</Column>
8695
<Column>
8796
<PurpleButton onClick={addSessionView.handleSubmit}>
88-
{addSessionView.permissionType === 'custom'
97+
{addSessionView.permissionType === PermissionTypeValues.Custom
8998
? l('common.next')
9099
: l('common.submit')}
91100
</PurpleButton>

app/src/components/connect/CustomSessionPage.tsx

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import FormSelect from 'components/common/FormSelect';
1414
import FormDate from 'components/common/FormDate';
1515
import FormSwitch from 'components/common/v2/FormSwitch';
1616
import PurpleButton from './PurpleButton';
17+
import { PermissionTypeValues } from 'store/views/addSessionView';
1718

1819
const Styled = {
1920
Wrapper: styled.div`
@@ -108,7 +109,7 @@ const CustomSessionPage: React.FC = () => {
108109
addSessionView.handleCustomSubmit();
109110
}, []);
110111

111-
const setPermissionType = (permissionType: string) => {
112+
const setPermissionType = (permissionType: PermissionTypeValues) => {
112113
return () => {
113114
addSessionView.setPermissionType(permissionType);
114115
};
@@ -175,48 +176,62 @@ const CustomSessionPage: React.FC = () => {
175176

176177
<PermissionTypes>
177178
<PermissionType
178-
active={addSessionView.permissionType === 'admin'}
179-
onClick={setPermissionType('admin')}
179+
active={addSessionView.permissionType === PermissionTypeValues.Admin}
180+
onClick={setPermissionType(PermissionTypeValues.Admin)}
180181
>
181182
<Paragraph bold>{l('admin')}</Paragraph>
182183
<Small>{l('adminDesc')}</Small>
183184
</PermissionType>
184185

185186
<PermissionType
186-
active={addSessionView.permissionType === 'read-only'}
187-
onClick={setPermissionType('read-only')}
187+
active={addSessionView.permissionType === PermissionTypeValues.ReadOnly}
188+
onClick={setPermissionType(PermissionTypeValues.ReadOnly)}
188189
>
189190
<Paragraph bold>{l('readonly')}</Paragraph>
190191
<Small>{l('readonlyDesc')}</Small>
191192
</PermissionType>
192193

193194
<PermissionType
194-
active={addSessionView.permissionType === 'liquidity'}
195-
onClick={setPermissionType('liquidity')}
195+
active={
196+
addSessionView.permissionType === PermissionTypeValues.Liquidity
197+
}
198+
onClick={setPermissionType(PermissionTypeValues.Liquidity)}
196199
>
197200
<Paragraph bold>{l('liquidity')}</Paragraph>
198201
<Small>{l('liquidityDesc')}</Small>
199202
</PermissionType>
200203

201204
<PermissionType
202-
active={addSessionView.permissionType === 'payments'}
203-
onClick={setPermissionType('payments')}
205+
active={addSessionView.permissionType === PermissionTypeValues.Payments}
206+
onClick={setPermissionType(PermissionTypeValues.Payments)}
204207
>
205208
<Paragraph bold>{l('payments')}</Paragraph>
206209
<Small>{l('paymentsDesc')}</Small>
207210
</PermissionType>
208211

209212
<PermissionType
210-
active={addSessionView.permissionType === 'custodial'}
211-
onClick={setPermissionType('custodial')}
213+
active={
214+
addSessionView.permissionType === PermissionTypeValues.Messenger
215+
}
216+
onClick={setPermissionType(PermissionTypeValues.Messenger)}
217+
>
218+
<Paragraph bold>{l('messenger')}</Paragraph>
219+
<Small>{l('messengerDesc')}</Small>
220+
</PermissionType>
221+
222+
<PermissionType
223+
active={
224+
addSessionView.permissionType === PermissionTypeValues.Custodial
225+
}
226+
onClick={setPermissionType(PermissionTypeValues.Custodial)}
212227
>
213228
<Paragraph bold>{l('custodial')}</Paragraph>
214229
<Small>{l('custodialDesc')}</Small>
215230
</PermissionType>
216231

217232
<PermissionType
218-
active={addSessionView.permissionType === 'custom'}
219-
onClick={setPermissionType('custom')}
233+
active={addSessionView.permissionType === PermissionTypeValues.Custom}
234+
onClick={setPermissionType(PermissionTypeValues.Custom)}
220235
>
221236
<Paragraph bold>{l('custom')}</Paragraph>
222237
<Small>{l('customDesc')}</Small>
@@ -228,7 +243,7 @@ const CustomSessionPage: React.FC = () => {
228243
<Label semiBold>Permissions</Label>
229244

230245
<Permissions>
231-
{addSessionView.permissionType === 'custodial' && (
246+
{addSessionView.permissionType === PermissionTypeValues.Custodial && (
232247
<FormField>
233248
<Label semiBold space={8}>
234249
{l('addBalance')}
@@ -335,6 +350,18 @@ const CustomSessionPage: React.FC = () => {
335350
onChange={togglePermission('receive')}
336351
/>
337352
</Permission>
353+
354+
<Permission>
355+
<div>
356+
<Paragraph bold>{l('permSign')}</Paragraph>
357+
<Small>{l('permSignDesc')}</Small>
358+
</div>
359+
360+
<FormSwitch
361+
checked={addSessionView.permissions.sign}
362+
onChange={togglePermission('sign')}
363+
/>
364+
</Permission>
338365
</Permissions>
339366
</Column>
340367
</Row>

app/src/i18n/locales/en-US.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
"cmps.connect.CustomSessionPage.liquidityDesc": "User can only set fees, use Loop, and use Pool.",
5757
"cmps.connect.CustomSessionPage.payments": "Payments Manager",
5858
"cmps.connect.CustomSessionPage.paymentsDesc": "User can only send and receive payments.",
59+
"cmps.connect.CustomSessionPage.messenger": "Keysend Messenger",
60+
"cmps.connect.CustomSessionPage.messengerDesc": "User can send and receive payments plus sign messages.",
5961
"cmps.connect.CustomSessionPage.custodial": "Custodial Account",
6062
"cmps.connect.CustomSessionPage.custodialDesc": "Create a custodial off-chain account for your node.",
6163
"cmps.connect.CustomSessionPage.custom": "Custom",
@@ -78,6 +80,8 @@
7880
"cmps.connect.CustomSessionPage.permSendDesc": "Send funds from this node.",
7981
"cmps.connect.CustomSessionPage.permReceive": "Receive",
8082
"cmps.connect.CustomSessionPage.permReceiveDesc": "Receive funds on this node.",
83+
"cmps.connect.CustomSessionPage.permSign": "Sign",
84+
"cmps.connect.CustomSessionPage.permSignDesc": "Sign messages to verify node.",
8185
"cmps.connect.CustomSessionPage.advanced": "Advanced Options",
8286
"cmps.connect.CustomSessionPage.proxy": "Proxy Server",
8387
"cmps.connect.CustomSessionPage.proxyDesc": "Specify a custom Lightning Node Connect proxy server",

app/src/store/views/addSessionView.ts

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,21 @@ import { Store } from 'store';
33
import * as LIT from 'types/generated/lit-sessions_pb';
44
import { MAX_DATE, PermissionUriMap } from 'util/constants';
55

6+
export enum PermissionTypeValues {
7+
Admin = 'admin',
8+
ReadOnly = 'read-only',
9+
Liquidity = 'liquidity',
10+
Payments = 'payments',
11+
Messenger = 'messenger',
12+
Custodial = 'custodial',
13+
Custom = 'custom',
14+
}
15+
616
export default class AddSessionView {
717
private _store: Store;
818

919
label = '';
10-
permissionType = 'admin'; // Expected values: admin | read-only | custodial | custom | liquidity | payments
20+
permissionType: PermissionTypeValues = PermissionTypeValues.Admin;
1121
editing = false;
1222
permissions: { [key: string]: boolean } = {
1323
openChannel: false,
@@ -17,6 +27,7 @@ export default class AddSessionView {
1727
pool: false,
1828
send: false,
1929
receive: false,
30+
sign: false,
2031
};
2132
expiration = 'never'; // Expected values: 7 | 30 | 60 | 90 | never | custom
2233
expirationOptions = [
@@ -49,11 +60,11 @@ export default class AddSessionView {
4960
//
5061

5162
get sessionType() {
52-
if (this.permissionType === 'admin') {
63+
if (this.permissionType === PermissionTypeValues.Admin) {
5364
return LIT.SessionType.TYPE_MACAROON_ADMIN;
54-
} else if (this.permissionType === 'read-only') {
65+
} else if (this.permissionType === PermissionTypeValues.ReadOnly) {
5566
return LIT.SessionType.TYPE_MACAROON_READONLY;
56-
} else if (this.permissionType === 'custodial') {
67+
} else if (this.permissionType === PermissionTypeValues.Custodial) {
5768
return LIT.SessionType.TYPE_MACAROON_ACCOUNT;
5869
}
5970

@@ -132,45 +143,52 @@ export default class AddSessionView {
132143
this.custodialBalance = balance;
133144
}
134145

135-
setPermissionType(permissionType: string) {
146+
setPermissionType(permissionType: PermissionTypeValues) {
136147
this.permissionType = permissionType;
137148

138149
switch (permissionType) {
139-
case 'admin':
150+
case PermissionTypeValues.Admin:
140151
this.setAllPermissions(true);
141152
break;
142153

143-
case 'read-only':
154+
case PermissionTypeValues.ReadOnly:
144155
this.setAllPermissions(false);
145156
break;
146157

147-
case 'liquidity':
158+
case PermissionTypeValues.Liquidity:
148159
this.setAllPermissions(false);
149160
this.permissions.setFees = true;
150161
this.permissions.loop = true;
151162
this.permissions.pool = true;
152163
break;
153164

154-
case 'payments':
165+
case PermissionTypeValues.Payments:
166+
this.setAllPermissions(false);
167+
this.permissions.send = true;
168+
this.permissions.receive = true;
169+
break;
170+
171+
case PermissionTypeValues.Messenger:
155172
this.setAllPermissions(false);
156173
this.permissions.send = true;
157174
this.permissions.receive = true;
175+
this.permissions.sign = true;
158176
break;
159177

160-
case 'custodial':
178+
case PermissionTypeValues.Custodial:
161179
this.setAllPermissions(false);
162180
this.permissions.send = true;
163181
this.permissions.receive = true;
164182
break;
165183

166-
case 'custom':
184+
case PermissionTypeValues.Custom:
167185
// We don't need to change anything, let the user customize permissions how they want
168186
break;
169187
}
170188
}
171189

172190
togglePermission(permission: string) {
173-
this.setPermissionType('custom');
191+
this.setPermissionType(PermissionTypeValues.Custom);
174192
this.permissions[permission] = !this.permissions[permission];
175193
}
176194

@@ -184,7 +202,7 @@ export default class AddSessionView {
184202

185203
cancel() {
186204
this.label = '';
187-
this.permissionType = 'admin';
205+
this.permissionType = PermissionTypeValues.Admin;
188206
this.editing = false;
189207
this.setAllPermissions(false);
190208
this.expiration = 'never';
@@ -197,7 +215,7 @@ export default class AddSessionView {
197215
//
198216

199217
async handleSubmit() {
200-
if (this.permissionType === 'custom') {
218+
if (this.permissionType === PermissionTypeValues.Custom) {
201219
this._store.settingsStore.sidebarVisible = false;
202220
this._store.router.push('/connect/custom');
203221
} else {
@@ -223,7 +241,7 @@ export default class AddSessionView {
223241
label = `My ${this.permissionType} session`;
224242
}
225243

226-
if (this.permissionType === 'custodial') {
244+
if (this.permissionType === PermissionTypeValues.Custodial) {
227245
const custodialAccountId = await this.registerCustodialAccount();
228246

229247
// Return immediately to prevent a session being created when there is an error creating the custodial account

app/src/util/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,5 @@ export const PermissionUriMap: { [key: string]: string[] } = {
116116
'/lnrpc.Lightning/ListInvoices',
117117
'/lnrpc.Lightning/SubscribeInvoices',
118118
],
119+
sign: ['/lnrpc.Lightning/SignMessage'],
119120
};

0 commit comments

Comments
 (0)