Skip to content

Commit

Permalink
Merge branch 'master' into dependabot/pip/flake8-6.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
ludeeus authored May 14, 2024
2 parents eaa545d + e1d7ec2 commit 6cd2f1f
Show file tree
Hide file tree
Showing 17 changed files with 533 additions and 118 deletions.
41 changes: 41 additions & 0 deletions .devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"name": "pycognito dev",
"image": "mcr.microsoft.com/vscode/devcontainers/python:0-3.8",
"postStartCommand": "python3 -m pip install -e .",
"postCreateCommand": "python3 -m pip install -r requirements_test.txt tox",
"containerUser": "vscode",
"containerEnv": {
"GIT_EDITOR": "code --wait"
},
"customizations": {
"vscode": {
"extensions": [
"esbenp.prettier-vscode",
"ms-python.python",
"ms-python.vscode-pylance",
"visualstudioexptteam.vscodeintellicode"
],
"settings": {
"python.pythonPath": "/usr/local/bin/python",
"python.formatting.provider": "black",
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.formatOnType": true,
"editor.rulers": [
88
],
"editor.codeActionsOnSave": {
"source.fixAll": "always",
"source.organizeImports": "always"
},
"files.trimTrailingWhitespace": true,
"terminal.integrated.profiles.linux": {
"zsh": {
"path": "/usr/bin/zsh"
}
},
"terminal.integrated.defaultProfile.linux": "zsh"
}
}
}
}
12 changes: 0 additions & 12 deletions .devcontainer/Dockerfile

This file was deleted.

25 changes: 0 additions & 25 deletions .devcontainer/devcontainer.json

This file was deleted.

43 changes: 43 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: "Report a bug with pyCognito"
description: Report an issue with pyCognito
body:
- type: textarea
attributes:
label: The problem
placeholder: >-
Describe the issue you are experiencing here to communicate to the
maintainers. Tell us what you were trying to do and what happened.
validations:
required: true
- type: markdown
attributes:
value: |
## Environment
- type: input
attributes:
label: Operating system
validations:
required: true
- type: textarea
validations:
required: true
attributes:
label: Python version
render: txt
- type: textarea
validations:
required: true
attributes:
label: Problem-relevant code
description: >-
A minimal example to reproduce the bug
render: python
- type: textarea
attributes:
label: Traceback/Error logs
description: >-
If you come across any trace or error logs, please provide them.
render: txt
- type: textarea
attributes:
label: Additional information
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
7 changes: 6 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,10 @@ updates:
- package-ecosystem: pip
directory: "/"
schedule:
interval: daily
interval: monthly
open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: monthly
open-pull-requests-limit: 10
37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: CI

on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
tox:
runs-on: ubuntu-latest
name: Tox
strategy:
fail-fast: false
matrix:
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"

steps:
- uses: actions/checkout@v4.1.5

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5.1.0
with:
python-version: ${{ matrix.python-version }}

- name: Install tox
run: python3 -m pip install tox

- name: Run Tox
run: tox
62 changes: 45 additions & 17 deletions .github/workflows/pythonpublish.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,59 @@
# This workflows will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries

name: Upload Python Package

on:
release:
types: [published]
types:
- published

jobs:
deploy:
permissions: {}

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4.1.5

- name: Set up Python
uses: actions/setup-python@v1
uses: actions/setup-python@v5.1.0
with:
python-version: '3.x'
python-version: "3.x"

- name: Verify version
uses: home-assistant/actions/helpers/verify-version@master

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
pip install setuptools build
- name: Build
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
python -m build
- name: Upload dists
uses: actions/upload-artifact@v4.3.3
with:
name: "dist"
path: "dist/"
if-no-files-found: error
retention-days: 5

publish:
name: Upload release to PyPI
runs-on: ubuntu-latest
needs: "build"
environment:
name: release
url: https://pypi.org/p/pycognito
permissions:
id-token: write
steps:
- name: Download dists
uses: actions/download-artifact@v4.1.7
with:
name: "dist"
path: "dist/"

