Skip to content

Commit 27df24d

Browse files
richardschneiderdaviddias
authored andcommitted
feat: keystore (#155)
* feat: add a key store container * feat: open and close the key store * docs(readme): mention the key store
1 parent f4e0ccf commit 27df24d

File tree

8 files changed

+45
-1
lines changed

8 files changed

+45
-1
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ This now has created the following structure, either on disk or as an in memory
126126
│ └── _README
127127
├── config
128128
├── datastore
129+
├── keys
129130
└── version
130131
```
131132

@@ -145,6 +146,7 @@ Arguments:
145146
* `storageBackends` (object, optional): may contain the following values, which should each be a class implementing the [datastore interface](https://github.com/ipfs/interface-datastore#readme):
146147
* `root` (defaults to [`datastore-fs`](https://github.com/ipfs/js-datastore-fs#readme) in Node.js and [`datastore-level`](https://github.com/ipfs/js-datastore-level#readme) in the browser). Defines the back-end type used for gets and puts of values at the root (`repo.set()`, `repo.get()`)
147148
* `blocks` (defaults to [`datastore-fs`](https://github.com/ipfs/js-datastore-fs#readme) in Node.js and [`datastore-level`](https://github.com/ipfs/js-datastore-level#readme) in the browser). Defines the back-end type used for gets and puts of values at `repo.blocks`.
149+
* `keys` (defaults to [`datastore-fs`](https://github.com/ipfs/js-datastore-fs#readme) in Node.js and [`datastore-level`](https://github.com/ipfs/js-datastore-level#readme) in the browser). Defines the back-end type used for gets and puts of encrypted keys at `repo.keys`
148150
* `datastore` (defaults to [`datastore-level`](https://github.com/ipfs/js-datastore-level#readme)). Defines the back-end type used as the key-valye store used for gets and puts of values at `repo.datastore`.
149151

150152
```js

src/default-options-browser.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = {
66
storageBackends: {
77
root: require('datastore-level'),
88
blocks: require('datastore-level'),
9+
keys: require('datastore-level'),
910
datastore: require('datastore-level')
1011
},
1112
storageBackendOptions: {
@@ -17,6 +18,10 @@ module.exports = {
1718
sharding: false,
1819
db: require('level-js')
1920
},
21+
keys: {
22+
sharding: false,
23+
db: require('level-js')
24+
},
2025
datastore: {
2126
db: require('level-js')
2227
}

src/default-options.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = {
66
storageBackends: {
77
root: require('datastore-fs'),
88
blocks: require('datastore-fs'),
9+
keys: require('datastore-fs'),
910
datastore: require('datastore-level')
1011
},
1112
storageBackendOptions: {
@@ -15,6 +16,8 @@ module.exports = {
1516
blocks: {
1617
sharding: true,
1718
extension: '.data'
19+
},
20+
keys: {
1821
}
1922
}
2023
}

src/index.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,19 @@ class IpfsRepo {
104104
this.blocks = blocks
105105
cb()
106106
},
107+
(cb) => {
108+
log('creating keystore')
109+
const keysBaseStore = backends.create('keys', path.join(this.path, 'keys'), this.options)
110+
blockstore(
111+
keysBaseStore,
112+
this.options.storageBackendOptions.keys,
113+
cb)
114+
},
115+
(keys, cb) => {
116+
this.keys = keys
117+
cb()
118+
},
119+
107120
(cb) => {
108121
this.closed = false
109122
log('all opened')
@@ -169,7 +182,7 @@ class IpfsRepo {
169182
(cb) => this.apiAddr.delete(ignoringNotFound(cb)),
170183
(cb) => {
171184
each(
172-
[this.blocks, this.datastore],
185+
[this.blocks, this.keys, this.datastore],
173186
(store, callback) => store.close(callback),
174187
cb)
175188
},

test/browser.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ describe('IPFS Repo Tests on the Browser', () => {
2424
require('./repo-test')(repo)
2525
require('./blockstore-test')(repo)
2626
require('./datastore-test')(repo)
27+
require('./keystore-test')(repo)
2728
})

test/keystore-test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/* eslint max-nested-callbacks: ["error", 8] */
2+
/* eslint-env mocha */
3+
'use strict'
4+
5+
const chai = require('chai')
6+
chai.use(require('dirty-chai'))
7+
const expect = chai.expect
8+
9+
module.exports = (repo) => {
10+
describe('keystore', () => {
11+
it('exists', () => {
12+
expect(repo).to.have.property('keys')
13+
})
14+
})
15+
}

test/node.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ describe('IPFS Repo Tests onNode.js', () => {
6060
require('./repo-test')(repo)
6161
require('./blockstore-test')(repo)
6262
require('./datastore-test')(repo)
63+
require('./keystore-test')(repo)
6364
if (!r.init) {
6465
require('./interop-test')(repo)
6566
}

test/options-test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ function expectedRepoOptions () {
4040
// equivalents via package.browser
4141
root: require('datastore-fs'),
4242
blocks: require('datastore-fs'),
43+
keys: require('datastore-fs'),
4344
datastore: require('datastore-level')
4445
},
4546
storageBackendOptions: {
4647
root: {
4748
extension: ''
4849
},
50+
keys: {},
4951
blocks: {
5052
sharding: true,
5153
extension: '.data'
@@ -55,6 +57,8 @@ function expectedRepoOptions () {
5557

5658
if (process.browser) {
5759
options.storageBackendOptions.root.db = require('leveldown')
60+
options.storageBackendOptions.keys.db = require('leveldown')
61+
options.storageBackendOptions.keys.sharding = false
5862
options.storageBackendOptions.blocks.db = require('leveldown')
5963
delete options.storageBackendOptions.blocks.extension
6064
options.storageBackendOptions.blocks.sharding = false

0 commit comments

Comments
 (0)