server.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. var http = require('http')
  2. var iconv = require('iconv-lite')
  3. module.exports = () => new Promise((resolve, reject) => {
  4. var autoreload = {index: 0, content: '你好'}
  5. server = http.createServer()
  6. server.on('request', (req, res) => {
  7. // content-type
  8. if (/wrong-content-type/.test(req.url)) {
  9. res.setHeader('Content-Type', 'text/plain')
  10. res.end('**bold**')
  11. }
  12. else if (/correct-content-type/.test(req.url)) {
  13. res.setHeader('Content-Type', 'text/markdown')
  14. res.end('**bold**')
  15. }
  16. else if (/correct-content-type-variation/.test(req.url)) {
  17. res.setHeader('Content-Type', 'text/x-markdown')
  18. res.end('**bold**')
  19. }
  20. // popup options
  21. else if (/compiler-options-marked/.test(req.url)) {
  22. res.setHeader('Content-Type', 'text/x-markdown')
  23. res.end('~~strikethrough~~')
  24. }
  25. else if (/compiler-options-remark/.test(req.url)) {
  26. res.setHeader('Content-Type', 'text/x-markdown')
  27. res.end('- [ ] task')
  28. }
  29. else if (/content-options-toc/.test(req.url)) {
  30. res.setHeader('Content-Type', 'text/markdown')
  31. res.end('# h1\n# h2\n# h3')
  32. }
  33. else if (/content-options-scroll/.test(req.url)) {
  34. res.setHeader('Content-Type', 'text/markdown')
  35. res.end([
  36. '# h1',
  37. Array(500).fill('lorem ipsum').join(' '),
  38. '## h2',
  39. Array(500).fill('lorem ipsum').join(' '),
  40. '### h3',
  41. Array(500).fill('lorem ipsum').join(' '),
  42. ].join('\n\n'))
  43. }
  44. else if (/popup-autoreload/.test(req.url)) {
  45. if (/preventCache/.test(req.url)) {
  46. autoreload.index++
  47. }
  48. if (autoreload.index === 3) {
  49. autoreload.content = '你好你好'
  50. }
  51. else if (autoreload.index === 5) {
  52. autoreload.content = '你好你好你好'
  53. }
  54. res.setHeader('Content-Type', 'text/markdown')
  55. res.end(iconv.encode(autoreload.content, 'big5'))
  56. }
  57. // csp
  58. else if (/csp-match-header/.test(req.url)) {
  59. res.setHeader('Content-Security-Policy',
  60. `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
  61. res.setHeader('Content-Type', 'text/markdown')
  62. res.end('# h1')
  63. }
  64. else if (/csp-match-path/.test(req.url)) {
  65. res.setHeader('Content-Security-Policy',
  66. `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
  67. res.end('# h1')
  68. }
  69. else if (/csp-no-header-no-path/.test(req.url)) {
  70. res.setHeader('Content-Security-Policy',
  71. `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
  72. res.end('# h1')
  73. }
  74. // encoding
  75. else if (/encoding-no-content-type/.test(req.url)) {
  76. res.end(iconv.encode('你好', 'big5'))
  77. }
  78. else if (/encoding-no-charset/.test(req.url)) {
  79. res.setHeader('Content-Type', 'text/markdown')
  80. res.end(iconv.encode('你好', 'big5'))
  81. }
  82. else if (/encoding-wrong-charset/.test(req.url)) {
  83. res.setHeader('Content-Type', 'text/markdown; charset=UTF-8')
  84. res.end(iconv.encode('здрасти', 'win1251'))
  85. }
  86. })
  87. server.listen(3000, () => resolve(server))
  88. })