The "ends_with?" method is just a Rails alias of Ruby's "end_with?" method. Using the latter makes the code less brittle.
		
			
				
	
	
		
			25 lines
		
	
	
	
		
			656 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
	
		
			656 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module ActionDispatch
 | |
|   module CookieJarExtensions
 | |
|     private
 | |
| 
 | |
|     # Monkey-patch ActionDispatch to serve secure cookies to Tor Hidden Service
 | |
|     # users. Otherwise, ActionDispatch would drop the cookie over HTTP.
 | |
|     def write_cookie?(*)
 | |
|       request.host.end_with?('.onion') || super
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| ActionDispatch::Cookies::CookieJar.prepend(ActionDispatch::CookieJarExtensions)
 | |
| 
 | |
| module Rack
 | |
|   module SessionPersistedExtensions
 | |
|     def security_matches?(request, options)
 | |
|       request.host.end_with?('.onion') || super
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| Rack::Session::Abstract::Persisted.prepend(Rack::SessionPersistedExtensions)
 |