Adding language hint for markdown examples.
This commit is contained in:
		
							parent
							
								
									395d932f93
								
							
						
					
					
						commit
						6ad513fa31
					
				
							
								
								
									
										157
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										157
									
								
								README.md
									
									
									
									
									
								
							| @ -7,102 +7,103 @@ Go library for generating and using One Time Passwords. Supports both HOTP ([RFC | ||||
| ## Examples | ||||
| 
 | ||||
| ### OTP Server | ||||
| ```go | ||||
| import ( | ||||
|   "dev.justinjudd.org/justin/otp" | ||||
| ) | ||||
| 
 | ||||
|     import ( | ||||
|       "dev.justinjudd.org/justin/otp" | ||||
|     ) | ||||
| var Issuer = "example.com" | ||||
| 
 | ||||
|     var Issuer = "example.com" | ||||
| func CreateKeyForUser(user string) { | ||||
| 
 | ||||
|     func CreateKeyForUser(user string) { | ||||
|   opts := otp.NewHOTPKeyOptions() | ||||
|   opts.Issuer = Issuer | ||||
|   opts.Label = user | ||||
|   key := otp.NewHOTPKey(opts) | ||||
| 
 | ||||
|       opts := otp.NewHOTPKeyOptions() | ||||
|       opts.Issuer = Issuer | ||||
|       opts.Label = user | ||||
|       key := otp.NewHOTPKey(opts) | ||||
|   keyURL := key.URL() | ||||
|   Store(user, keyURL) | ||||
| 
 | ||||
|       keyURL := key.URL() | ||||
|       Store(user, keyURL) | ||||
|   // Provide the URL to the customer so they can include it in their 2FA client. | ||||
|   // Can email URL, or present QR code encoding of the URL | ||||
| } | ||||
| 
 | ||||
|       // Provide the URL to the customer so they can include it in their 2FA client. | ||||
|       // Can email URL, or present QR code encoding of the URL | ||||
| // Store this string variable in your database | ||||
| func Store(user, url string) { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // Retrieve the url string variable from your database | ||||
| func GetURL(user string) string { | ||||
|   return "" | ||||
| } | ||||
| 
 | ||||
| func CheckUsersCode(user string, code string) (bool, error) { | ||||
|   keyURL := GetURL(user) | ||||
| 
 | ||||
|   key, err := otp.FromURL(keyURL) | ||||
|   if err != nil { | ||||
|     return false, err | ||||
|   } | ||||
| 
 | ||||
|   // Ensure you are using the correct key | ||||
|   if key.Label() != user { | ||||
|     return false, nil | ||||
|   } | ||||
| 
 | ||||
|   success := key.Verify(code) | ||||
| 
 | ||||
|   // Counter has been updated, update this info in the database | ||||
|   // Don't need this step for TOTP keys as the counter is time-based | ||||
|   keyURL = key.URL() | ||||
| 
 | ||||
|   return success, nil | ||||
|     } | ||||
| 
 | ||||
|     // Store this string variable in your database | ||||
|     func Store(user, url string) { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     // Retrieve the url string variable from your database | ||||
|     func GetURL(user string) string { | ||||
|       return "" | ||||
|     } | ||||
| 
 | ||||
|     func CheckUsersCode(user string, code string) (bool, error) { | ||||
|       keyURL := GetURL(user) | ||||
| 
 | ||||
|       key, err := otp.FromURL(keyURL) | ||||
|       if err != nil { | ||||
|         return false, err | ||||
|       } | ||||
| 
 | ||||
|       // Ensure you are using the correct key | ||||
|       if key.Label() != user { | ||||
|         return false, nil | ||||
|       } | ||||
| 
 | ||||
|       success := key.Verify(code) | ||||
| 
 | ||||
|       // Counter has been updated, update this info in the database | ||||
|       // Don't need this step for TOTP keys as the counter is time-based | ||||
|       keyURL = key.URL() | ||||
| 
 | ||||
|       return success, nil | ||||
|     } | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| ### OTP Client | ||||
| ```go | ||||
| import ( | ||||
|   "dev.justinjudd.org/justin/otp" | ||||
| ) | ||||
| 
 | ||||
|     import ( | ||||
|       "dev.justinjudd.org/justin/otp" | ||||
|     ) | ||||
| 
 | ||||
|     // Just an example for storing OTP keys on the client | ||||
|     var keys map[Key]string | ||||
| // Just an example for storing OTP keys on the client | ||||
| var keys map[Key]string | ||||
| 
 | ||||
| 
 | ||||
|     // Key is used as keys for the otp key storing map | ||||
|     type Key struct { | ||||
|     	Issuer, Label string | ||||
|     } | ||||
| // Key is used as keys for the otp key storing map | ||||
| type Key struct { | ||||
| 	Issuer, Label string | ||||
| } | ||||
| 
 | ||||
|     func GetCode(issuer, username string) (string, error) { | ||||
| func GetCode(issuer, username string) (string, error) { | ||||
| 
 | ||||
|       mapKey := Key{issuer, username} | ||||
|   mapKey := Key{issuer, username} | ||||
| 
 | ||||
|       // Get the stored Key URL | ||||
|       keyURL, ok := keys[mapKey] | ||||
|       if !ok { | ||||
|         return "", nil | ||||
|       } | ||||
|   // Get the stored Key URL | ||||
|   keyURL, ok := keys[mapKey] | ||||
|   if !ok { | ||||
|     return "", nil | ||||
|   } | ||||
| 
 | ||||
|       // Build the key from the URL | ||||
|       key, err := otp.FromURL(keyURL) | ||||
|       if err != nil { | ||||
|         return "", err | ||||
|       } | ||||
|   // Build the key from the URL | ||||
|   key, err := otp.FromURL(keyURL) | ||||
|   if err != nil { | ||||
|     return "", err | ||||
|   } | ||||
| 
 | ||||
|       // Verify Issuer and Label are correct | ||||
|       if key.Issuer() != issuer || key.Label() != username { | ||||
|         return "", nil | ||||
|       } | ||||
|   // Verify Issuer and Label are correct | ||||
|   if key.Issuer() != issuer || key.Label() != username { | ||||
|     return "", nil | ||||
|   } | ||||
| 
 | ||||
|       code := key.OTP() | ||||
|   code := key.OTP() | ||||
| 
 | ||||
|       // If using HOTP, than need to save the state | ||||
|       keyURL = key.URL() | ||||
|       keys[mapKey]= keyURL | ||||
|   // If using HOTP, than need to save the state | ||||
|   keyURL = key.URL() | ||||
|   keys[mapKey]= keyURL | ||||
| 
 | ||||
|       return code, nil | ||||
|     } | ||||
|   return code, nil | ||||
| } | ||||
| ``` | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Justin Judd
						Justin Judd