const config = require('./config.js'); const public_file_access = require('./public_file_access.js'); const fs = require('fs'); var util = require('util'); const { handle_GET } = require('./handling_get.js'); function debug_to_file(content) { // let fn = "logs/" + new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ")[0] + "request_log.txt"; let d = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" "); fs.writeFile(fn, d[1] + util.inspect(content) + "\r\n", { 'flag': 'a' }, function (err) { if (err) { console.log(err); } }); } function OnRequest(req, res) { var par_ = { callback: null, "debug_footprint": [], on_request_time: process.uptime(), ResContent: { 'Content-Type': 'text/html', 'status_code': 200, 'content': {}, }, postBody: [], errors: [], station: { }, Request: req, Respond: res, } if (config.debug) {//debug par_.debug_footprint.push({ func_name: "onrequest", time_record: process.uptime() - par_.on_request_time, }) } try { switch (req.method) { case "OPTIONS": //如果是带有session并是options就直接返回 par_.status_code = 200; api_res_end(par_); // general_function.ResWrite(par_); break; case "POST": //如果 有post //par_.callback=process_post; const hp = require('./handling_post.js'); hp.handle_POST(par_); break; default: //file access //including get var url_parts = public_file_access.url_filtering(par_.Request.url); let filename = url_parts.split("?")[0]; let query = url_parts.replace(filename,""); switch (filename) { case (filename.match(/(?:js|css|img|png|webfont|ttf|svg|woff|html|htm|woff2)$/) || {}).input: case "/favicon.ico": public_file_access.ReadStaticFile(filename, par_); break; case (filename.match(/^\/api\//) || {}).input: //handling get, must contains "/api/" within url handle_GET(par_); break; // case "/bb": // public_file_access.ReadStaticFile("/hz.html", par_); // break; default: public_file_access.ReadStaticFile("/index.html", par_); break; } break; } } catch (error) { console.log(error); debug_to_file(error); } } function api_direct_end(par) { if (config.debug) { //调试用途 console.log(par.Request.method + " ws=" + (typeof (par.SessionDoc)) + ' [ ' + Math.round((process.uptime() - par.on_request_time) * 1000) + "ms ]" + ' ' + par.Request.url); console.log(par.debug_footprint); //print_usage(); //console.log(token) } //ends par = null; } function api_res_end(par) { // var par_ = debug_step_log(par, "api_res_end"); //所有返回客户端信息从此处集合发出 var status_code = 404; var header_json = { //下面头部都是必要 "Access-Control-Allow-Origin": config.CORS_origin, "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Headers": "content-type,XFILENAME,XFILECATEGORY,XFILESIZE,token", 'Content-Type': 'application/json; charset=UTF-8', 'Access-Control-Allow-Methods': "POST", "Access-Control-Max-Age": "2592000", }; var content = {}; for (var x in par.ResContent) { switch (x) { case "status_code": status_code = par.ResContent[x]; break; case 'Content-Type': break; case 'Set-Cookie': if (par.ResContent[x].length > 0) { header_json["Set-Cookie"] = [par.ResContent[x].trim()]; } break; case "content": content = par.ResContent[x]; break; } } switch (status_code) { case "200": par.Respond.statusCode = 200; break; default: par.Respond.statusCode = status_code; break; } if (config.debug) { //调试用途 // console.log(par.Request.method + " " + status_code + " ws=" + (typeof (par_.SessionDoc)) + ' ' + par.Request.connection.remoteAddress + ' [' + Math.round((process.uptime() - par.on_request_time) * 1000) + "ms]" + ' ' + par.Request.url); // console.log(par.debug_footprint); //print_usage(); //console.log(token) } for (let x in header_json) { par.Respond.setHeader(x, header_json[x]); } par.Respond.end(JSON.stringify(content)); /* if(typeof(encrypt_key)==undefined) { } else { const aesjs = require("aes-js"); const crypto = require("crypto"); var key = crypto.createHash('sha256').update(encrypt_key).digest('array'); var textBytes = aesjs.utils.utf8.toBytes(JSON.stringify(content)); // The counter is optional, and if omitted will begin at 1 var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(textBytes); // To print or store the binary data, you may convert it to hex var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); par.Respond.end(encryptedHex); } */ //ends par = null; } module.exports = { OnRequest, api_res_end, api_direct_end, }