mirror of
				https://github.com/reality/dbot.git
				synced 2025-11-04 06:37:43 +01:00 
			
		
		
		
	Added in URL support for the web interface.
The Jade templating code in `views/quotes.jade` will now check against the Regular Expression which has been added to `snippets.js` and is delivered to the template by `modules/web.js`. The reguar expression used should be able to handle any URL and ensure no non-URL elements are made into URLs. It may be worth adding checking for 4XX error codes at a later date. This shouldn't affect any of the other modules; features have only been added, not modified.
This commit is contained in:
		
							parent
							
								
									cb6568d27d
								
							
						
					
					
						commit
						52cdddf3f7
					
				@ -24,13 +24,13 @@ var webInterface = function(dbot) {
 | 
			
		||||
        // Lists the quotes in a category
 | 
			
		||||
        var key = req.params.key.toLowerCase();
 | 
			
		||||
        if(dbot.db.quoteArrs.hasOwnProperty(key)) {
 | 
			
		||||
            res.render('quotes', { 'quotes': dbot.db.quoteArrs[key]});
 | 
			
		||||
            res.render('quotes', { 'quotes': dbot.db.quoteArrs[key], locals: {url_regex: RegExp.prototype.url_regex()}});
 | 
			
		||||
        } else {
 | 
			
		||||
            res.render('error', { 'message': 'No quotes under that key.' });
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    app.listen(443);
 | 
			
		||||
    app.listen(9443);
 | 
			
		||||
 | 
			
		||||
    return { 
 | 
			
		||||
        'onDestroy': function() {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										41
									
								
								snippets.js
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								snippets.js
									
									
									
									
									
								
							@ -122,3 +122,44 @@ Number.prototype.chanceIn = function(x, y) {
 | 
			
		||||
    var num = Math.floor(Math.random() * (y + 1)) / x;
 | 
			
		||||
    return num == 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*** Regex ***/
 | 
			
		||||
RegExp.prototype.url_regex = function() {
 | 
			
		||||
    var reg = new RegExp(
 | 
			
		||||
       "^" +
 | 
			
		||||
       // protocol identifier
 | 
			
		||||
       "(?:(?:https?|ftp)://)" +
 | 
			
		||||
       // user:pass authentication
 | 
			
		||||
       "(?:\\S+(?::\\S*)?@)?" +
 | 
			
		||||
       "(?:" +
 | 
			
		||||
       // IP address exclusion
 | 
			
		||||
       // private & local networks
 | 
			
		||||
       "(?!10(?:\\.\\d{1,3}){3})" +
 | 
			
		||||
       "(?!127(?:\\.\\d{1,3}){3})" +
 | 
			
		||||
       "(?!169\\.254(?:\\.\\d{1,3}){2})" +
 | 
			
		||||
       "(?!192\\.168(?:\\.\\d{1,3}){2})" +
 | 
			
		||||
       "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})" +
 | 
			
		||||
       // IP address dotted notation octets
 | 
			
		||||
       // excludes loopback network 0.0.0.0
 | 
			
		||||
       // excludes reserved space >= 224.0.0.0
 | 
			
		||||
       // excludes network & broacast addresses
 | 
			
		||||
       // (first & last IP address of each class)
 | 
			
		||||
       "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
 | 
			
		||||
       "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
 | 
			
		||||
       "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" +
 | 
			
		||||
       "|" +
 | 
			
		||||
       // host name
 | 
			
		||||
       "(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)" +
 | 
			
		||||
       // domain name
 | 
			
		||||
       "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*" +
 | 
			
		||||
       // TLD identifier
 | 
			
		||||
       "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" +
 | 
			
		||||
       ")" +
 | 
			
		||||
       // port number
 | 
			
		||||
       "(?::\\d{2,5})?" +
 | 
			
		||||
       // resource path
 | 
			
		||||
        "(?:/[^\\s]*)?" +
 | 
			
		||||
        "$", "i"
 | 
			
		||||
    );
 | 
			
		||||
    return reg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,7 @@
 | 
			
		||||
div#quotelist
 | 
			
		||||
    -each quote in quotes
 | 
			
		||||
        div.quote #{quote}
 | 
			
		||||
        -if(quote.match(locals.url_regex))
 | 
			
		||||
            div.quote 
 | 
			
		||||
                a(href=quote)=quote
 | 
			
		||||
        -else
 | 
			
		||||
            div.quote #{quote}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user