Docker Registry Helper - phase one, skeleton done. Phase 2 TBD: implement retag and push, and, getDockerAutObjectForImageName, Phase 3, TBD: remove old docker registry stuff

This commit is contained in:
Kasra Bigdeli
2018-12-01 16:59:32 -08:00
parent be6c092626
commit ba12611bc6
26 changed files with 192 additions and 164 deletions
+2 -3
View File
@@ -3,7 +3,6 @@ const uuid = require("uuid/v4");
const ApiStatusCodes = require("../api/ApiStatusCodes");
const CaptainConstants = require("../utils/CaptainConstants");
const Logger = require("../utils/Logger");
const Encryptor_1 = require("../utils/Encryptor");
const isValidPath = require('is-valid-path');
const APP_DEFINITIONS = 'appDefinitions';
function isNameAllowed(name) {
@@ -23,10 +22,10 @@ class AppsDataStore {
this.data = data;
this.namepace = namepace;
}
setEncryptionSalt(salt) {
setEncryptor(encryptor) {
if (this.encryptor)
return;
this.encryptor = new Encryptor_1.CaptainEncryptor(this.namepace + salt);
this.encryptor = encryptor;
}
saveApp(appName, app) {
const self = this;
File diff suppressed because one or more lines are too long
+6 -3
View File
@@ -7,6 +7,7 @@ const uuid = require("uuid/v4");
const fs = require("fs-extra");
const ApiStatusCodes = require("../api/ApiStatusCodes");
const CaptainConstants = require("../utils/CaptainConstants");
const Encryptor = require("../utils/Encryptor");
const AppsDataStore = require("./AppsDataStore");
const NAMESPACE = 'namespace';
const HASHED_PASSWORD = 'hashedPassword';
@@ -37,11 +38,13 @@ class DataStore {
const data = new Configstore('captain-store', {});
data.path = CaptainConstants.captainRootDirectory + '/config.conf';
this.data = data;
this.namespace = namespace;
this.data.set(NAMESPACE, namespace);
this.appsDataStore = new AppsDataStore(this.data, namespace);
}
setEncryptionSalt(salt) {
this.appsDataStore.setEncryptionSalt(salt);
this.encryptor = new Encryptor.CaptainEncryptor(this.namespace + salt);
this.appsDataStore.setEncryptor(this.encryptor);
}
getNameSpace() {
return this.data.get(NAMESPACE);
@@ -200,7 +203,7 @@ class DataStore {
return self.data.get(DOCKER_REGISTRIES);
});
}
addRegistryToDb(registryUser, registryPasswordEncrypted, registryDomain, registryImagePrefix) {
addRegistryToDb(registryUser, registryPassword, registryDomain, registryImagePrefix) {
const self = this;
return Promise.resolve()
.then(function () {
@@ -224,7 +227,7 @@ class DataStore {
registries.push({
id,
registryUser,
registryPasswordEncrypted,
registryPasswordEncrypted: self.encryptor.encrypt(registryPassword),
registryDomain,
registryImagePrefix,
});
File diff suppressed because one or more lines are too long
+10 -10
View File
@@ -3,17 +3,17 @@ const express = require("express");
const BaseApi = require("../api/BaseApi");
const ApiStatusCodes = require("../api/ApiStatusCodes");
const Logger = require("../utils/Logger");
const CaptainManager = require("../user/CaptainManager");
const InjectionExtractor = require("../injection/InjectionExtractor");
const router = express.Router();
router.post('/insert/', function (req, res, next) {
let registryUser = req.body.registryUser + '';
let registryPassword = req.body.registryPassword + '';
let registryDomain = req.body.registryDomain + '';
let registryImagePrefix = req.body.registryImagePrefix + '';
const captainManager = CaptainManager.get();
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper();
return Promise.resolve()
.then(function () {
return captainManager.addRegistry(registryUser, registryPassword, registryDomain, registryImagePrefix);
return registryHelper.addRegistry(registryUser, registryPassword, registryDomain, registryImagePrefix);
})
.then(function () {
let msg = 'Registry is added.';
@@ -23,15 +23,15 @@ router.post('/insert/', function (req, res, next) {
.catch(ApiStatusCodes.createCatcher(res));
});
router.get('/all/', function (req, res, next) {
const captainManager = CaptainManager.get();
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper();
let registries = [];
return Promise.resolve()
.then(function () {
return captainManager.getAllRegistries();
return registryHelper.getAllRegistries();
})
.then(function (registriesAll) {
registries = registriesAll;
return captainManager.getDefaultPushRegistry();
return registryHelper.getDefaultPushRegistry();
})
.then(function (defaultPush) {
let baseApi = new BaseApi(ApiStatusCodes.STATUS_OK, 'All registries retrieved');
@@ -44,10 +44,10 @@ router.get('/all/', function (req, res, next) {
});
router.post('/delete/', function (req, res, next) {
let registryId = req.body.registryId + '';
const captainManager = CaptainManager.get();
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper();
return Promise.resolve()
.then(function () {
return captainManager.deleteRegistry(registryId);
return registryHelper.deleteRegistry(registryId);
})
.then(function () {
let baseApi = new BaseApi(ApiStatusCodes.STATUS_OK, 'Registry deleted');
@@ -57,10 +57,10 @@ router.post('/delete/', function (req, res, next) {
});
router.post('/setpush/', function (req, res, next) {
let registryId = req.body.registryId + '';
const captainManager = CaptainManager.get();
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper();
return Promise.resolve()
.then(function () {
return captainManager.setDefaultPushRegistry(registryId);
return registryHelper.setDefaultPushRegistry(registryId);
})
.then(function () {
let baseApi = new BaseApi(ApiStatusCodes.STATUS_OK, 'Push Registry changed');
@@ -1 +1 @@
{"version":3,"file":"RegistriesRouter.js","sourceRoot":"","sources":["../../src/routes/RegistriesRouter.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"RegistriesRouter.js","sourceRoot":"","sources":["../../src/routes/RegistriesRouter.ts"],"names":[],"mappings":"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"}
-2
View File
@@ -6,10 +6,8 @@ const Logger = require("../utils/Logger");
const CaptainManager = require("../user/CaptainManager");
const Validator = require("validator");
const CaptainConstants = require("../utils/CaptainConstants");
const RegistriesRouter = require("./RegistriesRouter");
const InjectionExtractor = require("../injection/InjectionExtractor");
const router = express.Router();
router.use('/registries/', RegistriesRouter);
router.post('/changerootdomain/', function (req, res, next) {
let requestedCustomDomain = (req.body.rootDomain || '').toLowerCase();
function replaceAll(target, search, replacement) {
File diff suppressed because one or more lines are too long
+5 -3
View File
@@ -8,6 +8,7 @@ const WebhooksRouter = require("./WebhooksRouter");
const AppDefinitionRouter = require("./AppDefinitionRouter");
const AppDataRouter = require("./AppDataRouter");
const Authenticator = require("../user/Authenticator");
const RegistriesRouter = require("./RegistriesRouter");
const onFinished = require("on-finished");
const InjectionExtractor = require("../injection/InjectionExtractor");
const router = express.Router();
@@ -68,10 +69,11 @@ router.post('/changepassword/', function (req, res, next) {
})
.catch(ApiStatusCodes.createCatcher(res));
});
// semi-secured end points:
router.use('/webhooks/', WebhooksRouter);
router.use('/system/', SystemRouter);
router.use('/appDefinitions/', AppDefinitionRouter);
router.use('/appData/', AppDataRouter);
router.use('/registries/', RegistriesRouter);
router.use('/system/', SystemRouter);
// semi-secured end points:
router.use('/webhooks/', WebhooksRouter);
module.exports = router;
//# sourceMappingURL=UserRouter.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"UserRouter.js","sourceRoot":"","sources":["../../src/routes/UserRouter.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"UserRouter.js","sourceRoot":"","sources":["../../src/routes/UserRouter.ts"],"names":[],"mappings":"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"}
-42
View File
@@ -6,7 +6,6 @@ const fs = require("fs-extra");
const CaptainConstants = require("../utils/CaptainConstants");
const Logger = require("../utils/Logger");
const LoadBalancerManager = require("./LoadBalancerManager");
const Encryptor = require("../utils/Encryptor");
const CertbotManager = require("./CertbotManager");
const DockerRegistry = require("./DockerRegistry");
const ApiStatusCodes = require("../api/ApiStatusCodes");
@@ -547,47 +546,6 @@ class CaptainManager {
getDockerRegistry() {
return this.dockerRegistry;
}
setDefaultPushRegistry(registryId) {
const self = this;
return Promise.resolve().then(function () {
return self.dataStore.setDefaultPushRegistry(registryId);
});
}
getDefaultPushRegistry() {
const self = this;
return Promise.resolve().then(function () {
return self.dataStore.getDefaultPushRegistry();
});
}
deleteRegistry(registryId) {
const self = this;
return Promise.resolve()
.then(function () {
return self.getDefaultPushRegistry();
})
.then(function (registryIdDefaultPush) {
if (registryId === registryIdDefaultPush) {
throw ApiStatusCodes.createError(ApiStatusCodes.ILLEGAL_PARAMETER, 'Cannot remove the default push');
}
return self.dataStore.deleteRegistry(registryId);
});
}
getAllRegistries() {
const self = this;
return Promise.resolve().then(function () {
return self.dataStore.getAllRegistries() || [];
});
}
addRegistry(registryUser, registryPassword, registryDomain, registryImagePrefix) {
const self = this;
return Promise.resolve().then(function () {
if (!registryUser || !registryPassword || !registryDomain) {
throw ApiStatusCodes.createError(ApiStatusCodes.ILLEGAL_PARAMETER, 'User, password and domain are required.');
}
const passwordEncrypted = new Encryptor.CaptainEncryptor(self.getCaptainSalt()).encrypt(registryPassword);
return self.dataStore.addRegistryToDb(registryUser, passwordEncrypted, registryDomain, registryImagePrefix);
});
}
enableSsl(emailAddress) {
const self = this;
return Promise.resolve()
File diff suppressed because one or more lines are too long
@@ -1,4 +1,10 @@
"use strict";
const ApiStatusCodes = require("../api/ApiStatusCodes");
class DockerRegistryHelper {
constructor(dataStore) {
this.dataStore = dataStore;
//
}
retagAndPushIfDefaultPushExist(imageName, version) {
return Promise.resolve() //
.then(function () {
@@ -13,7 +19,48 @@ class DockerRegistryHelper {
return undefined;
});
}
setDefaultPushRegistry(registryId) {
const self = this;
return Promise.resolve().then(function () {
return self.dataStore.setDefaultPushRegistry(registryId);
});
}
getDefaultPushRegistry() {
const self = this;
return Promise.resolve().then(function () {
return self.dataStore.getDefaultPushRegistry();
});
}
deleteRegistry(registryId) {
const self = this;
return Promise.resolve()
.then(function () {
return self.getDefaultPushRegistry();
})
.then(function (registryIdDefaultPush) {
if (registryId === registryIdDefaultPush) {
throw ApiStatusCodes.createError(ApiStatusCodes.ILLEGAL_PARAMETER, 'Cannot remove the default push');
}
return self.dataStore.deleteRegistry(registryId);
});
}
getAllRegistries() {
const self = this;
return Promise.resolve().then(function () {
return self.dataStore.getAllRegistries() || [];
});
}
addRegistry(registryUser, registryPassword, registryDomain, registryImagePrefix) {
const self = this;
return Promise.resolve().then(function () {
if (!registryUser || !registryPassword || !registryDomain) {
throw ApiStatusCodes.createError(ApiStatusCodes.ILLEGAL_PARAMETER, 'User, password and domain are required.');
}
return self.dataStore.addRegistryToDb(registryUser, registryPassword, registryDomain, registryImagePrefix);
});
}
}
module.exports = DockerRegistryHelper;
/**
*
@@ -1 +1 @@
{"version":3,"file":"DockerRegistryHelper.js","sourceRoot":"","sources":["../../src/user/DockerRegistryHelper.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB;IACtB,8BAA8B,CAC1B,SAAiB,EACjB,OAAe;QAEf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;aACtB,IAAI,CAAC;YACF,EAAE;YACF,OAAO,EAAE,CAAA;QACb,CAAC,CAAC,CAAA;IACV,CAAC;IAED,+BAA+B,CAC3B,SAAiB;QAEjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;aACtB,IAAI,CAAC;YACF,EAAE;YACF,OAAO,SAAS,CAAA;QACpB,CAAC,CAAC,CAAA;IACV,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
{"version":3,"file":"DockerRegistryHelper.js","sourceRoot":"","sources":["../../src/user/DockerRegistryHelper.ts"],"names":[],"mappings":";AACA,wDAAwD;AAExD,MAAM,oBAAoB;IACtB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QACpC,EAAE;IACN,CAAC;IAED,8BAA8B,CAC1B,SAAiB,EACjB,OAAe;QAEf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;aACtB,IAAI,CAAC;YACF,EAAE;YACF,OAAO,EAAE,CAAA;QACb,CAAC,CAAC,CAAA;IACV,CAAC;IAED,+BAA+B,CAC3B,SAAiB;QAEjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;aACtB,IAAI,CAAC;YACF,EAAE;YACF,OAAO,SAAS,CAAA;QACpB,CAAC,CAAC,CAAA;IACV,CAAC;IAED,sBAAsB,CAAC,UAAkB;QACrC,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACN,CAAC;IAED,sBAAsB;QAClB,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAA;QAClD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,cAAc,CAAC,UAAkB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE;aACnB,IAAI,CAAC;YACF,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAA;QACxC,CAAC,CAAC;aACD,IAAI,CAAC,UAAS,qBAAqB;YAChC,IAAI,UAAU,KAAK,qBAAqB,EAAE;gBACtC,MAAM,cAAc,CAAC,WAAW,CAC5B,cAAc,CAAC,iBAAiB,EAChC,gCAAgC,CACnC,CAAA;aACJ;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACV,CAAC;IAED,gBAAgB;QACZ,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAA;QAClD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,WAAW,CACP,YAAoB,EACpB,gBAAwB,EACxB,cAAsB,EACtB,mBAA2B;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,EAAE;gBACvD,MAAM,cAAc,CAAC,WAAW,CAC5B,cAAc,CAAC,iBAAiB,EAChC,yCAAyC,CAC5C,CAAA;aACJ;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CACjC,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,CACtB,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAED,iBAAS,oBAAoB,CAAA;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
File diff suppressed because one or more lines are too long
+5 -1
View File
@@ -7,17 +7,21 @@ const Authenticator = require("./Authenticator");
const requireFromString = require("require-from-string");
const BuildLog = require("./BuildLog");
const ImageMaker = require("./ImageMaker");
const DockerRegistryHelper = require("./DockerRegistryHelper");
class ServiceManager {
constructor(dataStore, dockerApi, loadBalancerManager) {
this.dataStore = dataStore;
this.dockerApi = dockerApi;
this.loadBalancerManager = loadBalancerManager;
this.dockerRegistryHelper = new DockerRegistryHelper();
this.dockerRegistryHelper = new DockerRegistryHelper(this.dataStore);
this.activeBuilds = {};
this.buildLogs = {};
this.isReady = true;
this.imageMaker = new ImageMaker(this.dockerRegistryHelper, this.dockerApi, this.dataStore, this.buildLogs, this.activeBuilds);
}
getRegistryHelper() {
return this.dockerRegistryHelper;
}
isInited() {
return this.isReady;
}
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -30,10 +30,10 @@ class AppsDataStore {
constructor(private data: configstore, private namepace: string) {}
setEncryptionSalt(salt: string) {
setEncryptor(encryptor: CaptainEncryptor) {
if (this.encryptor) return
this.encryptor = new CaptainEncryptor(this.namepace + salt)
this.encryptor = encryptor
}
private saveApp(appName: String, app: IAppDef) {
+9 -3
View File
@@ -37,6 +37,8 @@ const DEFAULT_NGINX_CONFIG_FOR_APP = fs
.toString()
class DataStore {
private encryptor: Encryptor.CaptainEncryptor
private namespace: string
private data: Configstore
private appsDataStore: AppsDataStore
@@ -45,11 +47,13 @@ class DataStore {
data.path = CaptainConstants.captainRootDirectory + '/config.conf'
this.data = data
this.namespace = namespace
this.data.set(NAMESPACE, namespace)
this.appsDataStore = new AppsDataStore(this.data, namespace)
}
setEncryptionSalt(salt: string) {
this.appsDataStore.setEncryptionSalt(salt)
this.encryptor = new Encryptor.CaptainEncryptor(this.namespace + salt)
this.appsDataStore.setEncryptor(this.encryptor)
}
getNameSpace(): string {
@@ -252,7 +256,7 @@ class DataStore {
addRegistryToDb(
registryUser: string,
registryPasswordEncrypted: string,
registryPassword: string,
registryDomain: string,
registryImagePrefix: string
) {
@@ -284,7 +288,9 @@ class DataStore {
registries.push({
id,
registryUser,
registryPasswordEncrypted,
registryPasswordEncrypted: self.encryptor.encrypt(
registryPassword
),
registryDomain,
registryImagePrefix,
})
+10 -12
View File
@@ -2,9 +2,7 @@ import express = require('express')
import BaseApi = require('../api/BaseApi')
import ApiStatusCodes = require('../api/ApiStatusCodes')
import Logger = require('../utils/Logger')
import CaptainManager = require('../user/CaptainManager')
import Validator = require('validator')
import CaptainConstants = require('../utils/CaptainConstants')
import InjectionExtractor = require('../injection/InjectionExtractor');
const router = express.Router()
@@ -14,11 +12,11 @@ router.post('/insert/', function(req, res, next) {
let registryDomain = req.body.registryDomain + ''
let registryImagePrefix = req.body.registryImagePrefix + ''
const captainManager = CaptainManager.get()
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function() {
return captainManager.addRegistry(
return registryHelper.addRegistry(
registryUser,
registryPassword,
registryDomain,
@@ -34,16 +32,16 @@ router.post('/insert/', function(req, res, next) {
})
router.get('/all/', function(req, res, next) {
const captainManager = CaptainManager.get()
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper()
let registries: IRegistryInfo[] = []
return Promise.resolve()
.then(function() {
return captainManager.getAllRegistries()
return registryHelper.getAllRegistries()
})
.then(function(registriesAll) {
registries = registriesAll
return captainManager.getDefaultPushRegistry()
return registryHelper.getDefaultPushRegistry()
})
.then(function(defaultPush) {
let baseApi = new BaseApi(
@@ -60,11 +58,11 @@ router.get('/all/', function(req, res, next) {
router.post('/delete/', function(req, res, next) {
let registryId = req.body.registryId + ''
const captainManager = CaptainManager.get()
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function() {
return captainManager.deleteRegistry(registryId)
return registryHelper.deleteRegistry(registryId)
})
.then(function() {
let baseApi = new BaseApi(
@@ -78,11 +76,11 @@ router.post('/delete/', function(req, res, next) {
router.post('/setpush/', function(req, res, next) {
let registryId = req.body.registryId + ''
const captainManager = CaptainManager.get()
const registryHelper = InjectionExtractor.extractUserFromInjected(res).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function() {
return captainManager.setDefaultPushRegistry(registryId)
return registryHelper.setDefaultPushRegistry(registryId)
})
.then(function() {
let baseApi = new BaseApi(
-3
View File
@@ -5,13 +5,10 @@ import Logger = require('../utils/Logger')
import CaptainManager = require('../user/CaptainManager')
import Validator = require('validator')
import CaptainConstants = require('../utils/CaptainConstants')
import RegistriesRouter = require('./RegistriesRouter')
import InjectionExtractor = require('../injection/InjectionExtractor')
const router = express.Router()
router.use('/registries/', RegistriesRouter)
router.post('/changerootdomain/', function(req, res, next) {
let requestedCustomDomain = (req.body.rootDomain || '').toLowerCase()
+8 -5
View File
@@ -8,6 +8,7 @@ import AppDefinitionRouter = require('./AppDefinitionRouter')
import AppDataRouter = require('./AppDataRouter')
import Authenticator = require('../user/Authenticator')
import Logger = require('../utils/Logger')
import RegistriesRouter = require('./RegistriesRouter')
import onFinished = require('on-finished')
import InjectionExtractor = require('../injection/InjectionExtractor')
@@ -100,13 +101,15 @@ router.post('/changepassword/', function(req, res, next) {
.catch(ApiStatusCodes.createCatcher(res))
})
// semi-secured end points:
router.use('/webhooks/', WebhooksRouter)
router.use('/system/', SystemRouter)
router.use('/appDefinitions/', AppDefinitionRouter)
router.use('/appData/', AppDataRouter)
router.use('/registries/', RegistriesRouter)
router.use('/system/', SystemRouter)
// semi-secured end points:
router.use('/webhooks/', WebhooksRouter)
export = router
-65
View File
@@ -790,71 +790,6 @@ class CaptainManager {
return this.dockerRegistry
}
setDefaultPushRegistry(registryId: string) {
const self = this
return Promise.resolve().then(function() {
return self.dataStore.setDefaultPushRegistry(registryId)
})
}
getDefaultPushRegistry() {
const self = this
return Promise.resolve().then(function() {
return self.dataStore.getDefaultPushRegistry()
})
}
deleteRegistry(registryId: string) {
const self = this
return Promise.resolve()
.then(function() {
return self.getDefaultPushRegistry()
})
.then(function(registryIdDefaultPush) {
if (registryId === registryIdDefaultPush) {
throw ApiStatusCodes.createError(
ApiStatusCodes.ILLEGAL_PARAMETER,
'Cannot remove the default push'
)
}
return self.dataStore.deleteRegistry(registryId)
})
}
getAllRegistries() {
const self = this
return Promise.resolve().then(function() {
return self.dataStore.getAllRegistries() || []
})
}
addRegistry(
registryUser: string,
registryPassword: string,
registryDomain: string,
registryImagePrefix: string
) {
const self = this
return Promise.resolve().then(function() {
if (!registryUser || !registryPassword || !registryDomain) {
throw ApiStatusCodes.createError(
ApiStatusCodes.ILLEGAL_PARAMETER,
'User, password and domain are required.'
)
}
const passwordEncrypted = new Encryptor.CaptainEncryptor(self.getCaptainSalt()).encrypt(registryPassword)
return self.dataStore.addRegistryToDb(
registryUser,
passwordEncrypted,
registryDomain,
registryImagePrefix
)
})
}
enableSsl(emailAddress: string) {
const self = this
return Promise.resolve()
@@ -1,4 +1,11 @@
import DataStore = require('../datastore/DataStore')
import ApiStatusCodes = require('../api/ApiStatusCodes')
class DockerRegistryHelper {
constructor(private dataStore: DataStore) {
//
}
retagAndPushIfDefaultPushExist(
imageName: string,
version: number
@@ -19,8 +26,73 @@ class DockerRegistryHelper {
return undefined
})
}
setDefaultPushRegistry(registryId: string) {
const self = this
return Promise.resolve().then(function() {
return self.dataStore.setDefaultPushRegistry(registryId)
})
}
getDefaultPushRegistry() {
const self = this
return Promise.resolve().then(function() {
return self.dataStore.getDefaultPushRegistry()
})
}
deleteRegistry(registryId: string) {
const self = this
return Promise.resolve()
.then(function() {
return self.getDefaultPushRegistry()
})
.then(function(registryIdDefaultPush) {
if (registryId === registryIdDefaultPush) {
throw ApiStatusCodes.createError(
ApiStatusCodes.ILLEGAL_PARAMETER,
'Cannot remove the default push'
)
}
return self.dataStore.deleteRegistry(registryId)
})
}
getAllRegistries() {
const self = this
return Promise.resolve().then(function() {
return self.dataStore.getAllRegistries() || []
})
}
addRegistry(
registryUser: string,
registryPassword: string,
registryDomain: string,
registryImagePrefix: string
) {
const self = this
return Promise.resolve().then(function() {
if (!registryUser || !registryPassword || !registryDomain) {
throw ApiStatusCodes.createError(
ApiStatusCodes.ILLEGAL_PARAMETER,
'User, password and domain are required.'
)
}
return self.dataStore.addRegistryToDb(
registryUser,
registryPassword,
registryDomain,
registryImagePrefix
)
})
}
}
export = DockerRegistryHelper
/**
*
+1
View File
@@ -46,6 +46,7 @@ import ApiStatusCodes = require('../api/ApiStatusCodes')
import { AnyError } from '../models/OtherTypes'
import BuildLog = require('./BuildLog')
import DataStore = require('../datastore/DataStore')
import DockerRegistryHelper = require('./DockerRegistryHelper');
const RAW_SOURCE_DIRECTORY = 'source_files'
const TAR_FILE_NAME_READY_FOR_DOCKER = 'image.tar'
+6 -1
View File
@@ -10,6 +10,7 @@ import requireFromString = require('require-from-string')
import BuildLog = require('./BuildLog')
import { ImageInfo } from 'dockerode'
import ImageMaker = require('./ImageMaker')
import DockerRegistryHelper = require('./DockerRegistryHelper')
class ServiceManager {
private activeBuilds: IHashMapGeneric<boolean>
@@ -23,7 +24,7 @@ class ServiceManager {
private dockerApi: DockerApi,
private loadBalancerManager: LoadBalancerManager
) {
this.dockerRegistryHelper = new DockerRegistryHelper()
this.dockerRegistryHelper = new DockerRegistryHelper(this.dataStore)
this.activeBuilds = {}
this.buildLogs = {}
this.isReady = true
@@ -36,6 +37,10 @@ class ServiceManager {
)
}
getRegistryHelper() {
return this.dockerRegistryHelper
}
isInited() {
return this.isReady
}