@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
395 lines (394 loc) • 15.9 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const dist_1 = require("tsoa/dist");
const ResponseData_1 = require("../interfaces/ResponseData");
const git_1 = require("../modules/git");
const git_provider_api_1 = __importDefault(require("../modules/git/git-provider-api"));
const GitProviderService_1 = require("../services/GitProviderService");
const BaseController_1 = __importDefault(require("./BaseController"));
let GitProviderController = class GitProviderController extends BaseController_1.default {
constructor() {
super(new GitProviderService_1.GitProviderService());
}
/**
* List of GIT providers
*/
async read(queryParams) {
if (!this.filter)
this.filter = {};
try {
const data = await this.service.find(this.filter, this.options, this.pagination);
if ((0, lodash_1.isEmpty)(data))
throw new Error("No data found");
return (0, ResponseData_1.respondSuccess)({ data });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
async create(body, queryParams) {
try {
const data = await this.service.create(body, this.options);
return (0, ResponseData_1.respondSuccess)({ data });
}
catch (e) {
// error
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
async update(body, queryParams) {
try {
const data = await this.service.update(body, this.options);
return (0, ResponseData_1.respondSuccess)({ data });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e);
}
}
delete(queryParams) {
return super.delete();
}
// ------------ GIT APIs ------------
async verify(queryParams) {
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const isVerified = await this.service.verify(provider);
return (0, ResponseData_1.respondSuccess)({ data: { isVerified } });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
async getProfile(queryParams) {
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const profile = await git_provider_api_1.default.getProfile(provider);
return (0, ResponseData_1.respondSuccess)({ data: profile });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
async getListOrgs(queryParams) {
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const orgs = await git_provider_api_1.default.listOrgs(provider);
return (0, ResponseData_1.respondSuccess)({ data: orgs });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
/**
* List organization repositories
*/
async getListOrgRepos(queryParams) {
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const repos = await git_provider_api_1.default.listGitRepositories(provider);
return (0, ResponseData_1.respondSuccess)({ data: repos });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
/**
* Create new repository in git provider organization
*/
async createOrgRepo(body, queryParams) {
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const repo = await git_provider_api_1.default.createGitRepository(provider, body, this.options);
return (0, ResponseData_1.respondSuccess)({ data: repo });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
/**
* Create new repository in git provider organization
*/
async deleteOrgRepo(body, queryParams) {
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
if (!body.name)
return (0, ResponseData_1.respondFailure)(`Data git repo "name" (slug) is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const repo = await git_provider_api_1.default.deleteGitRepository(provider, provider.org, body.name);
return (0, ResponseData_1.respondSuccess)({ data: repo });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
/**
* Create new repository in git provider organization
*/
async listRepoBranches(queryParams) {
// repo's slug
const repoSlug = this.filter.repo;
if (!repoSlug)
return (0, ResponseData_1.respondFailure)(`Repo's slug is required.`);
delete this.filter.repo; // <-- to get correct git provider 😅
// validation
const { _id, slug } = this.filter;
if (!_id && !slug)
return (0, ResponseData_1.respondFailure)(`Git provider ID or slug is required.`);
let provider = await this.service.findOne(this.filter, this.options);
if (!provider)
return (0, ResponseData_1.respondFailure)(`Git provider not found.`);
// process
try {
const branches = await git_provider_api_1.default.listRepoBranches(provider, provider.org, repoSlug, this.options);
return (0, ResponseData_1.respondSuccess)({ data: branches });
}
catch (e) {
return (0, ResponseData_1.respondFailure)(e.toString());
}
}
// ------------ SSH KEYS ------------
async getPublicKey() {
const isSshKeysExisted = await (0, git_1.sshKeysExisted)();
if (!isSshKeysExisted)
return (0, ResponseData_1.respondFailure)({ msg: `PUBLIC_KEY is not existed on this server.` });
const publicKey = await (0, git_1.getPublicKey)();
return (0, ResponseData_1.respondSuccess)({ data: publicKey });
}
async createKeysSSH(body) {
const { gitDomain, privateKey, publicKey } = body;
try {
const result = await (0, git_1.writeCustomSSHKeys)({ gitDomain, privateKey, publicKey });
return { status: 1, data: result };
}
catch (e) {
return { status: 0, messages: [e.message] };
}
}
async generateSSH() {
const result = { status: 1, messages: [], data: {} };
try {
const publicKey = await (0, git_1.generateSSH)();
result.data = { publicKey };
result.messages = [`Copy this public key content & add to GIT provider.`];
return result;
}
catch (e) {
result.status = 0;
result.messages = [e.message];
return result;
}
}
async verifySSH(queryParams) {
const gitProvider = this.filter.provider;
if (!gitProvider) {
return { status: 0, messages: [`Param "provider" is required.`] };
}
try {
const verified = await (0, git_1.verifySSH)({ gitProvider });
return { status: 1, data: { verified } };
}
catch (e) {
return { status: 0, messages: [e.message] };
}
}
};
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "read", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "create", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Patch)("/"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "update", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], GitProviderController.prototype, "delete", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/verify"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "verify", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/profile"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "getProfile", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/orgs"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "getListOrgs", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/orgs/repos"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "getListOrgRepos", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/orgs/repos"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "createOrgRepo", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/orgs/repos"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "deleteOrgRepo", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/orgs/repos/branches"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "listRepoBranches", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/ssh/public-key"),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "getPublicKey", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/ssh/create"),
__param(0, (0, dist_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "createKeysSSH", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/ssh/generate"),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "generateSSH", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/ssh/verify"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], GitProviderController.prototype, "verifySSH", null);
GitProviderController = __decorate([
(0, dist_1.Tags)("Git Provider"),
(0, dist_1.Route)("git"),
__metadata("design:paramtypes", [])
], GitProviderController);
exports.default = GitProviderController;