mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 23:42:26 -06:00 
			
		
		
		
	
		
			
	
	
		
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2011 The Go Authors. All rights reserved.
							 | 
						||
| 
								 | 
							
								// Use of this source code is governed by a BSD-style
							 | 
						||
| 
								 | 
							
								// license that can be found in the LICENSE file.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								package proxy
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"context"
							 | 
						||
| 
								 | 
							
									"net"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"golang.org/x/net/internal/socks"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given
							 | 
						||
| 
								 | 
							
								// address with an optional username and password.
							 | 
						||
| 
								 | 
							
								// See RFC 1928 and RFC 1929.
							 | 
						||
| 
								 | 
							
								func SOCKS5(network, address string, auth *Auth, forward Dialer) (Dialer, error) {
							 | 
						||
| 
								 | 
							
									d := socks.NewDialer(network, address)
							 | 
						||
| 
								 | 
							
									if forward != nil {
							 | 
						||
| 
								 | 
							
										if f, ok := forward.(ContextDialer); ok {
							 | 
						||
| 
								 | 
							
											d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) {
							 | 
						||
| 
								 | 
							
												return f.DialContext(ctx, network, address)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) {
							 | 
						||
| 
								 | 
							
												return dialContext(ctx, forward, network, address)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if auth != nil {
							 | 
						||
| 
								 | 
							
										up := socks.UsernamePassword{
							 | 
						||
| 
								 | 
							
											Username: auth.User,
							 | 
						||
| 
								 | 
							
											Password: auth.Password,
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										d.AuthMethods = []socks.AuthMethod{
							 | 
						||
| 
								 | 
							
											socks.AuthMethodNotRequired,
							 | 
						||
| 
								 | 
							
											socks.AuthMethodUsernamePassword,
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										d.Authenticate = up.Authenticate
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return d, nil
							 | 
						||
| 
								 | 
							
								}
							 |