47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var parse = require('url-parse');
 | |
| 
 | |
| /**
 | |
|  * Transform an URL to a valid origin value.
 | |
|  *
 | |
|  * @param {String|Object} url URL to transform to it's origin.
 | |
|  * @returns {String} The origin.
 | |
|  * @api public
 | |
|  */
 | |
| function origin(url) {
 | |
|   if ('string' === typeof url) url = parse(url);
 | |
| 
 | |
|   //
 | |
|   // 6.2.  ASCII Serialization of an Origin
 | |
|   // http://tools.ietf.org/html/rfc6454#section-6.2
 | |
|   //
 | |
|   if (!url.protocol || !url.hostname) return 'null';
 | |
| 
 | |
|   //
 | |
|   // 4. Origin of a URI
 | |
|   // http://tools.ietf.org/html/rfc6454#section-4
 | |
|   //
 | |
|   // States that url.scheme, host should be converted to lower case. This also
 | |
|   // makes it easier to match origins as everything is just lower case.
 | |
|   //
 | |
|   return (url.protocol +'//'+ url.host).toLowerCase();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Check if the origins are the same.
 | |
|  *
 | |
|  * @param {String} a URL or origin of a.
 | |
|  * @param {String} b URL or origin of b.
 | |
|  * @returns {Boolean}
 | |
|  * @api public
 | |
|  */
 | |
| origin.same = function same(a, b) {
 | |
|   return origin(a) === origin(b);
 | |
| };
 | |
| 
 | |
| //
 | |
| // Expose the origin
 | |
| //
 | |
| module.exports = origin;
 |