- name: Publish dists to PyPI
# Pinned to a commit for security purposes
uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 # v1.8.14
2 changes: 1 addition & 1 deletion .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ jobs:
update_release_draft:
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v5
- uses: release-drafter/release-drafter@v6.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31 changes: 0 additions & 31 deletions .github/workflows/test.yml

This file was deleted.

75 changes: 73 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,21 @@ Makes working with AWS Cognito easier for Python developers.
- [Respond to SMS MFA challenge](#respond-to-sms-mfa-challenge)
- [Cognito SRP Utility](#cognito-srp-utility)
- [Using AWSSRP](#using-awssrp)
- [Device Authentication Support](#device-authentication-support)
- [Receiving DeviceKey and DeviceGroupKey](#receiving-devicekey-and-devicegroupkey)
- [Confirming a Device](#confirming-a-device)
- [Updating Device Status](#updating-device-status)
- [Authenticating your Device](#authenticating-your-device)
- [Forget Device](#forget-device)
- [SRP Requests Authenticator](#srp-requests-authenticator)

## Python Versions Supported

- 3.6
- 3.7
- 3.8
- 3.9
- 3.10
- 3.11
- 3.12

## Install

Expand Down Expand Up @@ -672,6 +680,69 @@ aws = AWSSRP(username='username', password='password', pool_id='user_pool_id',
tokens = aws.authenticate_user()
```

## Device Authentication Support

You must use the `USER_SRP_AUTH` authentication flow to use the device tracking feature. Read more about [Remembered Devices](https://repost.aws/knowledge-center/cognito-user-pool-remembered-devices)

### Receiving DeviceKey and DeviceGroupKey

Once the `authenticate_user` class method is used for SRP authentication, the response also returns `DeviceKey` and `DeviceGrouKey`.
These Keys will later be used to confirm the device.

```python
import boto3
from pycognito.aws_srp import AWSSRP

client = boto3.client('cognito-idp')
aws = AWSSRP(username='username', password='password', pool_id='user_pool_id',
client_id='client_id', client=client)
tokens = aws.authenticate_user()
device_key = tokens["AuthenticationResult"]["NewDeviceMetadata"]["DeviceKey"]
device_group_key = tokens["AuthenticationResult"]["NewDeviceMetadata"]["DeviceGroupKey"]
```
### Confirming a Device

The `confirm_device` class method is used for confirming a device, it takes two inputs, `tokens` and `DeviceName` (`DeviceName` is optional).
The method returns two values, `response` and `device_password`. `device_password` will later be used to authenticate your device with
the Cognito user pool.

```python
response, device_password = user.confirm_device(tokens=tokens)
```

### Updating Device Status

The `update_device_status` class method is used to update whether or not your device should be remembered. This method takes
three inputs, `is_remembered`, `access_token` and `device_key`. `is_remembered` is a boolean value, which sets the device status as
`"remembered"` on `True` and `"not_remembered"` on `False`, `access_token` is the Access Token provided by Cognito and `device_key` is the key
provided by the `authenticate_user` method.

```python
response = user.update_device_status(False, tokens["AuthenticationResult"]["AccessToken"], device_key)
```

### Authenticating your Device

To authenticate your Device, you can just add `device_key`, `device_group_key` and `device_password` to the AWSSRP class.

```python
import boto3
from pycognito.aws_srp import AWSSRP

client = boto3.client('cognito-idp')
aws = AWSSRP(username='username', password='password', pool_id='user_pool_id',
client_id='client_id', client=client, device_key="device_key",
device_group_key="device_group_key", device_password="device_password")
tokens = aws.authenticate_user()
```
### Forget Device

To forget device, you can call the `forget_device` class method. It takes `access_token` and `device_key` as input.

```python
resonse = aws.forget_device(access_token='access_token', device_key='device_key')
```

## SRP Requests Authenticator

`pycognito.utils.RequestsSrpAuth` is a [Requests](https://docs.python-requests.org/en/latest/)
Expand Down
Loading

0 comments on commit 6cd2f1f

Please sign in to comment.