Skip to main content

Python Passwordless Tokens.

Project description

pypale

(Py)thon (Pa)ssword(le)ss Tokens.

pip install pypale

Usage

from pypale import Pypale

token_ttl_minutes = 14 * 24 * 60        # 2 weeks
token_issue_ttl_seconds = 2 * 60 * 60   # 2 hours
base_url = "mydomain.com"
secret_key = "loadthisfromyoursecretsmanager"

pypale = Pypale(
    base_url=base_url,
    secret_key=secret_key,
    token_ttl_minutes=token_ttl_minutes,
    token_issue_ttl_seconds=token_issue_ttl_seconds)

email = "jane.doe@example.com"
token = pypale.generate_token(email)
assert pypale.valid_token(token, email)

An example with SendGrid

# send an email with a magic login link to "jane.doe@example.com"
import sendgrid
from sendgrid.helpers.mail import Content, Email, Mail, To

email = "jane.doe@example.com"
token = pypale.generate_token(email)
link = f"https://mydomain.com/link_login/?code={token}"
sg = sendgrid.SendGridAPIClient(api_key=your_sendgrid_api_key)
from_email = Email("bob@mydomain.co")
to_email = To(email)
subject = "Hello!"
content = Content(
            "text/html", f"Click this <a href={link}>link</a> to log in.")
mail = Mail(from_email, to_email, subject, content)
response = self.sg.client.mail.send.post(request_body=mail.get())
print (response)

# in your link_login route, mentioned in the link var above,
# make sure to call pypale.validate_token with the token and
# properly handle valid and invalid tokens.
# for example ...

def link_login(code: str):
    if not pypale.valid_token(code):
        raise Exception("Invalid login.")
    access_token = base64.b64decode(code).decode("utf8")
    return {
        "access_token": base64.b64decode(code).decode("utf8"),
        "token_type": "bearer"
    }

Contributions & Suggestions

Pull requests and issues are very welcome!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypale-0.1.2.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

pypale-0.1.2-py3-none-any.whl (3.9 kB view details)

Uploaded Python 3

File details

Details for the file pypale-0.1.2.tar.gz.

File metadata

  • Download URL: pypale-0.1.2.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for pypale-0.1.2.tar.gz
Algorithm Hash digest
SHA256 b455f18f008f078f6305dbf8178baa6c58ee480d3a98dc104a4d4ef5bc841f05
MD5 e17e811862d60a9caf8e1f78e1e1621a
BLAKE2b-256 30ef47246a595591c0a88af5557c1ac248b60a5bdadf772ba6404284642e4053

See more details on using hashes here.

File details

Details for the file pypale-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pypale-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 3.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for pypale-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2710fbbb2a6e93ff220c8dcca3e338b66230252bcbe38c67b6f53db8b0ce36ca
MD5 510823902c95616ea8acf7508c771561
BLAKE2b-256 779447fe3ac1c09e0a4a5f8cd5c54e36c399f195d8588ec75de47bec4cd9a6b3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page