- On Frontend
- User clicks Login With GithubButton.
- We redirect user to https://github.com/login/oauth/authorizewithclient_id,redirect_uriandscopeas query params.
- Example
https://github.com/login/oauth/authorize?scope=user:email&client_id=<CLIENT_ID>&state=<state>
- Once user allows access github redirect back us to supplied redirect_uriwithcodeas query parameter.
- Example
 
- User clicks 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | def hash_data(data): | |
| ''' | |
| param: data b64encoded data | |
| return: SHA256 base64 encoded hash | |
| ''' | |
| from base64 import b64decode | |
| from Crypto.Hash import SHA256 | |
| hashed_data = SHA256.new() | |
| hashed_data.update(b64decode(data)) | |
| return hashed_data | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | def generate_RSA(bits=2048): | |
| ''' | |
| Generate an RSA keypair with an exponent of 65537 in PEM format | |
| param: bits The key length in bits | |
| Return private key and public key | |
| ''' | |
| from Crypto.PublicKey import RSA | |
| new_key = RSA.generate(bits, e=65537) | |
| public_key = new_key.publickey().exportKey("PEM") | |
| private_key = new_key.exportKey("PEM") | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | def verify_sign(public_key, signature, hashed_data): | |
| ''' | |
| Verifies with a public key from whom the data came that it was indeed | |
| signed by their private key | |
| param: public_key | |
| param: signature String signature to be verified | |
| return: Boolean. True if the signature is valid; False otherwise. | |
| ''' | |
| from Crypto.PublicKey import RSA | |
| from Crypto.Signature import PKCS1_v1_5 | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | def sign_data(private_key, hashed_data): | |
| ''' | |
| param: private_key | |
| param: hashed_data SHA256 hash of data to be signed | |
| return: base64 encoded signature | |
| ''' | |
| from Crypto.PublicKey import RSA | |
| from Crypto.Signature import PKCS1_v1_5 | |
| from base64 import b64encode | |
| key = private_key | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | Here is a list of scopes to use in Sublime Text 2 snippets - | |
| ActionScript: source.actionscript.2 | |
| AppleScript: source.applescript | |
| ASP: source.asp | |
| Batch FIle: source.dosbatch | |
| C#: source.cs | |
| C++: source.c++ | |
| Clojure: source.clojure | |
| CoffeeScript: source.coffee | 
NewerOlder