mirror of
https://github.com/caprover/caprover
synced 2026-08-01 13:20:57 +00:00
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:
@@ -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
@@ -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
@@ -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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"}
|
||||
@@ -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
@@ -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 @@
|
||||
{"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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"}
|
||||
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user