2020-05-10 11:41:43 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# frozen_string_literal: true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-09 17:26:58 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# Monkey-patch on monkey-patch. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# Because it conflicts with the request.rb patch. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								class  HTTP :: Timeout :: PerOperationOriginal  <  HTTP :: Timeout :: PerOperation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  connect ( socket_class ,  host ,  port ,  nodelay  =  false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    :: Timeout . timeout ( @connect_timeout ,  HTTP :: TimeoutError )  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @socket  =  socket_class . open ( host ,  port ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @socket . setsockopt ( Socket :: IPPROTO_TCP ,  Socket :: TCP_NODELAY ,  1 )  if  nodelay 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-10 11:41:43 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								module  WebfingerHelper 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  webfinger! ( uri ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    hidden_service_uri  =  / \ .(onion|i2p)(: \ d+)?$ / . match ( uri ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    raise  Mastodon :: HostValidationError ,  'Instance does not support hidden service connections'  if  ! Rails . configuration . x . access_to_hidden_service  &&  hidden_service_uri 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    opts  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ssl :  ! hidden_service_uri , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      headers :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        'User-Agent' :  Mastodon :: Version . user_agent , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-09 17:26:58 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      timeout_class :  HTTP :: Timeout :: PerOperationOriginal , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      timeout_options :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        write_timeout :  10 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        connect_timeout :  5 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        read_timeout :  10 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-10 11:41:43 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Goldfinger :: Client . new ( uri ,  opts . merge ( Rails . configuration . x . http_client_proxy ) ) . finger 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								end