Skip to content

Commit 03ca0cb

Browse files
author
deiu
committed
Added function negotiateContentType(); Fixed conneg; Fixed quotes for rel values
1 parent 6c15084 commit 03ca0cb

1 file changed

Lines changed: 33 additions & 18 deletions

File tree

lib/header.js

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ var li = require('li');
22

33
var path = require('path');
44
var S = require('string');
5+
var Negotiator = require('negotiator');
56
var metadata = require('./metadata.js');
67
var utils = require('./utils.js');
78
var ldpVocab = require('./vocab/ldp.js');
89

910
function addLink(res, value, rel) {
1011
var oldLink = res.get('Link');
1112
if (oldLink === undefined)
12-
res.set('Link', '<' + value + '>; rel=\'' + rel + '\'');
13+
res.set('Link', '<' + value + '>; rel="' + rel + '"');
1314
else
1415
res.set('Link', oldLink + ', ' + '<' + value +
15-
'>; rel=\'' + rel + '\'');
16+
'>; rel="' + rel + '"');
1617
}
1718

1819
function addLinks(res, fileMetadata) {
@@ -74,25 +75,38 @@ function parseMetadataFromHeader(linkHeader) {
7475
return fileMetadata;
7576
}
7677

77-
function parseAcceptHeader(req) {
78+
79+
// Returns an array containing mime types from Accept header, ordered by priority
80+
// If no Accept value, serve turtle by default
81+
function negotiateContentType(req) {
82+
var negotiator = new Negotiator(req);
83+
return negotiator.mediaTypes();
84+
}
85+
86+
function parseAcceptRDFHeader(req) {
7887
var acceptFinalValue;
79-
var acceptHeader = req.get('Accept');
80-
if (acceptHeader === undefined) {
88+
var acceptHeader = negotiateContentType(req);
89+
if (acceptHeader === undefined || acceptHeader.length === 0) {
8190
acceptFinalValue = undefined;
8291
} else {
83-
switch (acceptHeader) {
84-
case 'text/turtle':
85-
case 'applicatoin/x-turtle':
86-
case 'text/n3':
87-
case 'application/rdf+xml':
88-
case 'application/n3':
89-
case 'application/json+ld':
90-
case 'application/nquads':
91-
case 'application/n-quads':
92-
acceptFinalValue = acceptHeader;
92+
for (var i in acceptHeader) {
93+
switch (acceptHeader[i]) {
94+
case 'text/turtle':
95+
case 'application/x-turtle':
96+
case 'text/n3':
97+
case 'application/rdf+xml':
98+
case 'application/n3':
99+
case 'application/ld+json':
100+
case 'application/nquads':
101+
case 'application/n-quads':
102+
acceptFinalValue = acceptHeader[i];
103+
break;
104+
default:
105+
acceptFinalValue = undefined;
106+
}
107+
if (acceptFinalValue !== undefined) {
93108
break;
94-
default:
95-
acceptFinalValue = undefined;
109+
}
96110
}
97111
}
98112
return acceptFinalValue;
@@ -101,5 +115,6 @@ function parseAcceptHeader(req) {
101115
module.exports.addLink = addLink;
102116
module.exports.addLinks = addLinks;
103117
module.exports.parseMetadataFromHeader = parseMetadataFromHeader;
104-
module.exports.parseAcceptHeader = parseAcceptHeader;
118+
module.exports.parseAcceptRDFHeader = parseAcceptRDFHeader;
105119
module.exports.linksHandler = linksHandler;
120+
module.exports.negotiateContentType = negotiateContentType;

0 commit comments

Comments
 (0)