UNPKG

@kibibit/kibibe

Version:

a url shortner and tracker

85 lines 3.85 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); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AppController = void 0; const common_1 = require("@nestjs/common"); const nconf = require("nconf"); const useragent = require("useragent"); const app_service_1 = require("./app.service"); const url_service_1 = require("./url/url.service"); let AppController = class AppController { constructor(appService, UrlService) { this.appService = appService; this.UrlService = UrlService; } getHello() { return this.appService.getHello(); } async redirect(urlCode, clientInfo, request) { console.log(clientInfo); const ip = request.header('x-forwarded-for') || request.connection.remoteAddress; console.log(Object.assign(Object.assign({}, useragent.parse(clientInfo['user-agent'])), { ip })); const url = await this.UrlService.findOne({ urlCode }); const allowedClicks = nconf.get('allowedClick') || 50000; try { if (url) { let clickCount = url.clickCount; if (clickCount >= allowedClicks) { console.log('The click count for shortcode ' + urlCode + ' has passed the limit of ' + allowedClicks); throw new common_1.HttpException('The click count for shortcode ' + urlCode + ' has passed the limit of ' + allowedClicks, 400); } clickCount++; url.clickCount = clickCount; await this.UrlService.update(url); return { url: url.longUrl }; } else { throw new common_1.HttpException(`The short url doesn't exists in our system.`, 400); } } catch (err) { console.error('Error while retrieving long url for shorturlcode ' + urlCode); throw new common_1.HttpException('There is some internal error.', 500); } } }; __decorate([ common_1.Get(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], AppController.prototype, "getHello", null); __decorate([ common_1.Get('/:urlCode'), common_1.Redirect('https://docs.nestjs.com'), __param(0, common_1.Param('urlCode')), __param(1, common_1.Headers()), __param(2, common_1.Req()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", Promise) ], AppController.prototype, "redirect", null); AppController = __decorate([ common_1.Controller(), __metadata("design:paramtypes", [app_service_1.AppService, url_service_1.UrlService]) ], AppController); exports.AppController = AppController; //# sourceMappingURL=app.controller.js.map