UNPKG

dl

Version:

DreamLab Libs

175 lines (143 loc) 6.42 kB
var Core = require('core'); var Request = Core.http.Request; var BinaryData = Core.data.BinaryData; var OnetHeadersFilter = function () {}; OnetHeadersFilter.filter = function (req, res) { var method = req.getMethod(), statusCode = res.getStatusCode(), contentType = res.getHeader('content-type'), cacheControl = res.getHeader('cache-control'), expires = res.getHeader('expires'), pragma = res.getHeader('pragma'), body = res.getBody(), nowDate = new Date().toUTCString(), yearBackDate = new Date(), nowPlus7Days = new Date(), nType = false; yearBackDate.setDate(yearBackDate.getDate() - 365); yearBackDate = yearBackDate.toUTCString(); nowPlus7Days.setDate(nowPlus7Days.getDate() + 7); nowPlus7Days = nowPlus7Days.toUTCString(); // typy dla ktorych cachujemy wewnatrz onetu // ale do klienta zwracamy ze nie wolno cachowac if (contentType) { nType = contentType.indexOf('html') > -1 || contentType.indexOf('xml') > -1 || contentType.indexOf('json') > -1 || contentType.indexOf('text/plain') > -1; } // ustawiam domyslny charset dla stron typu nType if (contentType && nType && res.getCharset() == null) { res.setHeader( 'content-type', contentType + '; charset=' + OnetHeadersFilter.CHARSET, true ); contentType = res.getHeader('content-type'); } // ustawiam domyslny date if (res.getHeader('date') == null) { res.setHeader('date', nowDate, true); } // zawsze nadpisuje naglowek server res.setHeader('server', OnetHeadersFilter.SERVER, true); /* TODO: wylaczone do czasu przeniesienia isDevelView if (req.isDevelView()) { // jezeli jest wlaczone devel view albo status jest inny niz 200 OK res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); } else if (!statusCode) {*/ if (!statusCode) { res.setStatusCode(503); res.setBody(new BinaryData( OnetHeadersFilter.E503_MSG, BinaryData.Encoding.TEXT, BinaryData.CharacterEncoding.UTF8 )); res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); res.setHeader('retry-after', '4', true); } else if (statusCode == 503) { res.setBody(new BinaryData( OnetHeadersFilter.E503_MSG, BinaryData.Encoding.TEXT, BinaryData.CharacterEncoding.UTF8 )); res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); res.setHeader('retry-after', '4', true); } else if (statusCode != 200) { res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); } else if (!body || body.length() < 1) { // obsluga pustych stron res.setStatusCode(503); res.setBody(new BinaryData( OnetHeadersFilter.E503_MSG, BinaryData.Encoding.TEXT, BinaryData.CharacterEncoding.UTF8 )); res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); res.setHeader('retry-after', '4', true); } else if (method == Request.POST) { if (nType && cacheControl == 'server') { res.setHeader('cache-control', 'private', true); } else { res.setHeader('cache-control', 'no-cache', true); } res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); } else if (method == Request.GET) { if (nType && cacheControl == 'server') { res.setHeader('cache-control', 'max-age=120', true); res.setHeader('expires', yearBackDate, true); res.setHeader('x-onet-squid', 'SP/1', true); res.removeHeader('pragma'); } else if (nType) { res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); } else if (cacheControl == 'server') { res.setHeader('cache-control', 'max-age=3600', true); res.setHeader('expires', nowPlus7Days, true); res.removeHeader('x-onet-squid'); // przekazuje pragma takie jak bylo } else if (!cacheControl || cacheControl == 'no-cache') { res.setHeader('cache-control', 'no-cache', true); res.setHeader('expires', yearBackDate, true); res.removeHeader('x-onet-squid'); res.setHeader('pragma', 'no-cache', true); } else { // przekazuje cache-control takie jak bylo if (!expires) { res.setHeader('expires', yearBackDate, true); } res.removeHeader('x-onet-squid'); if (!pragma) { res.setHeader('pragma', 'no-cache', true); } } } }; OnetHeadersFilter.SERVER = 'edgeserver'; OnetHeadersFilter.E503_MSG = '<html><head><title>Operacja w toku</title><me' + 'ta http-equiv=Refresh content=4><meta http-equiv=Content-Type content=' + '"text/html; charset=iso-8859-2"></head><body style="cursor: wait"><fon' + 't face="verdana, arial, geneva, helvetica, lucida, sans-serif" size=2 ' + 'style="font-size: 12px">Trwa laczenie z serwerem, prosze czekac...</fo' + 'nt></body></html>'; OnetHeadersFilter.CHARSET = 'utf8'; exports.OnetHeadersFilter = OnetHeadersFilter;