Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / karma / lib / middleware / common.js
1 /**
2  * This module contains some common helpers shared between middlewares
3  */
4
5 var mime = require('mime')
6 var log = require('../logger').create('web-server')
7
8 var PromiseContainer = function () {
9   var promise
10
11   this.then = function (success, error) {
12     return promise.then(success, error)
13   }
14
15   this.set = function (newPromise) {
16     promise = newPromise
17   }
18 }
19
20 var serve404 = function (response, path) {
21   log.warn('404: ' + path)
22   response.writeHead(404)
23   return response.end('NOT FOUND')
24 }
25
26 var createServeFile = function (fs, directory) {
27   var cache = Object.create(null)
28
29   return function (filepath, response, transform, content) {
30     var responseData
31
32     if (directory) {
33       filepath = directory + filepath
34     }
35
36     if (!content && cache[filepath]) {
37       content = cache[filepath]
38     }
39
40     // serve from cache
41     if (content) {
42       response.setHeader('Content-Type', mime.lookup(filepath, 'text/plain'))
43
44       // call custom transform fn to transform the data
45       responseData = transform && transform(content) || content
46
47       response.writeHead(200)
48
49       log.debug('serving (cached): ' + filepath)
50       return response.end(responseData)
51     }
52
53     return fs.readFile(filepath, function (error, data) {
54       if (error) {
55         return serve404(response, filepath)
56       }
57
58       cache[filepath] = data.toString()
59
60       response.setHeader('Content-Type', mime.lookup(filepath, 'text/plain'))
61
62       // call custom transform fn to transform the data
63       responseData = transform && transform(data.toString()) || data
64
65       response.writeHead(200)
66
67       log.debug('serving: ' + filepath)
68       return response.end(responseData)
69     })
70   }
71 }
72
73 var setNoCacheHeaders = function (response) {
74   response.setHeader('Cache-Control', 'no-cache')
75   response.setHeader('Pragma', 'no-cache')
76   response.setHeader('Expires', (new Date(0)).toString())
77 }
78
79 var setHeavyCacheHeaders = function (response) {
80   response.setHeader('Cache-Control', ['public', 'max-age=31536000'])
81 }
82
83 // PUBLIC API
84 exports.PromiseContainer = PromiseContainer
85 exports.createServeFile = createServeFile
86 exports.setNoCacheHeaders = setNoCacheHeaders
87 exports.setHeavyCacheHeaders = setHeavyCacheHeaders
88 exports.serve404 = serve404