summaryrefslogtreecommitdiff
path: root/python-yawsso.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-yawsso.spec')
-rw-r--r--python-yawsso.spec963
1 files changed, 963 insertions, 0 deletions
diff --git a/python-yawsso.spec b/python-yawsso.spec
new file mode 100644
index 0000000..fef5c4e
--- /dev/null
+++ b/python-yawsso.spec
@@ -0,0 +1,963 @@
+%global _empty_manifest_terminate_build 0
+Name: python-yawsso
+Version: 1.1.0
+Release: 1
+Summary: Yet Another AWS SSO - sync up AWS CLI v2 SSO login session to legacy CLI v1 credentials
+License: MIT
+URL: https://github.com/victorskl/yawsso
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/1d/4c/764b308533e09491a57a8fbfca2239e44f8386e236d44f848b3eab519f7a/yawsso-1.1.0.tar.gz
+BuildArch: noarch
+
+
+%description
+# yawsso
+
+[![DOI](https://zenodo.org/badge/267410733.svg)](https://zenodo.org/badge/latestdoi/267410733)
+[![Pull Request Build Status](https://github.com/victorskl/yawsso/workflows/Pull%20Request%20Build/badge.svg)](https://github.com/victorskl/yawsso/actions/workflows/prbuild.yml)
+[![CodeQL](https://github.com/victorskl/yawsso/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/victorskl/yawsso/actions/workflows/codeql-analysis.yml)
+[![codecov.io](https://codecov.io/gh/victorskl/yawsso/coverage.svg?branch=main)](https://codecov.io/gh/victorskl/yawsso?branch=main)
+[![coveralls.io](https://coveralls.io/repos/github/victorskl/yawsso/badge.svg?branch=main)](https://coveralls.io/github/victorskl/yawsso?branch=main)
+[![codeclimate - Test Coverage](https://api.codeclimate.com/v1/badges/44dd1cbae44465118742/test_coverage)](https://codeclimate.com/github/victorskl/yawsso/test_coverage)
+[![codeclimate - Maintainability](https://api.codeclimate.com/v1/badges/44dd1cbae44465118742/maintainability)](https://codeclimate.com/github/victorskl/yawsso/maintainability)
+[![snyk](https://snyk.io/advisor/python/yawsso/badge.svg)](https://snyk.io/advisor/python/yawsso)
+[![kandi](https://img.shields.io/badge/kandi-X--Ray%20Report-ff69b4)](https://kandi.openweaver.com/python/victorskl/yawsso)
+[![PyPI - Downloads](https://img.shields.io/pypi/dm/yawsso?style=flat)](https://pypistats.org/packages/yawsso)
+[![PyPI](https://img.shields.io/pypi/v/yawsso?style=flat)](https://pypi.org/project/yawsso)
+[![PyPI - License](https://img.shields.io/pypi/l/yawsso?style=flat)](https://opensource.org/licenses/MIT)
+
+
+Yet Another AWS SSO - sync up AWS CLI v2 SSO login session to legacy CLI v1 credentials.
+
+> See also [Release v1.0.0 Notes](https://github.com/victorskl/yawsso/wiki#release-100-notes)
+
+## Prerequisite
+
+- Required `Python >= 3.7`
+- Required [AWS CLI v2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
+- Assume you have already setup [AWS SSO](https://aws.amazon.com/single-sign-on/) for your organization
+
+## Main Use Case
+
+- Install [latest from PyPI](https://pypi.org/project/yawsso/#history) like so:
+```commandline
+pip install yawsso
+```
+
+- Do your per normal SSO login and, have at least one active SSO session cache:
+```commandline
+aws sso login --profile dev
+```
+
+- To sync for all named profiles in config (i.e. _lazy consensus_), then just:
+```commandline
+yawsso
+```
+
+- To sync default profile and all named profiles, do:
+```commandline
+yawsso --default
+```
+
+- To sync default profile only, do:
+```commandline
+yawsso --default-only
+```
+
+- To sync for selected named profile, do:
+```commandline
+yawsso -p dev
+```
+
+- To sync for multiple selected named profiles, do:
+```commandline
+yawsso -p dev prod
+```
+
+- To sync for default profile as well as multiple selected named profiles, do:
+```commandline
+yawsso --default -p dev prod
+```
+
+- To sync for all named profiles start with prefix pattern `lab*`, do:
+```
+(zsh)
+yawsso -p 'lab*'
+
+(bash)
+yawsso -p lab*
+```
+
+- To sync for all named profiles start with `lab*` as well as `dev` and `prod`, do:
+```
+yawsso -p 'lab*' dev prod
+```
+
+- Print help to see other options:
+```commandline
+yawsso -h
+```
+
+- Then, continue per normal with your daily tools. i.e.
+ - `cdk deploy ...`
+ - `terraform apply ...`
+ - `cw ls groups`
+ - `awsbw -L -P dev`
+ - `sqsmover -s main-dlq -d main-queue`
+ - `ecs-cli ps --cluster my-cluster`
+ - `awscurl -H "Accept: application/json" --profile dev --region ap-southeast-2 "https://api..."`
+
+## Additional Use Cases
+
+### Rename Profile on Sync
+
+- Say, you have the following profile in your `$HOME/.aws/config`:
+```
+[profile dev]
+sso_start_url = https://myorg.awsapps.com/start
+sso_region = ap-southeast-2
+sso_account_id = 123456789012
+sso_role_name = AdministratorAccess
+region = ap-southeast-2
+output = json
+cli_pager =
+```
+
+- You want to populate access token as, say, profile name `foo` in `$HOME/.aws/credentials`:
+```
+[foo]
+region = ap-southeast-2
+aws_access_key_id = XXX
+aws_secret_access_key = XXX
+aws_session_token = XXX
+...
+```
+
+- Do like so:
+```
+yawsso -p dev:foo
+```
+
+- Then, you can `export AWS_PROFILE=foo` and use `foo` profile!
+
+### Export Tokens
+
+> PLEASE USE THIS FEATURE WITH CARE SINCE **ENVIRONMENT VARIABLES USED ON SHARED SYSTEMS CAN GIVE UNAUTHORIZED ACCESS TO PRIVATE RESOURCES**.
+
+> 🤚 START FROM VERSION `1.0.0`, `yawsso -e` EXPORT TOKENS IN **ROT13** ENCODED STRING.
+
+- Use `-e` flag if you want a temporary copy-paste-able time-gated access token for an instance or external machine.
+
+- Please note that, it uses `default` profile if no additional arguments pass.
+```
+yawsso -e | yawsso decrypt
+export AWS_ACCESS_KEY_ID=xxx
+export AWS_SECRET_ACCESS_KEY=xxx
+export AWS_SESSION_TOKEN=xxx
+```
+
+- This use case is especially tailored for those who use `default` profile and, who would like to PIPE commands as follows.
+```
+aws sso login && yawsso -e | yawsso decrypt | pbcopy
+```
+
+- Otherwise, for a named profile, do:
+```
+yawsso -p dev -e | yawsso decrypt
+```
+
+- Or, right away export credentials into the current shell environment variables, do:
+```
+yawsso -p dev -e | yawsso decrypt | source /dev/stdin
+```
+
+> Note: ☝️ are mutually exclusive with the following 👇 auto copy into your clipboard. **Choose one, a must!**
+
+- If you have [`pyperclip`](https://github.com/asweigart/pyperclip) package installed, `yawsso` will copy access tokens to your clipboard instead.
+```
+yawsso -e
+Credentials copied to your clipboard for profile 'default'
+```
+
+- You may `pip install pyperclip` or, together with `yawsso` as follows.
+```
+pip install 'yawsso[all]'
+```
+
+### Login
+
+- You can also use `yawsso` subcommand `login` to SSO login then sync all in one go.
+
+> 🙋‍♂️ NOTE: It uses `default` profile or `AWS_PROFILE` environment variable if optional argument `--profile` is absent
+
+```commandline
+yawsso login -h
+yawsso login
+```
+
+- Otherwise you can pass the _login profile_ as follows:
+```
+yawsso login --profile dev
+```
+
+- Due to _lazy consensus_ design, `yawsso` will sync all named profiles once SSO login has succeeded. If you'd like to sync only upto this _login profile_ then use `--this` flag to limit as follows.
+
+> 👉 Login using default profile and sync only upto **this** default profile
+```
+yawsso login --this
+```
+
+> 👉 Login using named profile dev and sync only upto **this** dev profile
+```
+yawsso login --profile dev --this
+```
+
+> 👉 Login using named profile dev and sync as foo. See above for more details on renaming, limited to one profile.
+```
+yawsso login --profile dev:foo
+```
+
+#### Login then Export token
+
+- Exporting access token also support with login subcommand as follows:
+
+> 👉 Login using default profile, sync only upto **this** default profile and, print access token
+```
+yawsso login -e | yawsso decrypt
+```
+
+> 👉 Login using named profile dev, sync only upto **this** dev profile and, print access token
+```
+yawsso login --profile dev -e | yawsso decrypt
+```
+
+### Auto Login then Sync
+
+- Like `login`, you may use `yawsso` subcommand `auto` to SSO login then sync all in one go.
+- It will check if SSO session has expired and, if so, `yawsso` will attempt to auto login again.
+
+```
+yawsso auto -h
+
+(either)
+yawsso auto --profile dev
+
+(or)
+export AWS_PROFILE=dev
+yawsso auto
+```
+
+### Encryption
+
+`yawsso` can encrypt and decrypt some arbitrary string from `stdin` using [ROT13](https://en.wikipedia.org/wiki/ROT13) (_a simple letter substitution cipher_) as follows.
+
+```
+echo 'Hello this is a test' | yawsso encrypt
+Uryyb guvf vf n grfg
+
+echo 'Uryyb guvf vf n grfg' | yawsso decrypt
+Hello this is a test
+
+(or Pipe through some text corpus)
+cat test.txt | yawsso encrypt
+
+(or on Windows)
+type test.txt | yawsso encrypt
+```
+
+This is the same as using trivial Unix `tr` command as follows.
+
+```
+echo 'Hello this is a test' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+Uryyb guvf vf n grfg
+
+echo 'Uryyb guvf vf n grfg' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+Hello this is a test
+```
+
+Hence, you could also decode `yawsso` exported tokens using `tr` command, like so.
+
+```
+yawsso -p dev -e | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+```
+
+## Develop
+
+- Create virtual environment, activate it and then:
+
+```
+make install
+make test
+python -m yawsso --trace version
+```
+
+(Windows)
+
+```
+python -m venv venv
+.\venv\Scripts\activate
+pip install ".[dev,test]" .
+pytest
+python -m yawsso --trace version
+```
+
+- Create issue or pull request welcome
+
+## License
+
+MIT License
+
+[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
+
+
+%package -n python3-yawsso
+Summary: Yet Another AWS SSO - sync up AWS CLI v2 SSO login session to legacy CLI v1 credentials
+Provides: python-yawsso
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-yawsso
+# yawsso
+
+[![DOI](https://zenodo.org/badge/267410733.svg)](https://zenodo.org/badge/latestdoi/267410733)
+[![Pull Request Build Status](https://github.com/victorskl/yawsso/workflows/Pull%20Request%20Build/badge.svg)](https://github.com/victorskl/yawsso/actions/workflows/prbuild.yml)
+[![CodeQL](https://github.com/victorskl/yawsso/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/victorskl/yawsso/actions/workflows/codeql-analysis.yml)
+[![codecov.io](https://codecov.io/gh/victorskl/yawsso/coverage.svg?branch=main)](https://codecov.io/gh/victorskl/yawsso?branch=main)
+[![coveralls.io](https://coveralls.io/repos/github/victorskl/yawsso/badge.svg?branch=main)](https://coveralls.io/github/victorskl/yawsso?branch=main)
+[![codeclimate - Test Coverage](https://api.codeclimate.com/v1/badges/44dd1cbae44465118742/test_coverage)](https://codeclimate.com/github/victorskl/yawsso/test_coverage)
+[![codeclimate - Maintainability](https://api.codeclimate.com/v1/badges/44dd1cbae44465118742/maintainability)](https://codeclimate.com/github/victorskl/yawsso/maintainability)
+[![snyk](https://snyk.io/advisor/python/yawsso/badge.svg)](https://snyk.io/advisor/python/yawsso)
+[![kandi](https://img.shields.io/badge/kandi-X--Ray%20Report-ff69b4)](https://kandi.openweaver.com/python/victorskl/yawsso)
+[![PyPI - Downloads](https://img.shields.io/pypi/dm/yawsso?style=flat)](https://pypistats.org/packages/yawsso)
+[![PyPI](https://img.shields.io/pypi/v/yawsso?style=flat)](https://pypi.org/project/yawsso)
+[![PyPI - License](https://img.shields.io/pypi/l/yawsso?style=flat)](https://opensource.org/licenses/MIT)
+
+
+Yet Another AWS SSO - sync up AWS CLI v2 SSO login session to legacy CLI v1 credentials.
+
+> See also [Release v1.0.0 Notes](https://github.com/victorskl/yawsso/wiki#release-100-notes)
+
+## Prerequisite
+
+- Required `Python >= 3.7`
+- Required [AWS CLI v2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
+- Assume you have already setup [AWS SSO](https://aws.amazon.com/single-sign-on/) for your organization
+
+## Main Use Case
+
+- Install [latest from PyPI](https://pypi.org/project/yawsso/#history) like so:
+```commandline
+pip install yawsso
+```
+
+- Do your per normal SSO login and, have at least one active SSO session cache:
+```commandline
+aws sso login --profile dev
+```
+
+- To sync for all named profiles in config (i.e. _lazy consensus_), then just:
+```commandline
+yawsso
+```
+
+- To sync default profile and all named profiles, do:
+```commandline
+yawsso --default
+```
+
+- To sync default profile only, do:
+```commandline
+yawsso --default-only
+```
+
+- To sync for selected named profile, do:
+```commandline
+yawsso -p dev
+```
+
+- To sync for multiple selected named profiles, do:
+```commandline
+yawsso -p dev prod
+```
+
+- To sync for default profile as well as multiple selected named profiles, do:
+```commandline
+yawsso --default -p dev prod
+```
+
+- To sync for all named profiles start with prefix pattern `lab*`, do:
+```
+(zsh)
+yawsso -p 'lab*'
+
+(bash)
+yawsso -p lab*
+```
+
+- To sync for all named profiles start with `lab*` as well as `dev` and `prod`, do:
+```
+yawsso -p 'lab*' dev prod
+```
+
+- Print help to see other options:
+```commandline
+yawsso -h
+```
+
+- Then, continue per normal with your daily tools. i.e.
+ - `cdk deploy ...`
+ - `terraform apply ...`
+ - `cw ls groups`
+ - `awsbw -L -P dev`
+ - `sqsmover -s main-dlq -d main-queue`
+ - `ecs-cli ps --cluster my-cluster`
+ - `awscurl -H "Accept: application/json" --profile dev --region ap-southeast-2 "https://api..."`
+
+## Additional Use Cases
+
+### Rename Profile on Sync
+
+- Say, you have the following profile in your `$HOME/.aws/config`:
+```
+[profile dev]
+sso_start_url = https://myorg.awsapps.com/start
+sso_region = ap-southeast-2
+sso_account_id = 123456789012
+sso_role_name = AdministratorAccess
+region = ap-southeast-2
+output = json
+cli_pager =
+```
+
+- You want to populate access token as, say, profile name `foo` in `$HOME/.aws/credentials`:
+```
+[foo]
+region = ap-southeast-2
+aws_access_key_id = XXX
+aws_secret_access_key = XXX
+aws_session_token = XXX
+...
+```
+
+- Do like so:
+```
+yawsso -p dev:foo
+```
+
+- Then, you can `export AWS_PROFILE=foo` and use `foo` profile!
+
+### Export Tokens
+
+> PLEASE USE THIS FEATURE WITH CARE SINCE **ENVIRONMENT VARIABLES USED ON SHARED SYSTEMS CAN GIVE UNAUTHORIZED ACCESS TO PRIVATE RESOURCES**.
+
+> 🤚 START FROM VERSION `1.0.0`, `yawsso -e` EXPORT TOKENS IN **ROT13** ENCODED STRING.
+
+- Use `-e` flag if you want a temporary copy-paste-able time-gated access token for an instance or external machine.
+
+- Please note that, it uses `default` profile if no additional arguments pass.
+```
+yawsso -e | yawsso decrypt
+export AWS_ACCESS_KEY_ID=xxx
+export AWS_SECRET_ACCESS_KEY=xxx
+export AWS_SESSION_TOKEN=xxx
+```
+
+- This use case is especially tailored for those who use `default` profile and, who would like to PIPE commands as follows.
+```
+aws sso login && yawsso -e | yawsso decrypt | pbcopy
+```
+
+- Otherwise, for a named profile, do:
+```
+yawsso -p dev -e | yawsso decrypt
+```
+
+- Or, right away export credentials into the current shell environment variables, do:
+```
+yawsso -p dev -e | yawsso decrypt | source /dev/stdin
+```
+
+> Note: ☝️ are mutually exclusive with the following 👇 auto copy into your clipboard. **Choose one, a must!**
+
+- If you have [`pyperclip`](https://github.com/asweigart/pyperclip) package installed, `yawsso` will copy access tokens to your clipboard instead.
+```
+yawsso -e
+Credentials copied to your clipboard for profile 'default'
+```
+
+- You may `pip install pyperclip` or, together with `yawsso` as follows.
+```
+pip install 'yawsso[all]'
+```
+
+### Login
+
+- You can also use `yawsso` subcommand `login` to SSO login then sync all in one go.
+
+> 🙋‍♂️ NOTE: It uses `default` profile or `AWS_PROFILE` environment variable if optional argument `--profile` is absent
+
+```commandline
+yawsso login -h
+yawsso login
+```
+
+- Otherwise you can pass the _login profile_ as follows:
+```
+yawsso login --profile dev
+```
+
+- Due to _lazy consensus_ design, `yawsso` will sync all named profiles once SSO login has succeeded. If you'd like to sync only upto this _login profile_ then use `--this` flag to limit as follows.
+
+> 👉 Login using default profile and sync only upto **this** default profile
+```
+yawsso login --this
+```
+
+> 👉 Login using named profile dev and sync only upto **this** dev profile
+```
+yawsso login --profile dev --this
+```
+
+> 👉 Login using named profile dev and sync as foo. See above for more details on renaming, limited to one profile.
+```
+yawsso login --profile dev:foo
+```
+
+#### Login then Export token
+
+- Exporting access token also support with login subcommand as follows:
+
+> 👉 Login using default profile, sync only upto **this** default profile and, print access token
+```
+yawsso login -e | yawsso decrypt
+```
+
+> 👉 Login using named profile dev, sync only upto **this** dev profile and, print access token
+```
+yawsso login --profile dev -e | yawsso decrypt
+```
+
+### Auto Login then Sync
+
+- Like `login`, you may use `yawsso` subcommand `auto` to SSO login then sync all in one go.
+- It will check if SSO session has expired and, if so, `yawsso` will attempt to auto login again.
+
+```
+yawsso auto -h
+
+(either)
+yawsso auto --profile dev
+
+(or)
+export AWS_PROFILE=dev
+yawsso auto
+```
+
+### Encryption
+
+`yawsso` can encrypt and decrypt some arbitrary string from `stdin` using [ROT13](https://en.wikipedia.org/wiki/ROT13) (_a simple letter substitution cipher_) as follows.
+
+```
+echo 'Hello this is a test' | yawsso encrypt
+Uryyb guvf vf n grfg
+
+echo 'Uryyb guvf vf n grfg' | yawsso decrypt
+Hello this is a test
+
+(or Pipe through some text corpus)
+cat test.txt | yawsso encrypt
+
+(or on Windows)
+type test.txt | yawsso encrypt
+```
+
+This is the same as using trivial Unix `tr` command as follows.
+
+```
+echo 'Hello this is a test' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+Uryyb guvf vf n grfg
+
+echo 'Uryyb guvf vf n grfg' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+Hello this is a test
+```
+
+Hence, you could also decode `yawsso` exported tokens using `tr` command, like so.
+
+```
+yawsso -p dev -e | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+```
+
+## Develop
+
+- Create virtual environment, activate it and then:
+
+```
+make install
+make test
+python -m yawsso --trace version
+```
+
+(Windows)
+
+```
+python -m venv venv
+.\venv\Scripts\activate
+pip install ".[dev,test]" .
+pytest
+python -m yawsso --trace version
+```
+
+- Create issue or pull request welcome
+
+## License
+
+MIT License
+
+[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
+
+
+%package help
+Summary: Development documents and examples for yawsso
+Provides: python3-yawsso-doc
+%description help
+# yawsso
+
+[![DOI](https://zenodo.org/badge/267410733.svg)](https://zenodo.org/badge/latestdoi/267410733)
+[![Pull Request Build Status](https://github.com/victorskl/yawsso/workflows/Pull%20Request%20Build/badge.svg)](https://github.com/victorskl/yawsso/actions/workflows/prbuild.yml)
+[![CodeQL](https://github.com/victorskl/yawsso/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/victorskl/yawsso/actions/workflows/codeql-analysis.yml)
+[![codecov.io](https://codecov.io/gh/victorskl/yawsso/coverage.svg?branch=main)](https://codecov.io/gh/victorskl/yawsso?branch=main)
+[![coveralls.io](https://coveralls.io/repos/github/victorskl/yawsso/badge.svg?branch=main)](https://coveralls.io/github/victorskl/yawsso?branch=main)
+[![codeclimate - Test Coverage](https://api.codeclimate.com/v1/badges/44dd1cbae44465118742/test_coverage)](https://codeclimate.com/github/victorskl/yawsso/test_coverage)
+[![codeclimate - Maintainability](https://api.codeclimate.com/v1/badges/44dd1cbae44465118742/maintainability)](https://codeclimate.com/github/victorskl/yawsso/maintainability)
+[![snyk](https://snyk.io/advisor/python/yawsso/badge.svg)](https://snyk.io/advisor/python/yawsso)
+[![kandi](https://img.shields.io/badge/kandi-X--Ray%20Report-ff69b4)](https://kandi.openweaver.com/python/victorskl/yawsso)
+[![PyPI - Downloads](https://img.shields.io/pypi/dm/yawsso?style=flat)](https://pypistats.org/packages/yawsso)
+[![PyPI](https://img.shields.io/pypi/v/yawsso?style=flat)](https://pypi.org/project/yawsso)
+[![PyPI - License](https://img.shields.io/pypi/l/yawsso?style=flat)](https://opensource.org/licenses/MIT)
+
+
+Yet Another AWS SSO - sync up AWS CLI v2 SSO login session to legacy CLI v1 credentials.
+
+> See also [Release v1.0.0 Notes](https://github.com/victorskl/yawsso/wiki#release-100-notes)
+
+## Prerequisite
+
+- Required `Python >= 3.7`
+- Required [AWS CLI v2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
+- Assume you have already setup [AWS SSO](https://aws.amazon.com/single-sign-on/) for your organization
+
+## Main Use Case
+
+- Install [latest from PyPI](https://pypi.org/project/yawsso/#history) like so:
+```commandline
+pip install yawsso
+```
+
+- Do your per normal SSO login and, have at least one active SSO session cache:
+```commandline
+aws sso login --profile dev
+```
+
+- To sync for all named profiles in config (i.e. _lazy consensus_), then just:
+```commandline
+yawsso
+```
+
+- To sync default profile and all named profiles, do:
+```commandline
+yawsso --default
+```
+
+- To sync default profile only, do:
+```commandline
+yawsso --default-only
+```
+
+- To sync for selected named profile, do:
+```commandline
+yawsso -p dev
+```
+
+- To sync for multiple selected named profiles, do:
+```commandline
+yawsso -p dev prod
+```
+
+- To sync for default profile as well as multiple selected named profiles, do:
+```commandline
+yawsso --default -p dev prod
+```
+
+- To sync for all named profiles start with prefix pattern `lab*`, do:
+```
+(zsh)
+yawsso -p 'lab*'
+
+(bash)
+yawsso -p lab*
+```
+
+- To sync for all named profiles start with `lab*` as well as `dev` and `prod`, do:
+```
+yawsso -p 'lab*' dev prod
+```
+
+- Print help to see other options:
+```commandline
+yawsso -h
+```
+
+- Then, continue per normal with your daily tools. i.e.
+ - `cdk deploy ...`
+ - `terraform apply ...`
+ - `cw ls groups`
+ - `awsbw -L -P dev`
+ - `sqsmover -s main-dlq -d main-queue`
+ - `ecs-cli ps --cluster my-cluster`
+ - `awscurl -H "Accept: application/json" --profile dev --region ap-southeast-2 "https://api..."`
+
+## Additional Use Cases
+
+### Rename Profile on Sync
+
+- Say, you have the following profile in your `$HOME/.aws/config`:
+```
+[profile dev]
+sso_start_url = https://myorg.awsapps.com/start
+sso_region = ap-southeast-2
+sso_account_id = 123456789012
+sso_role_name = AdministratorAccess
+region = ap-southeast-2
+output = json
+cli_pager =
+```
+
+- You want to populate access token as, say, profile name `foo` in `$HOME/.aws/credentials`:
+```
+[foo]
+region = ap-southeast-2
+aws_access_key_id = XXX
+aws_secret_access_key = XXX
+aws_session_token = XXX
+...
+```
+
+- Do like so:
+```
+yawsso -p dev:foo
+```
+
+- Then, you can `export AWS_PROFILE=foo` and use `foo` profile!
+
+### Export Tokens
+
+> PLEASE USE THIS FEATURE WITH CARE SINCE **ENVIRONMENT VARIABLES USED ON SHARED SYSTEMS CAN GIVE UNAUTHORIZED ACCESS TO PRIVATE RESOURCES**.
+
+> 🤚 START FROM VERSION `1.0.0`, `yawsso -e` EXPORT TOKENS IN **ROT13** ENCODED STRING.
+
+- Use `-e` flag if you want a temporary copy-paste-able time-gated access token for an instance or external machine.
+
+- Please note that, it uses `default` profile if no additional arguments pass.
+```
+yawsso -e | yawsso decrypt
+export AWS_ACCESS_KEY_ID=xxx
+export AWS_SECRET_ACCESS_KEY=xxx
+export AWS_SESSION_TOKEN=xxx
+```
+
+- This use case is especially tailored for those who use `default` profile and, who would like to PIPE commands as follows.
+```
+aws sso login && yawsso -e | yawsso decrypt | pbcopy
+```
+
+- Otherwise, for a named profile, do:
+```
+yawsso -p dev -e | yawsso decrypt
+```
+
+- Or, right away export credentials into the current shell environment variables, do:
+```
+yawsso -p dev -e | yawsso decrypt | source /dev/stdin
+```
+
+> Note: ☝️ are mutually exclusive with the following 👇 auto copy into your clipboard. **Choose one, a must!**
+
+- If you have [`pyperclip`](https://github.com/asweigart/pyperclip) package installed, `yawsso` will copy access tokens to your clipboard instead.
+```
+yawsso -e
+Credentials copied to your clipboard for profile 'default'
+```
+
+- You may `pip install pyperclip` or, together with `yawsso` as follows.
+```
+pip install 'yawsso[all]'
+```
+
+### Login
+
+- You can also use `yawsso` subcommand `login` to SSO login then sync all in one go.
+
+> 🙋‍♂️ NOTE: It uses `default` profile or `AWS_PROFILE` environment variable if optional argument `--profile` is absent
+
+```commandline
+yawsso login -h
+yawsso login
+```
+
+- Otherwise you can pass the _login profile_ as follows:
+```
+yawsso login --profile dev
+```
+
+- Due to _lazy consensus_ design, `yawsso` will sync all named profiles once SSO login has succeeded. If you'd like to sync only upto this _login profile_ then use `--this` flag to limit as follows.
+
+> 👉 Login using default profile and sync only upto **this** default profile
+```
+yawsso login --this
+```
+
+> 👉 Login using named profile dev and sync only upto **this** dev profile
+```
+yawsso login --profile dev --this
+```
+
+> 👉 Login using named profile dev and sync as foo. See above for more details on renaming, limited to one profile.
+```
+yawsso login --profile dev:foo
+```
+
+#### Login then Export token
+
+- Exporting access token also support with login subcommand as follows:
+
+> 👉 Login using default profile, sync only upto **this** default profile and, print access token
+```
+yawsso login -e | yawsso decrypt
+```
+
+> 👉 Login using named profile dev, sync only upto **this** dev profile and, print access token
+```
+yawsso login --profile dev -e | yawsso decrypt
+```
+
+### Auto Login then Sync
+
+- Like `login`, you may use `yawsso` subcommand `auto` to SSO login then sync all in one go.
+- It will check if SSO session has expired and, if so, `yawsso` will attempt to auto login again.
+
+```
+yawsso auto -h
+
+(either)
+yawsso auto --profile dev
+
+(or)
+export AWS_PROFILE=dev
+yawsso auto
+```
+
+### Encryption
+
+`yawsso` can encrypt and decrypt some arbitrary string from `stdin` using [ROT13](https://en.wikipedia.org/wiki/ROT13) (_a simple letter substitution cipher_) as follows.
+
+```
+echo 'Hello this is a test' | yawsso encrypt
+Uryyb guvf vf n grfg
+
+echo 'Uryyb guvf vf n grfg' | yawsso decrypt
+Hello this is a test
+
+(or Pipe through some text corpus)
+cat test.txt | yawsso encrypt
+
+(or on Windows)
+type test.txt | yawsso encrypt
+```
+
+This is the same as using trivial Unix `tr` command as follows.
+
+```
+echo 'Hello this is a test' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+Uryyb guvf vf n grfg
+
+echo 'Uryyb guvf vf n grfg' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+Hello this is a test
+```
+
+Hence, you could also decode `yawsso` exported tokens using `tr` command, like so.
+
+```
+yawsso -p dev -e | tr 'A-Za-z' 'N-ZA-Mn-za-m'
+```
+
+## Develop
+
+- Create virtual environment, activate it and then:
+
+```
+make install
+make test
+python -m yawsso --trace version
+```
+
+(Windows)
+
+```
+python -m venv venv
+.\venv\Scripts\activate
+pip install ".[dev,test]" .
+pytest
+python -m yawsso --trace version
+```
+
+- Create issue or pull request welcome
+
+## License
+
+MIT License
+
+[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
+
+
+%prep
+%autosetup -n yawsso-1.1.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-yawsso -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 1.1.0-1
+- Package Spec generated