orgnote-api 0.10.2 → 0.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,8 @@ exports[`Should decrypt note content via password 1`] = `
6
6
  #+TITLE: Hello worlld
7
7
 
8
8
  * Hello?",
9
- "encrypted": "gpgPassword",
9
+ "encrypted": false,
10
+ "encryptionType": "gpgPassword",
10
11
  "id": "id",
11
12
  "meta": {
12
13
  "headings": [
@@ -27,7 +28,8 @@ exports[`Should decrypt note via provided keys 1`] = `
27
28
  #+TITLE: Hello worlld
28
29
 
29
30
  * Hello?",
30
- "encrypted": "gpgKeys",
31
+ "encrypted": false,
32
+ "encryptionType": "gpgKeys",
31
33
  "id": "id",
32
34
  "meta": {
33
35
  "headings": [
@@ -49,7 +51,8 @@ exports[`Should encrypt note content via password 1`] = `
49
51
  "id": "1",
50
52
  "name": "John Doe",
51
53
  },
52
- "encrypted": "gpgPassword",
54
+ "encrypted": true,
55
+ "encryptionType": "gpgPassword",
53
56
  "id": "id",
54
57
  "meta": {
55
58
  "id": undefined,
@@ -65,7 +68,8 @@ exports[`Should encrypt note via keys 1`] = `
65
68
  "id": "1",
66
69
  "name": "John Doe",
67
70
  },
68
- "encrypted": "gpgKeys",
71
+ "encrypted": true,
72
+ "encryptionType": "gpgKeys",
69
73
  "id": "id",
70
74
  "meta": {
71
75
  "id": undefined,
@@ -81,7 +85,7 @@ exports[`Should encrypt note with empty encrypted property 1`] = `
81
85
  "id": "1",
82
86
  "name": "John Doe",
83
87
  },
84
- "encrypted": "gpgPassword",
88
+ "encrypted": true,
85
89
  "id": "id",
86
90
  "meta": {
87
91
  "id": undefined,
@@ -101,7 +105,7 @@ exports[`Should not decrypt note without provided encrypted type 1`] = `
101
105
  #+TITLE: Hello worlld
102
106
 
103
107
  * Hello?",
104
- "encrypted": undefined,
108
+ "encrypted": false,
105
109
  "id": "id",
106
110
  "meta": {
107
111
  "description": "Awesome description",
@@ -123,7 +127,8 @@ exports[`Should not encrypt public note 1`] = `
123
127
  #+TITLE: Hello worlld
124
128
 
125
129
  * Hello?",
126
- "encrypted": "gpgPassword",
130
+ "encrypted": false,
131
+ "encryptionType": "gpgPassword",
127
132
  "id": "id",
128
133
  "meta": {
129
134
  "description": "Awesome description",
@@ -133,3 +138,48 @@ exports[`Should not encrypt public note 1`] = `
133
138
  },
134
139
  }
135
140
  `;
141
+
142
+ exports[`Should set not encrypted status when params type does not provided 1`] = `
143
+ {
144
+ "content": "-----BEGIN PGP MESSAGE-----
145
+
146
+ wcFMA/vryg+TTn0rAQ//TBFRjKmjRQoLhSrgeH+NbsZXbxvo7Ey4k+BQ9XA5
147
+ +CMpXH9uFUxsSaI5+McUSEt32VI17HRpXQDCL9nwaWqWOanMaRe0tXXhtox2
148
+ gfe2f/6zsge9ux+mXF2BG4z+V5T8XIOrfzxosVprdJHZHM3x7cW5USQ0t2i2
149
+ FiOUWxSZO1899J3yICpMvhDXvTLVZuKpSNQho5PyXSeZa83eN+uYkhgt9lsk
150
+ 0KW88Nr435S6n6mVw/zpitXIgEKpkqh46mhG+1W3aC0lYx6j9lHm3bjtdb4r
151
+ 2mtZbWKwfdBggEy8qEeiUeslvKd6uWtEccomzFgJkaqWVGknLmrBdHfztRIV
152
+ fbZhxHz+J3GFOIgXf/5+fv+zg0nTazgz1mDUfnTHw3+qcAyEJ0ADdyg9EZc+
153
+ bKbK0GwzMDPQeM+cCRDWUTiIa1ruyEETiwMdhWUDztF8XxY2o8jXPerZ0NhG
154
+ R8l+SvAdYQQXPfxEh9lA3thkyz/Vp72pW46lUeJHGSq/fS6KIdLHLP9Z2e1J
155
+ aCFpNMgyAN+BaXwnbLZfz6k5hV8awbRScSWQLEg69D9b287SFDPOYW7OZikn
156
+ CKXL7xyQ5LrWJZN9Z/UPGjy+PdEw1SBhyluW6DQ+Sz1j4K8USTLqY89EInDl
157
+ G7AxHGujR9UkUGyUvvc71XW7jEOogiDgn1ZMoj9Y58LSweUB8vfkY3VF84Fy
158
+ zGVvLFWnFbtnWuoQC4OOXv1F6ETdmEsSMEMWKzRLDGPyqNX7FhG3cejlEuiK
159
+ EsT5oQhz00RECmnR8mJkGmJhzWmmeoQvaucFqhTOZjvYl9ivuEMBZ2jtkdHn
160
+ R6UNcNZRpCbfnl7YoikqbGBgqDFYydFGHXKHDpYhcQYWJsMDUayzUiPtzmaE
161
+ tgfTgNNqgPxkLnWA99KYNU8DH+FwgaYBuw9dwdqwcjxSbZjHhCFGUfsqM+ik
162
+ O9gcoAwVO1usODlESU7OWuSF2tIv5DBG5rhlSyxBp4d4aWmaumTswAdojy2O
163
+ sM70ETbg0mC8niW9lNsgJp55oFmlksvzjUIit5rBEr55rtPcJSgakPpR2yvd
164
+ Q4XjybUmV0IdONMhk/OlqaBPtnA0RG+qTcm7oP1qH/m5zRA0ZplVQ5ylkQwr
165
+ LwGq5JQpJkgxxgLIrUbbtzYBShXSr5c1XXR0LIRiNgtb6s1s4mt+fbyExdJF
166
+ +ceuu+/xYrW/YTuEJpHxLiZ+aNPW5g5Y7Hbqu3hp3UL/kD44cc8JjZh18spX
167
+ p/ncojDhF2r2vhR+CndYcMkpGMV+t1pGKC8wlcFc7lb9GJASnqMGvhQmvIaG
168
+ gO/x7UjuTZSBW+kITHHZJDqYryKUv1j0CkHxIn9tWsYOpa1giOFtXX5v0AAM
169
+ AJR/s/beLlqwCsUdYnw1TkP/0u0ZK3RPio1nJ7S6ckPfsM7DqCWD8ILD8Cdr
170
+ cuzQrWaE30t5PXx53xBPO+6t5wKfDL35WHWG1Irmvz9UuT7tDS3IzwtF4ijF
171
+ PX6alTbxGnoHgZ4bG4J1wfpTNPppP1gJeVg67VqOypzdZi+SjofMWnFgRFmD
172
+ yEN8xpFUs7A9xryVZOosp9Sfe3IbBkO99sAQ7jV4EoMYk3/GKA==
173
+ =LjkG
174
+ -----END PGP MESSAGE-----",
175
+ "encrypted": true,
176
+ "encryptionType": "gpgKeys",
177
+ "id": "id",
178
+ "meta": {
179
+ "description": "Awesome description",
180
+ "images": [],
181
+ "published": false,
182
+ "title": "My note title for decryption via keys",
183
+ },
184
+ }
185
+ `;
@@ -16,7 +16,7 @@ test('Should encrypt note content via password', async () => {
16
16
 
17
17
  const note: Note = {
18
18
  id: 'id',
19
- encrypted: 'gpgPassword',
19
+ encryptionType: 'gpgPassword',
20
20
  meta: {
21
21
  title: 'My note title',
22
22
  images: [],
@@ -46,7 +46,7 @@ test('Should encrypt note content via password', async () => {
46
46
  test('Should decrypt note content via password', async () => {
47
47
  const note: Note = {
48
48
  id: 'id',
49
- encrypted: 'gpgPassword',
49
+ encryptionType: 'gpgPassword',
50
50
  meta: {
51
51
  title: 'My note title',
52
52
  images: [],
@@ -79,7 +79,7 @@ test('Should encrypt note via keys', async () => {
79
79
 
80
80
  const note: Note = {
81
81
  id: 'id',
82
- encrypted: 'gpgKeys',
82
+ encryptionType: 'gpgKeys',
83
83
  meta: {
84
84
  title: 'My note title for encryption via keys',
85
85
  images: [],
@@ -111,7 +111,7 @@ test('Should encrypt note via keys', async () => {
111
111
  test('Should decrypt note via provided keys', async () => {
112
112
  const note: Note = {
113
113
  id: 'id',
114
- encrypted: 'gpgKeys',
114
+ encryptionType: 'gpgKeys',
115
115
  meta: {
116
116
  title: 'My note title for decryption via keys',
117
117
  images: [],
@@ -169,7 +169,7 @@ test('Should not encrypt public note', async () => {
169
169
 
170
170
  const note: Note = {
171
171
  id: 'id',
172
- encrypted: 'gpgPassword',
172
+ encryptionType: 'gpgPassword',
173
173
  meta: {
174
174
  title: 'My note title',
175
175
  images: [],
@@ -271,6 +271,7 @@ test('Should decrypt note and note meta', async () => {
271
271
  const note: Note = {
272
272
  id: 'id',
273
273
  meta: { ...meta },
274
+ encryptionType: 'gpgPassword',
274
275
  content: `#+TITLE: My note title
275
276
  #+DESCRIPTION: Awesome description
276
277
  #+PUBLISHED: false
@@ -293,3 +294,53 @@ Hello world`,
293
294
 
294
295
  expect(meta).toEqual(decryptedNote.meta);
295
296
  });
297
+
298
+ test('Should set not encrypted status when params type does not provided', async () => {
299
+ const note: Note = {
300
+ id: 'id',
301
+ encryptionType: 'gpgKeys',
302
+ meta: {
303
+ title: 'My note title for decryption via keys',
304
+ images: [],
305
+ published: false,
306
+ description: 'Awesome description',
307
+ },
308
+ content: `-----BEGIN PGP MESSAGE-----
309
+
310
+ wcFMA/vryg+TTn0rAQ//TBFRjKmjRQoLhSrgeH+NbsZXbxvo7Ey4k+BQ9XA5
311
+ +CMpXH9uFUxsSaI5+McUSEt32VI17HRpXQDCL9nwaWqWOanMaRe0tXXhtox2
312
+ gfe2f/6zsge9ux+mXF2BG4z+V5T8XIOrfzxosVprdJHZHM3x7cW5USQ0t2i2
313
+ FiOUWxSZO1899J3yICpMvhDXvTLVZuKpSNQho5PyXSeZa83eN+uYkhgt9lsk
314
+ 0KW88Nr435S6n6mVw/zpitXIgEKpkqh46mhG+1W3aC0lYx6j9lHm3bjtdb4r
315
+ 2mtZbWKwfdBggEy8qEeiUeslvKd6uWtEccomzFgJkaqWVGknLmrBdHfztRIV
316
+ fbZhxHz+J3GFOIgXf/5+fv+zg0nTazgz1mDUfnTHw3+qcAyEJ0ADdyg9EZc+
317
+ bKbK0GwzMDPQeM+cCRDWUTiIa1ruyEETiwMdhWUDztF8XxY2o8jXPerZ0NhG
318
+ R8l+SvAdYQQXPfxEh9lA3thkyz/Vp72pW46lUeJHGSq/fS6KIdLHLP9Z2e1J
319
+ aCFpNMgyAN+BaXwnbLZfz6k5hV8awbRScSWQLEg69D9b287SFDPOYW7OZikn
320
+ CKXL7xyQ5LrWJZN9Z/UPGjy+PdEw1SBhyluW6DQ+Sz1j4K8USTLqY89EInDl
321
+ G7AxHGujR9UkUGyUvvc71XW7jEOogiDgn1ZMoj9Y58LSweUB8vfkY3VF84Fy
322
+ zGVvLFWnFbtnWuoQC4OOXv1F6ETdmEsSMEMWKzRLDGPyqNX7FhG3cejlEuiK
323
+ EsT5oQhz00RECmnR8mJkGmJhzWmmeoQvaucFqhTOZjvYl9ivuEMBZ2jtkdHn
324
+ R6UNcNZRpCbfnl7YoikqbGBgqDFYydFGHXKHDpYhcQYWJsMDUayzUiPtzmaE
325
+ tgfTgNNqgPxkLnWA99KYNU8DH+FwgaYBuw9dwdqwcjxSbZjHhCFGUfsqM+ik
326
+ O9gcoAwVO1usODlESU7OWuSF2tIv5DBG5rhlSyxBp4d4aWmaumTswAdojy2O
327
+ sM70ETbg0mC8niW9lNsgJp55oFmlksvzjUIit5rBEr55rtPcJSgakPpR2yvd
328
+ Q4XjybUmV0IdONMhk/OlqaBPtnA0RG+qTcm7oP1qH/m5zRA0ZplVQ5ylkQwr
329
+ LwGq5JQpJkgxxgLIrUbbtzYBShXSr5c1XXR0LIRiNgtb6s1s4mt+fbyExdJF
330
+ +ceuu+/xYrW/YTuEJpHxLiZ+aNPW5g5Y7Hbqu3hp3UL/kD44cc8JjZh18spX
331
+ p/ncojDhF2r2vhR+CndYcMkpGMV+t1pGKC8wlcFc7lb9GJASnqMGvhQmvIaG
332
+ gO/x7UjuTZSBW+kITHHZJDqYryKUv1j0CkHxIn9tWsYOpa1giOFtXX5v0AAM
333
+ AJR/s/beLlqwCsUdYnw1TkP/0u0ZK3RPio1nJ7S6ckPfsM7DqCWD8ILD8Cdr
334
+ cuzQrWaE30t5PXx53xBPO+6t5wKfDL35WHWG1Irmvz9UuT7tDS3IzwtF4ijF
335
+ PX6alTbxGnoHgZ4bG4J1wfpTNPppP1gJeVg67VqOypzdZi+SjofMWnFgRFmD
336
+ yEN8xpFUs7A9xryVZOosp9Sfe3IbBkO99sAQ7jV4EoMYk3/GKA==
337
+ =LjkG
338
+ -----END PGP MESSAGE-----`,
339
+ };
340
+
341
+ const decryptedNote = await decryptNote(note, {
342
+ type: 'disabled',
343
+ });
344
+
345
+ expect(decryptedNote).toMatchSnapshot();
346
+ });
@@ -11,6 +11,7 @@ import {
11
11
  } from './encryption';
12
12
  import { OrgNoteEncryption } from '../models/encryption';
13
13
  import { parse, withMetaInfo } from 'org-mode-ast';
14
+ import { isGpgEncrypted } from '..';
14
15
 
15
16
  export type NoteEncryptionType = `${ModelsPublicNote['encryptionType']}`;
16
17
 
@@ -27,6 +28,7 @@ export async function encryptNote<T extends AbstractEncryptedNote>(
27
28
  note: T,
28
29
  encryptionParams: OrgNoteEncryption
29
30
  ): Promise<T> {
31
+ note.encrypted = false;
30
32
  if (
31
33
  !encryptionParams.type ||
32
34
  encryptionParams.type === ModelsPublicNoteEncryptionTypeEnum.Disabled ||
@@ -37,15 +39,18 @@ export async function encryptNote<T extends AbstractEncryptedNote>(
37
39
 
38
40
  note.meta = { id: note.meta.id, published: note.meta.published };
39
41
 
40
- if (encryptionParams.type === ModelsPublicNoteEncryptionTypeEnum.GpgKeys) {
41
- return await encryptNoteViaKeys(
42
- note,
43
- encryptionParams.publicKey,
44
- encryptionParams.privateKey,
45
- encryptionParams.privateKeyPassphrase
46
- );
47
- }
48
- return await encryptNoteViaPassword(note, encryptionParams.password);
42
+ const encryptedNote =
43
+ encryptionParams.type === ModelsPublicNoteEncryptionTypeEnum.GpgKeys
44
+ ? await encryptNoteViaKeys(
45
+ note,
46
+ encryptionParams.publicKey,
47
+ encryptionParams.privateKey,
48
+ encryptionParams.privateKeyPassphrase
49
+ )
50
+ : await encryptNoteViaPassword(note, encryptionParams.password);
51
+
52
+ encryptedNote.encrypted = true;
53
+ return encryptedNote;
49
54
  }
50
55
  export async function encryptNoteViaPassword<T extends AbstractEncryptedNote>(
51
56
  note: T,
@@ -89,8 +94,10 @@ export async function decryptNote<T extends AbstractEncryptedNote>(
89
94
  !encryptionParams.type ||
90
95
  encryptionParams.type === ModelsPublicNoteEncryptionTypeEnum.Disabled
91
96
  ) {
97
+ note.encrypted = isGpgEncrypted(note.content);
92
98
  return note;
93
99
  }
100
+ note.encrypted = true;
94
101
  const decryptedNote =
95
102
  encryptionParams.type === ModelsPublicNoteEncryptionTypeEnum.GpgKeys
96
103
  ? await decryptNoteViaKeys(
@@ -104,6 +111,7 @@ export async function decryptNote<T extends AbstractEncryptedNote>(
104
111
 
105
112
  return {
106
113
  ...decryptedNote,
114
+ encrypted: false,
107
115
  meta: parsed.meta,
108
116
  };
109
117
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orgnote-api",
3
- "version": "0.10.2",
3
+ "version": "0.10.4",
4
4
  "description": "Official API for creating extensions for OrgNote app",
5
5
  "type": "module",
6
6
  "main": "./index.ts",
@@ -0,0 +1,44 @@
1
+ import { expect, test } from 'vitest';
2
+ import { isGpgEncrypted } from '../is-gpg-encrypted';
3
+
4
+ test('Should return true if the content is gpg encrypted', () => {
5
+ const content = `-----BEGIN PGP MESSAGE-----
6
+
7
+ wcFMA/vryg+TTn0rAQ//TBFRjKmjRQoLhSrgeH+NbsZXbxvo7Ey4k+BQ9XA5
8
+ +CMpXH9uFUxsSaI5+McUSEt32VI17HRpXQDCL9nwaWqWOanMaRe0tXXhtox2
9
+ gfe2f/6zsge9ux+mXF2BG4z+V5T8XIOrfzxosVprdJHZHM3x7cW5USQ0t2i2
10
+ FiOUWxSZO1899J3yICpMvhDXvTLVZuKpSNQho5PyXSeZa83eN+uYkhgt9lsk
11
+ 0KW88Nr435S6n6mVw/zpitXIgEKpkqh46mhG+1W3aC0lYx6j9lHm3bjtdb4r
12
+ 2mtZbWKwfdBggEy8qEeiUeslvKd6uWtEccomzFgJkaqWVGknLmrBdHfztRIV
13
+ fbZhxHz+J3GFOIgXf/5+fv+zg0nTazgz1mDUfnTHw3+qcAyEJ0ADdyg9EZc+
14
+ bKbK0GwzMDPQeM+cCRDWUTiIa1ruyEETiwMdhWUDztF8XxY2o8jXPerZ0NhG
15
+ R8l+SvAdYQQXPfxEh9lA3thkyz/Vp72pW46lUeJHGSq/fS6KIdLHLP9Z2e1J
16
+ aCFpNMgyAN+BaXwnbLZfz6k5hV8awbRScSWQLEg69D9b287SFDPOYW7OZikn
17
+ CKXL7xyQ5LrWJZN9Z/UPGjy+PdEw1SBhyluW6DQ+Sz1j4K8USTLqY89EInDl
18
+ G7AxHGujR9UkUGyUvvc71XW7jEOogiDgn1ZMoj9Y58LSweUB8vfkY3VF84Fy
19
+ zGVvLFWnFbtnWuoQC4OOXv1F6ETdmEsSMEMWKzRLDGPyqNX7FhG3cejlEuiK
20
+ EsT5oQhz00RECmnR8mJkGmJhzWmmeoQvaucFqhTOZjvYl9ivuEMBZ2jtkdHn
21
+ R6UNcNZRpCbfnl7YoikqbGBgqDFYydFGHXKHDpYhcQYWJsMDUayzUiPtzmaE
22
+ tgfTgNNqgPxkLnWA99KYNU8DH+FwgaYBuw9dwdqwcjxSbZjHhCFGUfsqM+ik
23
+ O9gcoAwVO1usODlESU7OWuSF2tIv5DBG5rhlSyxBp4d4aWmaumTswAdojy2O
24
+ sM70ETbg0mC8niW9lNsgJp55oFmlksvzjUIit5rBEr55rtPcJSgakPpR2yvd
25
+ Q4XjybUmV0IdONMhk/OlqaBPtnA0RG+qTcm7oP1qH/m5zRA0ZplVQ5ylkQwr
26
+ LwGq5JQpJkgxxgLIrUbbtzYBShXSr5c1XXR0LIRiNgtb6s1s4mt+fbyExdJF
27
+ +ceuu+/xYrW/YTuEJpHxLiZ+aNPW5g5Y7Hbqu3hp3UL/kD44cc8JjZh18spX
28
+ p/ncojDhF2r2vhR+CndYcMkpGMV+t1pGKC8wlcFc7lb9GJASnqMGvhQmvIaG
29
+ gO/x7UjuTZSBW+kITHHZJDqYryKUv1j0CkHxIn9tWsYOpa1giOFtXX5v0AAM
30
+ AJR/s/beLlqwCsUdYnw1TkP/0u0ZK3RPio1nJ7S6ckPfsM7DqCWD8ILD8Cdr
31
+ cuzQrWaE30t5PXx53xBPO+6t5wKfDL35WHWG1Irmvz9UuT7tDS3IzwtF4ijF
32
+ PX6alTbxGnoHgZ4bG4J1wfpTNPppP1gJeVg67VqOypzdZi+SjofMWnFgRFmD
33
+ yEN8xpFUs7A9xryVZOosp9Sfe3IbBkO99sAQ7jV4EoMYk3/GKA==
34
+ =LjkG
35
+ -----END PGP MESSAGE-----`;
36
+
37
+ expect(isGpgEncrypted(content)).toBe(true);
38
+ });
39
+
40
+ test('Should return false if the content is not gpg encrypted', () => {
41
+ const content = `Hello World!`;
42
+
43
+ expect(isGpgEncrypted(content)).toBe(false);
44
+ });
package/tools/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './mock-server';
2
+ export * from './is-gpg-encrypted';
@@ -0,0 +1,3 @@
1
+ export function isGpgEncrypted(text: string): boolean {
2
+ return text.startsWith('-----BEGIN PGP MESSAGE-----');
3
+ }