<div align="center"><img alt="logo" src="https://raw.githubusercontent.com/collective/pas.plugins.authomatic/main/docs/authomatic.svg" width="70" /></div>
<h1 align="center">OAuth2 / OpenId Authentication in Plone</h1>
<div align="center">
[![PyPI](https://img.shields.io/pypi/v/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)
[![PyPI - Wheel](https://img.shields.io/pypi/wheel/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)
[![PyPI - License](https://img.shields.io/pypi/l/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)
[![PyPI - Status](https://img.shields.io/pypi/status/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)
[![PyPI - Plone Versions](https://img.shields.io/pypi/frameworkversions/plone/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)
[![Code analysis checks](https://github.com/collective/pas.plugins.authomatic/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/collective/pas.plugins.authomatic/actions/workflows/code-analysis.yml)
[![Tests](https://github.com/collective/pas.plugins.authomatic/actions/workflows/tests.yaml/badge.svg)](https://github.com/collective/pas.plugins.authomatic/actions/workflows/tests.yaml)
![Code Style](https://img.shields.io/badge/Code%20Style-Black-000000)
[![GitHub contributors](https://img.shields.io/github/contributors/collective/pas.plugins.authomatic)](https://github.com/collective/pas.plugins.authomatic)
[![GitHub Repo stars](https://img.shields.io/github/stars/collective/pas.plugins.authomatic?style=social)](https://github.com/collective/pas.plugins.authomatic)
</div>
Features
--------
**pas.plugins.authomatic** provides OAuth2 and OpenID login capability for Plone sites by integrating the awesome [Authomatic](https://authomatic.github.io/authomatic/) package.
```
Authomatic is a framework agnostic library
for Python web applications
with a minimalistic but powerful interface
which simplifies authentication of users
by third party providers like Facebook or Twitter
through standards like OAuth and OpenID.
```
*by author Peter Hudec on Authomatic website*
Supported Providers
-------------------
Out of the box, **pas.plugins.authomatic** supports the following providers
*OAuth 1.0a*
- Bitbucket
- Flickr
- Meetup
- Plurk
- Twitter
- Tumblr
- UbuntuOne
- Vimeo
- Xero
- Xing
- Yahoo
*OAuth 2.0*
- Amazon
- Behance
- Bitly
- Cosm
- DeviantART
- Eventbrite
- Facebook
- Foursquare
- GitHub
- Google
- LinkedIn
- PayPal
- Reddit
- Viadeo
- VK
- WindowsLive
- Yammer
- Yandex
*OpenID*
- python-openid
- Google App Engine based OpenID.
Documentation
-------------
This package supports Plone sites using Volto or the Classic UI.
For the Classic UI:
- This package creates a view called `authomatic-handler` where you can login with different providers.
- The view can be used as well to add an identity from a provider to an existing account.
- The provider is choosen in the URL so if you call `/authomatic-handler/PROVIDER` you will use PROVIDER to login.
For Volto:
- Endpoint `@login` with GET: Returns list of authentication options
- Endpoint `@login-authomatic` with GET: Provide information to start the OAuth process.
- Endpoint `@login-authomatic` with POST: Handles OAuth login and returns a JSON web token (JWT).
- For Volto sites you must also install [@plone-collective/volto-authomatic](https://github.com/collective/volto-authomatic).
Configuration is, currently, done via Classic UI:
- Plugin configuration is available in the Controlpanel `@@authomatic-controlpanel` (linked under users)
- Example JSON configuration (first level key is the PROVIDER):
```json
{
"github": {
"display": {
"title": "Github",
"cssclasses": {
"button": "plone-btn plone-btn-default",
"icon": "glypicon glyphicon-github"
},
"as_form": false
},
"propertymap": {
"email": "email",
"link": "home_page",
"location": "location",
"name": "fullname"
},
"class_": "authomatic.providers.oauth2.GitHub",
"consumer_key": "5c4901d141e736f114a7",
"consumer_secret": "d4692ca3c0ab6cc1f8b28d3ccb1ea15b61e7ef5c",
"access_headers": {
"User-Agent": "Plone Authomatic Plugin"
}
},
}
```
Installation
------------
Add **pas.plugins.authomatic** to the Plone installation using `pip`:
```bash
pip install pas.plugins.authomatic
```
or add it as a dependency on your package's `setup.py`
```python
install_requires = [
"pas.plugins.authomatic",
"Products.CMFPlone",
"plone.restapi",
"setuptools",
],
```
Start Plone and activate the plugin in the addons control-panel.
Configuration
-------------
Using Classic UI, go to the `Authomatic` controlpanel.
<img alt="Screenshot" src="https://raw.githubusercontent.com/collective/pas.plugins.authomatic/main/docs/plone-control-panel.png" width="300" />
Configuration parameters for the different authorization are provided as JSON text in there. We use JSON because of its flexibility.
<img alt="Screenshot" src="https://raw.githubusercontent.com/collective/pas.plugins.authomatic/main/docs/plugin-settings.png" width="300" />
Details about the configuration of each provider can be found at [Authomatic provider section](https://authomatic.github.io/authomatic/reference/providers.html).
There are some differences in configuration:
- Value of `"class_"` has to be a string, which is then resolved as a dotted path.
- Each provider can get an optional entry `display` with sub-enties such as:
- `title` which is used in the templates instead of the section name.
- `iconclasses` which is applied in the templates to an span.
- `buttonclasses` which is applied in the templates to the button.
- `as_form` (true/false) which renders a form for OpenId providers.
- Each provider can get an optional entry `propertymap`.
It is a mapping from authomatic/provider user properties to plone user properties, like `"fullname": "name",`. Look at each providers documentation which properties are available.
Source Code and Contributions
-----------------------------
If you want to help with the development (improvement, update, bug-fixing, ...) of `pas.plugins.authomatic` this is a great idea!
- [Issue Tracker](https://github.com/collective/pas.plugins.authomatic/issues)
- [Source Code](https://github.com/collective/pas.plugins.authomatic/)
Please do larger changes on a branch and submit a Pull Request.
Creator of **pas.plugins.authomatic** is Jens Klein.
We appreciate any contribution and if a release is needed to be done on PyPI, please just contact one of us.
Development
-----------
You need a working `python` environment (system, virtualenv, pyenv, etc) version 3.7 or superior.
Then install the dependencies and a development instance using:
```bash
make build
```
To run tests for this package:
```bash
make test
```
By default we use the latest Plone version in the 6.x series.
License
-------
The project is licensed under the GPLv2.
# Changelog
## 1.3.0 (2024-11-21)
- Search users by fullname and email. @alecghica
- Fix login on Volto frontend when already logged-in in Plone Classic. @avoinea
- Add the possibility to override the ZopeRequestAdapter.
- Fix the authomatic view when it is reporting an exception that does not have a message attribute
## 1.2.0 (2023-09-13)
- Add Spanish translation. @macagua
- Better handle values from identity data. @cekk
- Add `username_userid` User ID factory. @ericof
- Annotate transaction in POST calls to authenticate a user. @ericof
## 1.1.2 (2023-03-15)
- Support Python 3.11 for Plone 6. @ericof
- Lint fixes @ericof
## 1.1.1 (2022-10-14)
- Upgrade plone/code-analysis-action to version 2. @ericof
- Fix packaging issue related to CHANGELOG.md not being included in the source package. @ericof
- Support Python 3.10 for Plone 6. @ericof
## 1.1.0 (2022-10-10)
- Add the plone.restapi adapter to show the controlpanel in Volto. @erral
- Add possibility to redirect to `next_url` via provided cookie @avoinea
## 1.0.0 (2022-07-25)
- Use plone/plone-setup GitHub Action. @ericof
- Add Brazilian Portuguese translation. @ericof
- Use plone/code-analysis-action GitHub Action for code analysis. @ericof
- Fix doChangeUser takes 2 positional arguments but 3 were given @avoinea
## 1.0b2 (2021-08-18)
- Fix tox setup, move CI from TravisCI to GitHub Actions. @jensens
- Code Style Black, Isort, zpretty and Pyupgrade applied. @jensens
- Add missing no-op methods for IUserManagement to plugin.
This fixes the tests. @jensens
- Drop Python 2 support and so require Plone 5.2. @jensens
- Include permissions from CMFCore to avoid ComponentLookupError. @bsuttor
- Fixed ModuleNotFoundError: No module named 'App.class_init' on Zope 5. @bsuttor
- Add french translation @mpeeters
- PAS event notification IPrincipalCreatedEvent. @jensens
- Python 3 and Plone 52 compatibility. @cekk
- Fix #44: Fullfill strictly exact_match when enumerating users @allusa
- Allow users deletion. @cekk
- Drop Plone < 5.1.x compatibility. @cekk
- Fix #54: Notification of PrincipalCreated event. @ericof
- Closes #55: Support plone.restapi. @ericof
## 1.0b1 (2017-11-20)
- Slighly beautify login modal. @jensens
- Fix #33" Page does not exist Control Settings. @jensens
- Fix #31: Link is broken to JSON configuration documentation in help text. @jensens
- Fix #28: After uninstall plone.external_login_url is still registered and the login broken. @jensens
- Support for Plone 5.1 tested (worked, ust control-panel icon needed some tweak).
Buildout configuration for 5.1 added. @jensens
- Install: Hide non-valid profiles at install form. @jensens
- Additional checks to ensure to never have an empty/None key stored. @jensens
- Fix #27: Update user data after login. @jensens
- Fix filter users bug in enumerateUsers plugin where it was always returning
all the users. @sneridagh
- fix typo and wording of login message @tkimnguyen
## 1.0a7 (2016-02-15)
- Workaround for None users. @sneridagh
## 1.0a6 (2016-01-11)
- Fix #21: When you logout and then login again, a new user is created. @jensens
## 1.0a5 (2015-12-04)
- Fix: #18 "Provider Login" option for "Generator for Plone User ID" seems
broken @jensens
- Fix: Title indicates if an identity is added @jensens
- Fix: Correct usage of plone.protect @jensens
## 1.0a4 (2015-11-20)
- Added german translation @jensens
- Restored Plone 4 compatibility @keul
- Added italian translation @keul
- Proper uninstall @keul
## 1.0a3 (2015-11-15)
- Refactor authomatic-handler to enable adding identities. @jensens
- Fix: use secret from settings as secret for Authomatic. @jensens
- Renamed view ``authomatic-login`` to ``authomatic-handler``, because this
view will be used to add an identity too (url must be registered on provider
side sometimes and we want to do this only once). @jensens
## 1.0a2 (2015-11-14)
- Minimal validation of JSON. @jensens
- Make the whole ``remember`` procedure a ``safeWrite`` if called from login
view. We can not pass a authenticator token here, because of redirects and
expected return urls . @jensens
- Allow selection of user id generator strategy. @jensens
- Allow multiple services for one user. This changes a lot behind the scenes. @jensens
- Use authomatic.core.User attributes instead of raw provider data. closes [#9](https://github.com/collective/pas.plugins.authomatic/issues/9) @ericof
## 1.0a1 (2015-10-28)
- Initial release.
Raw data
{
"_id": null,
"home_page": "https://github.com/collective/pas.plugins.authomatic",
"name": "pas.plugins.authomatic",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "Python Plone PAS OAuth Authentication",
"author": "Jens Klein, Matthias Dollfuss, and \u00c9rico Andrei",
"author_email": "dev@bluedynamics.com",
"download_url": "https://files.pythonhosted.org/packages/c0/6a/475b399a9fb6c95014d91e924d1659cf581a1689b92a88857153e89f7e7e/pas_plugins_authomatic-1.3.0.tar.gz",
"platform": null,
"description": "\n<div align=\"center\"><img alt=\"logo\" src=\"https://raw.githubusercontent.com/collective/pas.plugins.authomatic/main/docs/authomatic.svg\" width=\"70\" /></div>\n\n<h1 align=\"center\">OAuth2 / OpenId Authentication in Plone</h1>\n\n<div align=\"center\">\n\n[![PyPI](https://img.shields.io/pypi/v/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)\n[![PyPI - License](https://img.shields.io/pypi/l/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)\n[![PyPI - Status](https://img.shields.io/pypi/status/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)\n\n\n[![PyPI - Plone Versions](https://img.shields.io/pypi/frameworkversions/plone/pas.plugins.authomatic)](https://pypi.org/project/pas.plugins.authomatic/)\n\n[![Code analysis checks](https://github.com/collective/pas.plugins.authomatic/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/collective/pas.plugins.authomatic/actions/workflows/code-analysis.yml)\n[![Tests](https://github.com/collective/pas.plugins.authomatic/actions/workflows/tests.yaml/badge.svg)](https://github.com/collective/pas.plugins.authomatic/actions/workflows/tests.yaml)\n![Code Style](https://img.shields.io/badge/Code%20Style-Black-000000)\n\n[![GitHub contributors](https://img.shields.io/github/contributors/collective/pas.plugins.authomatic)](https://github.com/collective/pas.plugins.authomatic)\n[![GitHub Repo stars](https://img.shields.io/github/stars/collective/pas.plugins.authomatic?style=social)](https://github.com/collective/pas.plugins.authomatic)\n\n</div>\n\nFeatures\n--------\n\n**pas.plugins.authomatic** provides OAuth2 and OpenID login capability for Plone sites by integrating the awesome [Authomatic](https://authomatic.github.io/authomatic/) package.\n\n```\nAuthomatic is a framework agnostic library\nfor Python web applications\nwith a minimalistic but powerful interface\nwhich simplifies authentication of users\nby third party providers like Facebook or Twitter\nthrough standards like OAuth and OpenID.\n```\n*by author Peter Hudec on Authomatic website*\n\n\nSupported Providers\n-------------------\n\nOut of the box, **pas.plugins.authomatic** supports the following providers\n\n*OAuth 1.0a*\n\n- Bitbucket\n- Flickr\n- Meetup\n- Plurk\n- Twitter\n- Tumblr\n- UbuntuOne\n- Vimeo\n- Xero\n- Xing\n- Yahoo\n\n*OAuth 2.0*\n\n- Amazon\n- Behance\n- Bitly\n- Cosm\n- DeviantART\n- Eventbrite\n- Facebook\n- Foursquare\n- GitHub\n- Google\n- LinkedIn\n- PayPal\n- Reddit\n- Viadeo\n- VK\n- WindowsLive\n- Yammer\n- Yandex\n\n*OpenID*\n\n- python-openid\n- Google App Engine based OpenID.\n\n\nDocumentation\n-------------\n\nThis package supports Plone sites using Volto or the Classic UI.\n\nFor the Classic UI:\n\n- This package creates a view called `authomatic-handler` where you can login with different providers.\n- The view can be used as well to add an identity from a provider to an existing account.\n- The provider is choosen in the URL so if you call `/authomatic-handler/PROVIDER` you will use PROVIDER to login.\n\nFor Volto:\n\n- Endpoint `@login` with GET: Returns list of authentication options\n- Endpoint `@login-authomatic` with GET: Provide information to start the OAuth process.\n- Endpoint `@login-authomatic` with POST: Handles OAuth login and returns a JSON web token (JWT).\n- For Volto sites you must also install [@plone-collective/volto-authomatic](https://github.com/collective/volto-authomatic).\n\n\nConfiguration is, currently, done via Classic UI:\n\n- Plugin configuration is available in the Controlpanel `@@authomatic-controlpanel` (linked under users)\n- Example JSON configuration (first level key is the PROVIDER):\n\n```json\n{\n \"github\": {\n \"display\": {\n \"title\": \"Github\",\n \"cssclasses\": {\n \"button\": \"plone-btn plone-btn-default\",\n \"icon\": \"glypicon glyphicon-github\"\n },\n \"as_form\": false\n },\n \"propertymap\": {\n \"email\": \"email\",\n \"link\": \"home_page\",\n \"location\": \"location\",\n \"name\": \"fullname\"\n },\n \"class_\": \"authomatic.providers.oauth2.GitHub\",\n \"consumer_key\": \"5c4901d141e736f114a7\",\n \"consumer_secret\": \"d4692ca3c0ab6cc1f8b28d3ccb1ea15b61e7ef5c\",\n \"access_headers\": {\n \"User-Agent\": \"Plone Authomatic Plugin\"\n }\n },\n}\n```\n\nInstallation\n------------\n\nAdd **pas.plugins.authomatic** to the Plone installation using `pip`:\n\n```bash\npip install pas.plugins.authomatic\n```\nor add it as a dependency on your package's `setup.py`\n\n```python\n install_requires = [\n \"pas.plugins.authomatic\",\n \"Products.CMFPlone\",\n \"plone.restapi\",\n \"setuptools\",\n ],\n```\n\nStart Plone and activate the plugin in the addons control-panel.\n\nConfiguration\n-------------\n\nUsing Classic UI, go to the `Authomatic` controlpanel.\n\n<img alt=\"Screenshot\" src=\"https://raw.githubusercontent.com/collective/pas.plugins.authomatic/main/docs/plone-control-panel.png\" width=\"300\" />\n\nConfiguration parameters for the different authorization are provided as JSON text in there. We use JSON because of its flexibility.\n\n<img alt=\"Screenshot\" src=\"https://raw.githubusercontent.com/collective/pas.plugins.authomatic/main/docs/plugin-settings.png\" width=\"300\" />\n\nDetails about the configuration of each provider can be found at [Authomatic provider section](https://authomatic.github.io/authomatic/reference/providers.html).\n\nThere are some differences in configuration:\n\n- Value of `\"class_\"` has to be a string, which is then resolved as a dotted path.\n- Each provider can get an optional entry `display` with sub-enties such as:\n\n - `title` which is used in the templates instead of the section name.\n - `iconclasses` which is applied in the templates to an span.\n - `buttonclasses` which is applied in the templates to the button.\n - `as_form` (true/false) which renders a form for OpenId providers.\n\n- Each provider can get an optional entry `propertymap`.\n It is a mapping from authomatic/provider user properties to plone user properties, like `\"fullname\": \"name\",`. Look at each providers documentation which properties are available.\n\n\nSource Code and Contributions\n-----------------------------\n\nIf you want to help with the development (improvement, update, bug-fixing, ...) of `pas.plugins.authomatic` this is a great idea!\n\n- [Issue Tracker](https://github.com/collective/pas.plugins.authomatic/issues)\n- [Source Code](https://github.com/collective/pas.plugins.authomatic/)\n\n\nPlease do larger changes on a branch and submit a Pull Request.\n\nCreator of **pas.plugins.authomatic** is Jens Klein.\n\nWe appreciate any contribution and if a release is needed to be done on PyPI, please just contact one of us.\n\nDevelopment\n-----------\n\nYou need a working `python` environment (system, virtualenv, pyenv, etc) version 3.7 or superior.\n\nThen install the dependencies and a development instance using:\n\n```bash\nmake build\n```\n\nTo run tests for this package:\n\n```bash\nmake test\n```\n\nBy default we use the latest Plone version in the 6.x series.\n\nLicense\n-------\n\nThe project is licensed under the GPLv2.\n\n\n# Changelog\n\n## 1.3.0 (2024-11-21)\n\n- Search users by fullname and email. @alecghica\n- Fix login on Volto frontend when already logged-in in Plone Classic. @avoinea\n- Add the possibility to override the ZopeRequestAdapter.\n- Fix the authomatic view when it is reporting an exception that does not have a message attribute\n\n\n## 1.2.0 (2023-09-13)\n\n- Add Spanish translation. @macagua\n\n- Better handle values from identity data. @cekk\n\n- Add `username_userid` User ID factory. @ericof\n\n- Annotate transaction in POST calls to authenticate a user. @ericof\n\n\n## 1.1.2 (2023-03-15)\n\n- Support Python 3.11 for Plone 6. @ericof\n\n- Lint fixes @ericof\n\n\n## 1.1.1 (2022-10-14)\n\n- Upgrade plone/code-analysis-action to version 2. @ericof\n\n- Fix packaging issue related to CHANGELOG.md not being included in the source package. @ericof\n\n- Support Python 3.10 for Plone 6. @ericof\n\n\n## 1.1.0 (2022-10-10)\n\n- Add the plone.restapi adapter to show the controlpanel in Volto. @erral\n\n- Add possibility to redirect to `next_url` via provided cookie @avoinea\n\n\n## 1.0.0 (2022-07-25)\n\n- Use plone/plone-setup GitHub Action. @ericof\n\n- Add Brazilian Portuguese translation. @ericof\n\n- Use plone/code-analysis-action GitHub Action for code analysis. @ericof\n\n- Fix doChangeUser takes 2 positional arguments but 3 were given @avoinea\n\n## 1.0b2 (2021-08-18)\n\n- Fix tox setup, move CI from TravisCI to GitHub Actions. @jensens\n\n- Code Style Black, Isort, zpretty and Pyupgrade applied. @jensens\n\n- Add missing no-op methods for IUserManagement to plugin.\n This fixes the tests. @jensens\n\n- Drop Python 2 support and so require Plone 5.2. @jensens\n\n- Include permissions from CMFCore to avoid ComponentLookupError. @bsuttor\n\n- Fixed ModuleNotFoundError: No module named 'App.class_init' on Zope 5. @bsuttor\n\n- Add french translation @mpeeters\n\n- PAS event notification IPrincipalCreatedEvent. @jensens\n\n- Python 3 and Plone 52 compatibility. @cekk\n\n- Fix #44: Fullfill strictly exact_match when enumerating users @allusa\n\n- Allow users deletion. @cekk\n\n- Drop Plone < 5.1.x compatibility. @cekk\n\n- Fix #54: Notification of PrincipalCreated event. @ericof\n\n- Closes #55: Support plone.restapi. @ericof\n\n## 1.0b1 (2017-11-20)\n\n- Slighly beautify login modal. @jensens\n\n- Fix #33\" Page does not exist Control Settings. @jensens\n\n- Fix #31: Link is broken to JSON configuration documentation in help text. @jensens\n\n- Fix #28: After uninstall plone.external_login_url is still registered and the login broken. @jensens\n\n- Support for Plone 5.1 tested (worked, ust control-panel icon needed some tweak).\n Buildout configuration for 5.1 added. @jensens\n\n- Install: Hide non-valid profiles at install form. @jensens\n\n- Additional checks to ensure to never have an empty/None key stored. @jensens\n\n- Fix #27: Update user data after login. @jensens\n\n- Fix filter users bug in enumerateUsers plugin where it was always returning\n all the users. @sneridagh\n\n- fix typo and wording of login message @tkimnguyen\n\n\n## 1.0a7 (2016-02-15)\n\n- Workaround for None users. @sneridagh\n\n\n## 1.0a6 (2016-01-11)\n\n- Fix #21: When you logout and then login again, a new user is created. @jensens\n\n\n## 1.0a5 (2015-12-04)\n\n- Fix: #18 \"Provider Login\" option for \"Generator for Plone User ID\" seems\n broken @jensens\n\n- Fix: Title indicates if an identity is added @jensens\n\n- Fix: Correct usage of plone.protect @jensens\n\n\n## 1.0a4 (2015-11-20)\n\n- Added german translation @jensens\n\n- Restored Plone 4 compatibility @keul\n\n- Added italian translation @keul\n\n- Proper uninstall @keul\n\n## 1.0a3 (2015-11-15)\n\n- Refactor authomatic-handler to enable adding identities. @jensens\n\n- Fix: use secret from settings as secret for Authomatic. @jensens\n\n- Renamed view ``authomatic-login`` to ``authomatic-handler``, because this\n view will be used to add an identity too (url must be registered on provider\n side sometimes and we want to do this only once). @jensens\n\n\n## 1.0a2 (2015-11-14)\n\n- Minimal validation of JSON. @jensens\n\n- Make the whole ``remember`` procedure a ``safeWrite`` if called from login\n view. We can not pass a authenticator token here, because of redirects and\n expected return urls . @jensens\n\n- Allow selection of user id generator strategy. @jensens\n\n- Allow multiple services for one user. This changes a lot behind the scenes. @jensens\n\n- Use authomatic.core.User attributes instead of raw provider data. closes [#9](https://github.com/collective/pas.plugins.authomatic/issues/9) @ericof\n\n\n## 1.0a1 (2015-10-28)\n\n- Initial release.\n\n\n",
"bugtrack_url": null,
"license": "GPL",
"summary": "Provides OAuth2/OpenID login for Plone using Authomatic.",
"version": "1.3.0",
"project_urls": {
"Changelog": "https://github.com/collective/pas.plugins.authomatic/blob/main/CHANGELOG.md",
"Homepage": "https://github.com/collective/pas.plugins.authomatic",
"Issues": "https://github.com/collective/pas.plugins.authomatic/issues",
"Repository": "https://github.com/collective/pas.plugins.authomatic/"
},
"split_keywords": [
"python",
"plone",
"pas",
"oauth",
"authentication"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fadcc37f3bac750f189dc4a1990a9edbf83bc935af5117f64550c385710ab431",
"md5": "4f35cb465514973b18d3bc6e6135feca",
"sha256": "c002f20ff105cf2f2f8caaf9b2b709fac202e0addc9240357cffe2f63f52b40c"
},
"downloads": -1,
"filename": "pas.plugins.authomatic-1.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4f35cb465514973b18d3bc6e6135feca",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 69813,
"upload_time": "2024-11-21T09:55:16",
"upload_time_iso_8601": "2024-11-21T09:55:16.568457Z",
"url": "https://files.pythonhosted.org/packages/fa/dc/c37f3bac750f189dc4a1990a9edbf83bc935af5117f64550c385710ab431/pas.plugins.authomatic-1.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c06a475b399a9fb6c95014d91e924d1659cf581a1689b92a88857153e89f7e7e",
"md5": "655b0edbdcfe8a312a59391c5e6d105b",
"sha256": "e3e339ea2630a55d2a2ac06503689f5abf3b5fc1b38b54bb9b7182234e3ba0b3"
},
"downloads": -1,
"filename": "pas_plugins_authomatic-1.3.0.tar.gz",
"has_sig": false,
"md5_digest": "655b0edbdcfe8a312a59391c5e6d105b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 193137,
"upload_time": "2024-11-21T09:55:18",
"upload_time_iso_8601": "2024-11-21T09:55:18.763819Z",
"url": "https://files.pythonhosted.org/packages/c0/6a/475b399a9fb6c95014d91e924d1659cf581a1689b92a88857153e89f7e7e/pas_plugins_authomatic-1.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-21 09:55:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "collective",
"github_project": "pas.plugins.authomatic",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [],
"lcname": "pas.plugins.authomatic"
}