UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

395 lines (394 loc) 15.9 kB
"use strict"; 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;