Skip to content

Commit fea8d60

Browse files
authored
Merge pull request #1 from InteractiveTraining/add-greenlock-gcloud-storage
feat: save certs to google cloud storage
2 parents 51ec97c + f02df7d commit fea8d60

File tree

3 files changed

+41
-21
lines changed

3 files changed

+41
-21
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
},
1414
"dependencies": {
1515
"@interactivetraining/le-challenge-cloudflare": "1.3.1",
16+
"@interactivetraining/le-store-gcloud-storage": "0.0.1",
1617
"compression": "^1.7.3",
1718
"cors": "^2.8.5",
1819
"dotenv": "^5.0.1",

sample.env

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
DOMAIN=my-self-hosted-unpkg-domain.com
2+
ENABLE_SSL=0
23
NPM_REGISTRY=https://private.npm.registry
34
NPM_USER=
45
NPM_PASSWORD=
@@ -7,3 +8,7 @@ CLOUDFLARE_EMAIL=
78
CLOUDFLARE_API_KEY=
89
LETS_ENCRYPT_EMAIL=
910
LETS_ENCRYPT_AGREE_TO_TOS=true
11+
GOOGLE_CLOUD_BUCKET_NAME=my-certs
12+
GOOGLE_CLOUD_PROJECT_ID=my-google-cloud-project-id
13+
GOOGLE_CLOUD_KEY_FILE_PATH=/path/to/google-cloud-key-file.json
14+
GOOGLE_CLOUD_CERT_DB_FILE=cert-db.json

src/index.ts

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import * as helmet from 'helmet';
66
import {CloudflareChallenge} from '@interactivetraining/le-challenge-cloudflare';
77
import {IPackageParams} from './interfaces';
88
import {downloadPackage} from './helpers';
9+
import {GCloudStoreCreate} from '@interactivetraining/le-store-gcloud-storage'
10+
import * as http from 'http';
911

1012
require('dotenv').config();
1113

@@ -53,24 +55,36 @@ app.get(['/:scope?/:package@:version/*', '/:scope?/:package/*'], async (req, res
5355
}
5456
});
5557

56-
require('greenlock-express').create({
57-
version: 'draft-11',
58-
server: 'https://acme-v02.api.letsencrypt.org/directory',
59-
email: process.env.LETS_ENCRYPT_EMAIL,
60-
agreeTos: (process.env.LETS_ENCRYPT_AGREE_TO_TOS.trim() === 'true'),
61-
approveDomains: [
62-
process.env.DOMAIN
63-
],
64-
configDir: 'acme/',
65-
app: app,
66-
challengeType: 'dns-01',
67-
challenge: new CloudflareChallenge({
68-
cloudflare: {
69-
email: process.env.CLOUDFLARE_EMAIL,
70-
key: process.env.CLOUDFLARE_API_KEY
71-
},
72-
acmePrefix: '_acme-challenge',
73-
verifyPropagation: {waitFor: 5000, retries: 50},
74-
useDNSOverHTTPS: false
75-
})
76-
}).listen(80, 443, () => console.log(`Listening...`));
58+
if (process.env.ENABLE_SSL === "1") {
59+
require('greenlock-express').create({
60+
version: 'draft-11',
61+
server: 'https://acme-v02.api.letsencrypt.org/directory',
62+
//server: 'https://acme-staging-v02.api.letsencrypt.org/directory',
63+
email: process.env.LETS_ENCRYPT_EMAIL,
64+
agreeTos: (process.env.LETS_ENCRYPT_AGREE_TO_TOS.trim() === 'true'),
65+
approveDomains: [
66+
process.env.DOMAIN
67+
],
68+
configDir: 'acme/',
69+
app: app,
70+
store: GCloudStoreCreate({
71+
bucketName: process.env.GOOGLE_CLOUD_BUCKET_NAME,
72+
projectId: process.env.GOOGLE_CLOUD_PROJECT_ID,
73+
keyFilename: process.env.GOOGLE_CLOUD_KEY_FILE_PATH,
74+
dbFileName: process.env.GOOGLE_CLOUD_CERT_DB_FILE
75+
}),
76+
challengeType: 'dns-01',
77+
challenge: new CloudflareChallenge({
78+
cloudflare: {
79+
email: process.env.CLOUDFLARE_EMAIL,
80+
key: process.env.CLOUDFLARE_API_KEY
81+
},
82+
acmePrefix: '_acme-challenge',
83+
verifyPropagation: {waitFor: 5000, retries: 50},
84+
useDNSOverHTTPS: false
85+
})
86+
}).listen(80, 443, () => console.log(`Listening...`));
87+
} else {
88+
http.createServer(app).listen(80, () => console.log(`Listening...`));
89+
}
90+

0 commit comments

Comments
 (0)