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.4.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

pypale-0.1.4-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pypale-0.1.4.tar.gz
Algorithm Hash digest
SHA256 91596d617eaf8e62700a031395f83398712da15611eff2a325135bc4310b513f
MD5 ad3f9decdd3bcd311cccc38b7b842ae6
BLAKE2b-256 e6a331d80e2d2f35f7c185c187194efa3e0c19d2d318099f7230809895cf9ced

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypale-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2214ecdad5b448c222580172483592f9dbfc36430a47b9d3e9c36e43a9a888ae
MD5 ac80f984a5dc01e89dd044042889d96b
BLAKE2b-256 70bfd9a4b519b6746d4bbf465c48ece401469b18ccfcf66cee24c67225a1f388

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