mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 21:02:26 -05:00 
			
		
		
		
	[feature] add TOTP two-factor authentication (2FA) (#3960)
* [feature] add TOTP two-factor authentication (2FA) * use byteutil.S2B to avoid allocations when comparing + generating password hashes * don't bother with string conversion for consts * use io.ReadFull * use MustGenerateSecret for backup codes * rename util functions
This commit is contained in:
		
					parent
					
						
							
								6f24205a26
							
						
					
				
			
			
				commit
				
					
						365b575341
					
				
			
		
					 78 changed files with 5593 additions and 825 deletions
				
			
		
							
								
								
									
										35
									
								
								vendor/github.com/pquerna/otp/internal/encode.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/pquerna/otp/internal/encode.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| package internal | ||||
| 
 | ||||
| import ( | ||||
| 	"net/url" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // EncodeQuery is a copy-paste of url.Values.Encode, except it uses %20 instead | ||||
| // of + to encode spaces. This is necessary to correctly render spaces in some | ||||
| // authenticator apps, like Google Authenticator. | ||||
| func EncodeQuery(v url.Values) string { | ||||
| 	if v == nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	var buf strings.Builder | ||||
| 	keys := make([]string, 0, len(v)) | ||||
| 	for k := range v { | ||||
| 		keys = append(keys, k) | ||||
| 	} | ||||
| 	sort.Strings(keys) | ||||
| 	for _, k := range keys { | ||||
| 		vs := v[k] | ||||
| 		keyEscaped := url.PathEscape(k) // changed from url.QueryEscape | ||||
| 		for _, v := range vs { | ||||
| 			if buf.Len() > 0 { | ||||
| 				buf.WriteByte('&') | ||||
| 			} | ||||
| 			buf.WriteString(keyEscaped) | ||||
| 			buf.WriteByte('=') | ||||
| 			buf.WriteString(url.PathEscape(v)) // changed from url.QueryEscape | ||||
| 		} | ||||
| 	} | ||||
| 	return buf.String() | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue