File tree 4 files changed +41
-3
lines changed
4 files changed +41
-3
lines changed Original file line number Diff line number Diff line change
1
+ const fs = require ( 'fs-extra' ) ;
2
+ const tar = require ( 'tar' ) ;
3
+ const path = require ( 'path' ) ;
4
+
5
+ module . exports = ( ) => async ( ) => {
6
+ const root = path . resolve ( __dirname , 'user-installable-package' ) ;
7
+ const files = await fs . readdir ( root ) ;
8
+
9
+ return tar . c ( {
10
+ gzip : true ,
11
+ cwd : root
12
+ } , files ) ;
13
+ } ;
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" : " UserInstallablePackage"
3
+ }
Original file line number Diff line number Diff line change @@ -2,6 +2,8 @@ const osjs = require('osjs');
2
2
const path = require ( 'path' ) ;
3
3
const Packages = require ( '../src/packages.js' ) ;
4
4
5
+ jest . mock ( 'bent' ) ;
6
+
5
7
describe ( 'Packages' , ( ) => {
6
8
let core ;
7
9
let packages ;
@@ -25,6 +27,22 @@ describe('Packages', () => {
25
27
. toBe ( true ) ;
26
28
} ) ;
27
29
30
+ test ( '#installPackage' , async ( ) => {
31
+ await expect ( packages . installPackage ( 'jest:/UserInstallablePackage.tgz?redacted' , {
32
+ root : 'home:/.packages'
33
+ } , { username : 'packages' } ) ) . resolves . toEqual ( {
34
+ reload : true
35
+ } ) ;
36
+ } ) ;
37
+
38
+ test ( '#uninstallPackage' , async ( ) => {
39
+ await expect ( packages . uninstallPackage ( 'UserInstallablePackage' , {
40
+ root : 'home:/.packages'
41
+ } , { username : 'packages' } ) ) . resolves . toEqual ( {
42
+ reload : true
43
+ } ) ;
44
+ } ) ;
45
+
28
46
test ( '#handleMessage' , ( ) => {
29
47
const params = [ {
30
48
pid : 1 ,
Original file line number Diff line number Diff line change @@ -159,18 +159,22 @@ class Packages {
159
159
const name = archiveName ( url ) ;
160
160
const target = await realpath ( `${ options . root } /${ name } ` , user ) ;
161
161
162
- if ( await fs . exists ( target ) ) {
162
+ if ( path . resolve ( target ) === path . resolve ( options . root ) ) {
163
+ throw new Error ( 'Invalid package source' ) ;
164
+ } else if ( await fs . exists ( target ) ) {
163
165
throw new Error ( 'Target already exists' ) ;
164
166
} else if ( options . system ) {
165
167
throw new Error ( 'System packages not yet implemented' ) ;
166
168
}
167
169
168
170
const stream = await fetchSteam ( url , options ) ;
169
- await fs . mkdir ( target ) ;
171
+
172
+ await fs . mkdirp ( target ) ;
170
173
await extract ( stream , target ) ;
171
174
172
175
// FIXME: npm packages have a 'package' subdirectory
173
- if ( ! await fs . exists ( path . resolve ( target , 'metadata.json' ) ) ) {
176
+ const exists = await fs . exists ( path . resolve ( target , 'metadata.json' ) ) ;
177
+ if ( ! exists ) {
174
178
await fs . remove ( target ) ;
175
179
176
180
throw new Error ( 'Invalid package' ) ;
You can’t perform that action at this time.
0 commit comments