@kibibit/kibibe
Version:
a url shortner and tracker
85 lines • 3.85 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); }
};
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