@@ -2,17 +2,18 @@ var li = require('li');
22
33var path = require ( 'path' ) ;
44var S = require ( 'string' ) ;
5+ var Negotiator = require ( 'negotiator' ) ;
56var metadata = require ( './metadata.js' ) ;
67var utils = require ( './utils.js' ) ;
78var ldpVocab = require ( './vocab/ldp.js' ) ;
89
910function 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
1819function 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) {
101115module . exports . addLink = addLink ;
102116module . exports . addLinks = addLinks ;
103117module . exports . parseMetadataFromHeader = parseMetadataFromHeader ;
104- module . exports . parseAcceptHeader = parseAcceptHeader ;
118+ module . exports . parseAcceptRDFHeader = parseAcceptRDFHeader ;
105119module . exports . linksHandler = linksHandler ;
120+ module . exports . negotiateContentType = negotiateContentType ;
0 commit comments