api.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. 'use strict'
  2. const query = require("querystring");
  3. const base64 = require('js-base64').Base64;
  4. var API = {
  5. parse:function(req,res){
  6. let url = req.url;
  7. let URLParse = URL.parse(url,true);
  8. let URLArr = URLParse.pathname.split('/');
  9. //Only GET
  10. req.param = URLParse.query;
  11. // console.log(URLParse.query);
  12. API._checkRouter(URLArr[1],req,res);
  13. // }else{
  14. // var postdata = "";
  15. // req.addListener("data",function(postchunk){
  16. // postdata += postchunk;
  17. // })
  18. // //POST结束输出结果
  19. // req.addListener("end",function(){
  20. // req.param = query.parse(postdata);
  21. // API._checkRouter(URLArr[1],req,res);
  22. // })
  23. // }
  24. },
  25. _checkRouter:function(path,req,res){
  26. // console.log(req.param);
  27. switch(path){
  28. case 'getlink':
  29. if(req.param['key'] && req.param['key']!='' && req.param['url'] && req.param['url']!=''){
  30. UserDB.findOne({key:req.param['key']},function(err,data){
  31. if(!err && data){
  32. let oldLink = req.param['url'];
  33. let qr = 0;
  34. if(req.param['qr'] && Number(req.param['qr'])==1) qr = 1;
  35. if(req.param['base64'] && req.param['base64']==0){
  36. if(oldLink.match(/http(s)?:\/\//)){
  37. MongoHandler.getlink(req.param['key'],oldLink,res,qr);
  38. }else{
  39. API._onError(ErrorMsg.URL_WRONG,res);
  40. return;
  41. }
  42. }else{
  43. oldLink = base64.decode(oldLink);
  44. if(oldLink.match(/http(s)?:\/\//)){
  45. MongoHandler.getlink(req.param['key'],oldLink,res,qr);
  46. }else{
  47. API._onError(ErrorMsg.URL_WRONG,res);
  48. return;
  49. }
  50. }
  51. }else{
  52. API._onError(ErrorMsg.KEY_WRONG,res);
  53. }
  54. });
  55. }else{
  56. if(!req.param['key']){
  57. API._onError(ErrorMsg.KEY_LOST,res);
  58. return;
  59. }
  60. if(!req.param['url']){
  61. API._onError(ErrorMsg.URL_LOST,res);
  62. return;
  63. }
  64. }
  65. break;
  66. case 'check':
  67. break;
  68. default:
  69. res.writeHead(404, {'Content-Type': 'text/html'});
  70. res.end('404');
  71. }
  72. },
  73. _onError:function(msg,res){
  74. var data = {success:0,msg:msg,short:'',long:''};
  75. res.writeHead(200, {'Content-Type': 'text/json','Access-Control-Allow-Origin':'*'});
  76. res.write(JSON.stringify(data));
  77. res.end();
  78. }
  79. }
  80. var MongoHandler = {
  81. getlink:function(key,url,res,qr){
  82. let baseLink;
  83. baseLink = base64.encode(url);
  84. // console.log(baseLink,newLink);
  85. LinkDB.findOne({long:baseLink},function(err,oldOne){
  86. if(!err){
  87. let data = {success:1,msg:'',short:SystemURL,long:url};
  88. if(oldOne){
  89. data.short += oldOne.short;
  90. if(qr) data.qr = SystemURL+'static/qrs'+QRHandler.getQR(oldOne.short);
  91. res.writeHead(200, {'Content-Type': 'text/json','Access-Control-Allow-Origin':'*'});
  92. res.write(JSON.stringify(data));
  93. res.end();
  94. }else{
  95. let newLink,count = COUNT.link+1;
  96. newLink = count.toString(36);
  97. LinkDB.update({key:key,long:baseLink},{$set:{short:newLink}},{upsert:true},function(err,result){
  98. if(!err && result){
  99. data.short += newLink;
  100. if(qr) data.qr = SystemURL+'static/qrs'+QRHandler.getQR(newLink);
  101. res.writeHead(200, {'Content-Type': 'text/json','Access-Control-Allow-Origin':'*'});
  102. res.write(JSON.stringify(data));
  103. res.end();
  104. COUNT.link++;
  105. CountDB.update({},{$inc:{link:1}},{upsert:true});
  106. }else{
  107. API._onError(ErrorMsg.MAKE_ERROR,res);
  108. }
  109. });
  110. }
  111. }else{
  112. API._onError(ErrorMsg.MAKE_ERROR,res);
  113. }
  114. });
  115. }
  116. }
  117. var QRHandler = {
  118. getQR:function(tagName){
  119. let qrImgPath = '/'+tagName+'.png';
  120. if(!FILE.exists(QRPATH+qrImgPath)){
  121. let qr = new QR({value:SystemURL+tagName});
  122. let qrData = qr.toDataURL().replace(/^data:image\/\w+;base64,/, "");
  123. FILE.writeFileSync(QRPATH+qrImgPath,new Buffer(qrData, 'base64'),'binary');
  124. }
  125. return qrImgPath;
  126. }
  127. }
  128. const ErrorMsg = {
  129. NONE:'',
  130. KEY_LOST :'Key is missing',
  131. KEY_WRONG :'Key is incorrect',
  132. URL_LOST :'URL is missing ',
  133. URL_WRONG :'URL must start with "http://" or "https://"',
  134. MAKE_ERROR :'Short link generate error,please contact with l2s.ch'
  135. }
  136. module.exports = API;