Metadata

Distro Index Owner:
eea
Home Page:
pas.plugins.authomatic
License
GPL
Version:
1.2.1.dev3
Last updated:
2024-06-17
Keywords:
Python Plone PAS OAuth Authentication

pas.plugins.authomatic

Files

Indexes

Provides OAuth2/OpenID login for Plone using Authomatic.

<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 {

System Message: WARNING/2 (<string>, line 112); backlink

Inline literal start-string without end-string.

System Message: WARNING/2 (<string>, line 112); backlink

Inline interpreted text or phrase reference start-string without end-string.

System Message: ERROR/3 (<string>, line 114)

Unexpected indentation.
"github": {
"display": {

"title": "Github", "cssclasses": {

System Message: ERROR/3 (<string>, line 118)

Unexpected indentation.
"button": "plone-btn plone-btn-default", "icon": "glypicon glyphicon-github"

System Message: WARNING/2 (<string>, line 120)

Block quote ends without a blank line; unexpected unindent.

}, "as_form": false

System Message: WARNING/2 (<string>, line 122)

Definition list ends without a blank line; unexpected unindent.

}, "propertymap": {

System Message: ERROR/3 (<string>, line 124)

Unexpected indentation.
"email": "email", "link": "home_page", "location": "location", "name": "fullname"

System Message: WARNING/2 (<string>, line 128)

Block quote ends without a blank line; unexpected unindent.

}, "class_": "authomatic.providers.oauth2.GitHub", "consumer_key": "5c4901d141e736f114a7", "consumer_secret": "d4692ca3c0ab6cc1f8b28d3ccb1ea15b61e7ef5c", "access_headers": {

System Message: ERROR/3 (<string>, line 133)

Unexpected indentation.
"User-Agent": "Plone Authomatic Plugin"

System Message: WARNING/2 (<string>, line 134)

Block quote ends without a blank line; unexpected unindent.

}

System Message: WARNING/2 (<string>, line 135)

Definition list ends without a blank line; unexpected unindent.

},

System Message: WARNING/2 (<string>, line 136)

Block quote ends without a blank line; unexpected unindent.

}

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

System Message: WARNING/2 (<string>, line 154); backlink

Inline literal start-string without end-string.

System Message: WARNING/2 (<string>, line 154); backlink

Inline interpreted text or phrase reference start-string without end-string.
install_requires = [
"pas.plugins.authomatic", "Products.CMFPlone", "plone.restapi", "setuptools",

System Message: WARNING/2 (<string>, line 155)

Definition list ends without a blank line; unexpected unindent.

],

System Message: WARNING/2 (<string>, line 156)

Definition list ends without a blank line; unexpected unindent.

```

System Message: WARNING/2 (<string>, line 156); backlink

Inline literal start-string without end-string.

System Message: WARNING/2 (<string>, line 156); backlink

Inline interpreted text or phrase reference start-string without end-string.

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!

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.2.1.dev2 (2024-06-03)

  • Fix login on Volto frontend when already logged-in in Plone Classic. @avoinea

## 1.2.1.dev1 (2024-03-14)

  • Search users by fullname and email. @alecghica

## 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.

Docutils System Messages

System Message: ERROR/3 (<string>, line 128); backlink

Unknown target name: "class".