Compare commits

..

32 Commits
v1.0.2 ... main

Author SHA1 Message Date
ab0bcb151b Update dependencies and cleanup 2024-08-07 11:24:48 +03:00
a3bb22422a BASE_URL is now taken from lms.yml 2024-08-07 11:19:38 +03:00
Jeff Cohen
0d52c5902c
Merge pull request #5 from cookiecutter-openedx/version-bump
Add changelog and bump pyproject version
2024-02-01 13:28:38 -05:00
Jeff Cohen
4f9837cc75 update date 2024-02-01 18:28:28 +00:00
Jeff Cohen
b8d958f8b5 Add changelog and bump pyproject version 2024-02-01 18:27:55 +00:00
Jeff Cohen
43a971c1ef
Merge pull request #4 from Medality-Health/update-user-on-login
Add property to control user updates on login
2024-02-01 13:10:21 -05:00
Erik Martus
da8dafb627 add property to control user updates 2024-01-25 21:00:16 +00:00
lpm0073
caf3ff79a3 synch pyproject.toml requirements 2023-08-12 13:49:30 -06:00
lpm0073
dc86f9b504 add funding links 2023-04-28 14:14:32 -06:00
Jeff Cohen
7a958c8fa3
Merge pull request #3 from lpm0073/python3
bump version
2022-12-20 14:59:12 -05:00
Jeff Cohen
644799445a bump version 2022-12-20 19:49:30 +00:00
Lawrence McDaniel
3eda26893d
Merge pull request #2 from lpm0073/python3
Consistently use python3 in Makefile
2022-12-20 13:49:20 -06:00
Jeff Cohen
ef7714b3bf Changelog 2022-12-20 19:47:21 +00:00
Jeff Cohen
526a40ab84 Consistently use python3 in Makefile 2022-12-20 19:46:34 +00:00
lpm0073
e4bb3ac4be bump to v.1.0.5 2022-12-20 13:26:39 -06:00
Lawrence McDaniel
a88efb5335
Merge pull request #1 from Medality-Health/upgrade-social-core
Upgrade social core
2022-12-18 21:45:56 -06:00
Jeff Cohen
8b33e35dde
Update stable-psa.txt 2022-12-18 22:00:47 -05:00
Jeff Cohen
f51c0d4b39
Upgrade social-auth-core
Allow for social-auth-core to be greater than 4.2.0 in order to be compatible with Open edX Olive which uses 4.3.0
2022-12-18 22:00:17 -05:00
lpm0073
4f9192f14a revert to WP OAuth Server 2022-11-09 09:40:09 -06:00
lpm0073
3a5f7277bf documentation 2022-11-08 20:04:18 -06:00
lpm0073
6eb4f65fe4 PATH needs a trailing slash 2022-11-08 20:03:21 -06:00
lpm0073
47ec84ca07 documentation 2022-11-08 18:44:38 -06:00
lpm0073
249f776d64 add URL property and class variables for PATH and endpoint values. switch to urljoin() 2022-11-08 18:40:24 -06:00
lpm0073
49fa25f925 documentation 2022-10-11 19:07:48 -05:00
lpm0073
ba970fed60 cleanup meta data 2022-10-11 15:37:53 -05:00
lpm0073
ebaf71e8b9 documentation 2022-10-11 15:13:36 -05:00
lpm0073
38c9f5e7d2 set v1.0.0 2022-10-11 15:05:40 -05:00
lpm0073
9cc2803842 rename the package 2022-10-11 14:59:22 -05:00
lpm0073
d6deb2a9bc rename the package 2022-10-11 14:58:18 -05:00
lpm0073
81c864ddd8 documentation 2022-10-11 14:54:54 -05:00
lpm0073
9aaceb80a0 rename the repo 2022-10-11 14:53:44 -05:00
lpm0073
2b06252dba set PyPi project name 2022-10-11 14:34:06 -05:00
13 changed files with 143 additions and 127 deletions

View File

@ -1,7 +0,0 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace

40
Makefile Normal file
View File

@ -0,0 +1,40 @@
# -------------------------------------------------------------------------
# build a package for PyPi
# -------------------------------------------------------------------------
.PHONY: build
.PHONY: requirements
report:
cloc $(git ls-files)
build:
python3 -m pip install --upgrade setuptools wheel twine
python3 -m pip install --upgrade build
if [ -d "./build" ]; then sudo rm -r build; fi
if [ -d "./dist" ]; then sudo rm -r dist; fi
if [ -d "./edx_oauth2_wordpress_backend.egg-info" ]; then sudo rm -r edx_oauth2_wordpress_backend.egg-info; fi
python3 -m build --sdist ./
python3 -m build --wheel ./
python3 -m pip install --upgrade twine
twine check dist/*
# -------------------------------------------------------------------------
# upload to PyPi Test
# https:// ?????
# -------------------------------------------------------------------------
release-test:
make build
twine upload --skip-existing --repository testpypi dist/*
# -------------------------------------------------------------------------
# upload to PyPi
# https://pypi.org/project/django-memberpress-client/
# -------------------------------------------------------------------------
release-prod:
make build
twine upload --skip-existing dist/*

View File

@ -1,5 +1,9 @@
Wordpress OAuth2 Backend for Open edX Open edX OAuth2 Backend for Wordpress
===================================== =====================================
.. image:: https://img.shields.io/static/v1?label=pypi&style=flat-square&color=0475b6&message=edx-oauth2-wordpress-backend
:alt: PyPi edx-oauth2-wordpress-backend
:target: https://pypi.org/project/edx-oauth2-wordpress-backend/
.. image:: https://img.shields.io/badge/hack.d-Lawrence%20McDaniel-orange.svg .. image:: https://img.shields.io/badge/hack.d-Lawrence%20McDaniel-orange.svg
:target: https://lawrencemcdaniel.com :target: https://lawrencemcdaniel.com
:alt: Hack.d Lawrence McDaniel :alt: Hack.d Lawrence McDaniel
@ -18,7 +22,7 @@ Wordpress OAuth2 Backend for Open edX
Overview Overview
-------- --------
A Python Social Auth backend for `WP OAuth <https://wp-oauth.com/>`_ this is customized for use with Open edX. An Open edX oauth2 backend for `Wordpress <https://wordpress.org//>`_ `WP OAuth Server <https://wp-oauth.com/>`_.
- `Python Social Auth custom backend implentation <https://python-social-auth.readthedocs.io/en/latest/backends/implementation.html>`_ - `Python Social Auth custom backend implentation <https://python-social-auth.readthedocs.io/en/latest/backends/implementation.html>`_
- `WP Oauth Wordpress Plugin Documentation <https://wp-oauth.com/docs/>`_ - `WP Oauth Wordpress Plugin Documentation <https://wp-oauth.com/docs/>`_
@ -36,22 +40,20 @@ An example implementation for an Open edX installation named https://stepwisemat
1. add this package to your project's requiremets 1. add this package to your project's requiremets
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include this repo in your project's requiremets.txt, or install it from the command line. add this package to your project's requiremets.txt, or install it from the command line.
.. code-block:: shell .. code-block:: shell
cd path/to/your/virtual/environment pip install edx-oauth2-wordpress-backend
source path/to/venv/bin/activate
pip install https://github.com/lpm0073/wp-oauth-backend
2. subclass WPOpenEdxOAuth2 2. subclass WPOpenEdxOAuth2
~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Subclass wp_oauth_backend.wp_oauth.WPOpenEdxOAuth2, and configure for your Wordpress oauth provider. Subclass oauth2_wordpress.wp_oauth.WPOpenEdxOAuth2, and configure for your Wordpress oauth provider.
.. code-block:: python .. code-block:: python
from wp_oauth_backend.wp_oauth import WPOpenEdxOAuth2 from oauth2_wordpress.wp_oauth import WPOpenEdxOAuth2
class StepwiseMathWPOAuth2(WPOpenEdxOAuth2): class StepwiseMathWPOAuth2(WPOpenEdxOAuth2):
@ -67,7 +69,14 @@ Subclass wp_oauth_backend.wp_oauth.WPOpenEdxOAuth2, and configure for your Wordp
# note: no slash at the end of the base url. Python Social Auth # note: no slash at the end of the base url. Python Social Auth
# might clean this up for you, but i'm not 100% certain of that. # might clean this up for you, but i'm not 100% certain of that.
#
# the following will create an authorization url of https://stepwisemath.ai/wp-json/moserver/authorize
BASE_URL = "https://stepwisemath.ai" BASE_URL = "https://stepwisemath.ai"
PATH = "wp-json/moserver/"
AUTHORIZATION_ENDPOINT = "authorize"
TOKEN_ENDPOINT = "token"
USERINFO_ENDPOINT = "resource"
3. configure your Open edX lms application 3. configure your Open edX lms application
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -75,9 +84,9 @@ Subclass wp_oauth_backend.wp_oauth.WPOpenEdxOAuth2, and configure for your Wordp
.. code-block:: yaml .. code-block:: yaml
ADDL_INSTALLED_APPS: ADDL_INSTALLED_APPS:
- "wp_oauth_backend" - "oauth2_wordpress"
THIRD_PARTY_AUTH_BACKENDS: THIRD_PARTY_AUTH_BACKENDS:
- "wp_oauth_backend.wp_oauth.StepwiseMathWPOAuth2" - "oauth2_wordpress.wp_oauth.StepwiseMathWPOAuth2"
ENABLE_REQUIRE_THIRD_PARTY_AUTH: true ENABLE_REQUIRE_THIRD_PARTY_AUTH: true
add these settings to django.conf: add these settings to django.conf:
@ -91,9 +100,9 @@ add these settings to django.conf:
* - WPOAUTH_BACKEND_BASE_URL * - WPOAUTH_BACKEND_BASE_URL
- https://stepwisemath.ai - https://stepwisemath.ai
* - WPOAUTH_BACKEND_CLIENT_ID * - WPOAUTH_BACKEND_CLIENT_ID
- see: https://stepwisemath.ai/wp-admin/admin.php?page=wo_manage_clients - see: https://stepwisemath.ai/wp-admin/admin.php?page=mo_oauth_server_settings
* - WPOAUTH_BACKEND_CLIENT_SECRET * - WPOAUTH_BACKEND_CLIENT_SECRET
- see: https://stepwisemath.ai/wp-admin/admin.php?page=wo_manage_clients - see: https://stepwisemath.ai/wp-admin/admin.php?page=mo_oauth_server_settings
* - SCOPE * - SCOPE
- basic email profile - basic email profile
* - GRANT_TYPE * - GRANT_TYPE
@ -104,31 +113,15 @@ add these settings to django.conf:
4. Configure a new Oauth2 client from the lms Django Admin console 4. Configure a new Oauth2 client from the lms Django Admin console
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. image:: https://raw.githubusercontent.com/lpm0073/wp-oauth-backend/main/doc/django-admin-1.png .. image:: https://raw.githubusercontent.com/lpm0073/edx-oauth2-wordpress-backend/main/doc/django-admin-1.png
:width: 100% :width: 100%
:alt: Open edX Django Admin Add Provider Configuration (OAuth) :alt: Open edX Django Admin Add Provider Configuration (OAuth)
.. image:: https://raw.githubusercontent.com/lpm0073/wp-oauth-backend/main/doc/django-admin-2.png .. image:: https://raw.githubusercontent.com/lpm0073/edx-oauth2-wordpress-backend/main/doc/django-admin-2.png
:width: 100% :width: 100%
:alt: Open edX Django Admin Add Provider Configuration (OAuth) :alt: Open edX Django Admin Add Provider Configuration (OAuth)
5. Configure your devops
~~~~~~~~~~~~~~~~~~~~~~~~
Cookiecutter openedx_devops build
.. code-block:: shell
- name: Add the wp-oauth-backend
uses: openedx-actions/tutor-plugin-build-openedx-add-requirement@v1.0.0
with:
repository: wp-oauth-backend
repository-organization: StepwiseMath
repository-ref: main
repository-token: ${{ secrets.PAT }}
Cookiecutter openedx_devops deployment Cookiecutter openedx_devops deployment
.. code-block:: shell .. code-block:: shell
@ -143,29 +136,9 @@ WP Oauth Plugin Configuration
This plugin enables your Open edX installation to authenticate against the WP Oauth plugin provider This plugin enables your Open edX installation to authenticate against the WP Oauth plugin provider
in your Wordpress web site, configured as follows: in your Wordpress web site, configured as follows:
.. image:: https://raw.githubusercontent.com/lpm0073/wp-oauth-backend/main/doc/wp-oauth-config.png .. image:: https://raw.githubusercontent.com/lpm0073/edx-oauth2-wordpress-backend/main/doc/wp-oauth-config.png
:width: 100% :width: 100%
:alt: WP Oauth configuration page :alt: WP OAuth Server configuration page
Usage in Cookiecutter
---------------------
add a snippet of this form to openedx_devops/.github/workflows/build-openedx.yml
.. code-block:: yaml
steps:
#------------------------------------------------------------------------
# ... add your initialization and any preceding steps ...
#------------------------------------------------------------------------
- name: Add the wp-oauth-backend
uses: openedx-actions/tutor-plugin-build-openedx-add-requirement@v1.0.0
with:
repository: wp-oauth-backend
repository-organization: lpm0073
repository-ref: v1.0.2
Sample lms log output Sample lms log output
--------------------- ---------------------
@ -174,13 +147,13 @@ Sample lms log output
.. code-block:: shell .. code-block:: shell
2022-10-06 20:17:08,832 INFO 19 [tracking] [user None] [ip 192.168.6.26] logger.py:41 - {"name": "/auth/login/stepwisemath-oauth/", "context": {"user_id": null, "path": "/auth/login/stepwisemath-oauth/", "course_id": "", "org_id": "", "enterprise_uuid": ""}, "username": "", "session": "a3f4ac2a5bf97f717f5745984059891b", "ip": "192.168.6.26", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "host": "web.stepwisemath.ai", "referer": "https://web.stepwisemath.ai/login", "accept_language": "en-US,en;q=0.9,es-MX;q=0.8,es-US;q=0.7,es;q=0.6", "event": "{\"GET\": {\"auth_entry\": [\"login\"], \"next\": [\"/dashboard\"]}, \"POST\": {}}", "time": "2022-10-06T20:17:08.832684+00:00", "event_type": "/auth/login/stepwisemath-oauth/", "event_source": "server", "page": null} 2022-10-06 20:17:08,832 INFO 19 [tracking] [user None] [ip 192.168.6.26] logger.py:41 - {"name": "/auth/login/stepwisemath-oauth/", "context": {"user_id": null, "path": "/auth/login/stepwisemath-oauth/", "course_id": "", "org_id": "", "enterprise_uuid": ""}, "username": "", "session": "a3f4ac2a5bf97f717f5745984059891b", "ip": "192.168.6.26", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "host": "web.stepwisemath.ai", "referer": "https://web.stepwisemath.ai/login", "accept_language": "en-US,en;q=0.9,es-MX;q=0.8,es-US;q=0.7,es;q=0.6", "event": "{\"GET\": {\"auth_entry\": [\"login\"], \"next\": [\"/dashboard\"]}, \"POST\": {}}", "time": "2022-10-06T20:17:08.832684+00:00", "event_type": "/auth/login/stepwisemath-oauth/", "event_source": "server", "page": null}
2022-10-06 20:17:09,230 INFO 19 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:216 - AUTHORIZATION_URL: https://stepwisemath.ai/oauth/authorize 2022-10-06 20:17:09,230 INFO 19 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:216 - AUTHORIZATION_URL: https://stepwisemath.ai/oauth/authorize
[pid: 19|app: 0|req: 2/19] 192.168.4.4 () {68 vars in 1889 bytes} [Thu Oct 6 20:17:08 2022] GET /auth/login/stepwisemath-oauth/?auth_entry=login&next=%2Fdashboard => generated 0 bytes in 430 msecs (HTTP/1.1 302) 9 headers in 922 bytes (1 switches on core 0) [pid: 19|app: 0|req: 2/19] 192.168.4.4 () {68 vars in 1889 bytes} [Thu Oct 6 20:17:08 2022] GET /auth/login/stepwisemath-oauth/?auth_entry=login&next=%2Fdashboard => generated 0 bytes in 430 msecs (HTTP/1.1 302) 9 headers in 922 bytes (1 switches on core 0)
2022-10-06 20:17:38,485 INFO 7 [tracking] [user None] [ip 192.168.6.26] logger.py:41 - {"name": "/auth/complete/stepwisemath-oauth/", "context": {"user_id": null, "path": "/auth/complete/stepwisemath-oauth/", "course_id": "", "org_id": "", "enterprise_uuid": ""}, "username": "", "session": "a3f4ac2a5bf97f717f5745984059891b", "ip": "192.168.6.26", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "host": "web.stepwisemath.ai", "referer": "https://stepwisemath.ai/", "accept_language": "en-US,en;q=0.9,es-MX;q=0.8,es-US;q=0.7,es;q=0.6", "event": "{\"GET\": {\"redirect_state\": [\"pdbIKIcEbhjVr3Kon5VXUWWiy5kuX921\"], \"code\": [\"q0antmap4qfamd6pe24jh75pdprahpdiyitmut0o\"], \"state\": [\"pdbIKIcEbhjVr3Kon5VXUWWiy5kuX921\"], \"iframe\": [\"break\"]}, \"POST\": {}}", "time": "2022-10-06T20:17:38.484675+00:00", "event_type": "/auth/complete/stepwisemath-oauth/", "event_source": "server", "page": null} 2022-10-06 20:17:38,485 INFO 7 [tracking] [user None] [ip 192.168.6.26] logger.py:41 - {"name": "/auth/complete/stepwisemath-oauth/", "context": {"user_id": null, "path": "/auth/complete/stepwisemath-oauth/", "course_id": "", "org_id": "", "enterprise_uuid": ""}, "username": "", "session": "a3f4ac2a5bf97f717f5745984059891b", "ip": "192.168.6.26", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "host": "web.stepwisemath.ai", "referer": "https://stepwisemath.ai/", "accept_language": "en-US,en;q=0.9,es-MX;q=0.8,es-US;q=0.7,es;q=0.6", "event": "{\"GET\": {\"redirect_state\": [\"pdbIKIcEbhjVr3Kon5VXUWWiy5kuX921\"], \"code\": [\"q0antmap4qfamd6pe24jh75pdprahpdiyitmut0o\"], \"state\": [\"pdbIKIcEbhjVr3Kon5VXUWWiy5kuX921\"], \"iframe\": [\"break\"]}, \"POST\": {}}", "time": "2022-10-06T20:17:38.484675+00:00", "event_type": "/auth/complete/stepwisemath-oauth/", "event_source": "server", "page": null}
2022-10-06 20:17:38,496 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:223 - ACCESS_TOKEN_URL: https://stepwisemath.ai/oauth/token 2022-10-06 20:17:38,496 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:223 - ACCESS_TOKEN_URL: https://stepwisemath.ai/oauth/token
2022-10-06 20:17:40,197 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:230 - USER_QUERY: https://stepwisemath.ai/oauth/me 2022-10-06 20:17:40,197 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:230 - USER_QUERY: https://stepwisemath.ai/oauth/me
2022-10-06 20:17:40,197 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:363 - user_data() url: https://stepwisemath.ai/oauth/me?access_token=jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl 2022-10-06 20:17:40,197 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:363 - user_data() url: https://stepwisemath.ai/oauth/me?access_token=jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl
2022-10-06 20:17:41,965 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:368 - user_data() response: { 2022-10-06 20:17:41,965 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:368 - user_data() response: {
"ID": "7", "ID": "7",
"display_name": "Test McBugster", "display_name": "Test McBugster",
"user_email": "test@stepwisemath.ai", "user_email": "test@stepwisemath.ai",
@ -192,7 +165,7 @@ Sample lms log output
], ],
"user_status": "0" "user_status": "0"
} }
2022-10-06 20:17:41,966 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:269 - get_user_details() received wp-oauth user data response json dict: { 2022-10-06 20:17:41,966 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:269 - get_user_details() received wp-oauth user data response json dict: {
"ID": "7", "ID": "7",
"display_name": "Test McBugster", "display_name": "Test McBugster",
"user_email": "test@stepwisemath.ai", "user_email": "test@stepwisemath.ai",
@ -204,8 +177,8 @@ Sample lms log output
], ],
"user_status": "0" "user_status": "0"
} }
2022-10-06 20:17:41,966 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:317 - get_user_details() processing response object 2022-10-06 20:17:41,966 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:317 - get_user_details() processing response object
2022-10-06 20:17:41,966 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:241 - user_details.setter: new value set { 2022-10-06 20:17:41,966 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:241 - user_details.setter: new value set {
"date_joined": "2022-10-06 19:57:56", "date_joined": "2022-10-06 19:57:56",
"email": "test@stepwisemath.ai", "email": "test@stepwisemath.ai",
"first_name": "Test", "first_name": "Test",
@ -220,7 +193,7 @@ Sample lms log output
"user_status": "0", "user_status": "0",
"username": "testaccount" "username": "testaccount"
} }
2022-10-06 20:17:41,967 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:345 - get_user_details() returning: { 2022-10-06 20:17:41,967 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:345 - get_user_details() returning: {
"date_joined": "2022-10-06 19:57:56", "date_joined": "2022-10-06 19:57:56",
"email": "test@stepwisemath.ai", "email": "test@stepwisemath.ai",
"first_name": "Test", "first_name": "Test",
@ -235,7 +208,7 @@ Sample lms log output
"user_status": "0", "user_status": "0",
"username": "testaccount" "username": "testaccount"
} }
2022-10-06 20:17:41,972 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:269 - get_user_details() received extended get_user_details() return dict: { 2022-10-06 20:17:41,972 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:269 - get_user_details() received extended get_user_details() return dict: {
"access_token": "jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl", "access_token": "jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl",
"date_joined": "2022-10-06 19:57:56", "date_joined": "2022-10-06 19:57:56",
"email": "test@stepwisemath.ai", "email": "test@stepwisemath.ai",
@ -252,7 +225,7 @@ Sample lms log output
"user_status": "0", "user_status": "0",
"username": "testaccount" "username": "testaccount"
} }
2022-10-06 20:17:41,973 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:241 - user_details.setter: new value set { 2022-10-06 20:17:41,973 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:241 - user_details.setter: new value set {
"access_token": "jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl", "access_token": "jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl",
"date_joined": "2022-10-06 19:57:56", "date_joined": "2022-10-06 19:57:56",
"email": "test@stepwisemath.ai", "email": "test@stepwisemath.ai",
@ -269,7 +242,7 @@ Sample lms log output
"user_status": "0", "user_status": "0",
"username": "testaccount" "username": "testaccount"
} }
2022-10-06 20:17:41,973 INFO 7 [wp_oauth_backend.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:290 - get_user_details() returning extended get_user_details() return dict: { 2022-10-06 20:17:41,973 INFO 7 [oauth2_wordpress.wp_oauth] [user None] [ip 192.168.6.26] wp_oauth.py:290 - get_user_details() returning extended get_user_details() return dict: {
"access_token": "jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl", "access_token": "jx2zql9fw2jx9s7tayik4ybfjrmuhb7m5csb1mtl",
"date_joined": "2022-10-06 19:57:56", "date_joined": "2022-10-06 19:57:56",
"email": "test@stepwisemath.ai", "email": "test@stepwisemath.ai",

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

View File

@ -0,0 +1 @@
__version__ = "1.0.8"

View File

@ -4,23 +4,20 @@ written by: Lawrence McDaniel
date: oct-2022 date: oct-2022
usage: subclass of BaseOAuth2 Third Party Authtencation client to
handle the field mapping and data conversions between
the dict that WP Oauth returns versus the dict that Open edX
actually needs.
""" """
import json import json
from urllib.parse import urlencode from urllib.parse import urlencode
from urllib.request import urlopen from urllib.request import urlopen
from urllib.parse import urljoin
from logging import getLogger from logging import getLogger
from social_core.backends.oauth import BaseOAuth2 from social_core.backends.oauth import BaseOAuth2
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.conf import settings
User = get_user_model() User = get_user_model()
logger = getLogger(__name__) logger = getLogger(__name__)
VERBOSE_LOGGING = True VERBOSE_LOGGING = False
class WPOpenEdxOAuth2(BaseOAuth2): class WPOpenEdxOAuth2(BaseOAuth2):
@ -49,11 +46,20 @@ class WPOpenEdxOAuth2(BaseOAuth2):
# Third Party Authentication / Provider Configuration (OAuth) # Third Party Authentication / Provider Configuration (OAuth)
# setup page drop-down box titled, "Backend name:", just above # setup page drop-down box titled, "Backend name:", just above
# the "Client ID:" and "Client Secret:" fields. # the "Client ID:" and "Client Secret:" fields.
name = "wp-oauth" name = "wp-oauth"
# note: no slash at the end of the base url. Python Social Auth # note: no slash at the end of the base url. Python Social Auth
# might clean this up for you, but i'm not 100% certain of that. # might clean this up for you, but i'm not 100% certain of that.
BASE_URL = "https://set-me-please.com" BASE_URL = settings.FEATURES.get('WP_PROVIDER_URL')
# a path to append to the BASE_URL: https://oauth_host.com/oauth/
PATH = "oauth/"
# endpoint defaults
AUTHORIZATION_ENDPOINT = "authorize"
TOKEN_ENDPOINT = "token"
USERINFO_ENDPOINT = "me"
# The default key name where the user identification field is defined, its # The default key name where the user identification field is defined, its
# used in the auth process when some basic user data is returned. This Id # used in the auth process when some basic user data is returned. This Id
@ -102,6 +108,9 @@ class WPOpenEdxOAuth2(BaseOAuth2):
# list can be delimited with commas, spaces, whatever. # list can be delimited with commas, spaces, whatever.
SCOPE_SEPARATOR = " " SCOPE_SEPARATOR = " "
# Enable updates on the Django user object on successful WordPress login.
UPDATE_USER_ON_LOGIN = True
# private utility function. not part of psa. # private utility function. not part of psa.
def _urlopen(self, url): def _urlopen(self, url):
""" """
@ -204,6 +213,10 @@ class WPOpenEdxOAuth2(BaseOAuth2):
return "get_user_details() return dict" return "get_user_details() return dict"
return "unrecognized response dict" return "unrecognized response dict"
@property
def URL(self):
return urljoin(self.BASE_URL, self.PATH)
# override Python Social Auth default end points. # override Python Social Auth default end points.
# see https://wp-oauth.com/docs/general/endpoints/ # see https://wp-oauth.com/docs/general/endpoints/
# #
@ -211,21 +224,21 @@ class WPOpenEdxOAuth2(BaseOAuth2):
# so that we can include logging for diagnostic purposes. # so that we can include logging for diagnostic purposes.
@property @property
def AUTHORIZATION_URL(self) -> str: def AUTHORIZATION_URL(self) -> str:
url = f"{self.BASE_URL}/oauth/authorize" url = urljoin(self.URL, self.AUTHORIZATION_ENDPOINT)
if VERBOSE_LOGGING: if VERBOSE_LOGGING:
logger.info("AUTHORIZATION_URL: {url}".format(url=url)) logger.info("AUTHORIZATION_URL: {url}".format(url=url))
return url return url
@property @property
def ACCESS_TOKEN_URL(self) -> str: def ACCESS_TOKEN_URL(self) -> str:
url = f"{self.BASE_URL}/oauth/token" url = urljoin(self.URL, self.TOKEN_ENDPOINT)
if VERBOSE_LOGGING: if VERBOSE_LOGGING:
logger.info("ACCESS_TOKEN_URL: {url}".format(url=url)) logger.info("ACCESS_TOKEN_URL: {url}".format(url=url))
return url return url
@property @property
def USER_QUERY(self) -> str: def USER_QUERY(self) -> str:
url = f"{self.BASE_URL}/oauth/me" url = urljoin(self.URL, self.USERINFO_ENDPOINT)
if VERBOSE_LOGGING: if VERBOSE_LOGGING:
logger.info("USER_QUERY: {url}".format(url=url)) logger.info("USER_QUERY: {url}".format(url=url))
return url return url
@ -396,28 +409,28 @@ class WPOpenEdxOAuth2(BaseOAuth2):
except User.DoesNotExist: except User.DoesNotExist:
return self.user_details return self.user_details
if (user.is_superuser != self.user_details["is_superuser"]) or ( if self.UPDATE_USER_ON_LOGIN:
user.is_staff != self.user_details["is_staff"] if (user.is_superuser != self.user_details["is_superuser"]) or (
): user.is_staff != self.user_details["is_staff"]
user.is_superuser = self.user_details["is_superuser"] ):
user.is_staff = self.user_details["is_staff"] user.is_superuser = self.user_details["is_superuser"]
user.save() user.is_staff = self.user_details["is_staff"]
logger.info( user.save()
"Updated the is_superuser/is_staff flags for user {username}".format( logger.info(
username=user.username "Updated the is_superuser/is_staff flags for user {username}".format(
username=user.username
)
) )
) if (user.first_name != self.user_details["first_name"]) or (
user.last_name != self.user_details["last_name"]
if (user.first_name != self.user_details["first_name"]) or ( ):
user.last_name != self.user_details["last_name"] user.first_name = self.user_details["first_name"]
): user.last_name = self.user_details["last_name"]
user.first_name = self.user_details["first_name"] user.save()
user.last_name = self.user_details["last_name"] logger.info(
user.save() "Updated first_name/last_name for user {username}".format(
logger.info( username=user.username
"Updated first_name/last_name for user {username}".format( )
username=user.username
) )
)
return self.user_details return self.user_details

View File

@ -3,12 +3,12 @@ requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta:__legacy__" build-backend = "setuptools.build_meta:__legacy__"
[project] [project]
name = "wp-oauth-backend_lpm0073" name = "edx-oauth2-wordpress-backend"
version = "1.0.2" version = "1.0.8"
authors = [ authors = [
{ name="Lawrence McDaniel", email="lpm0073@gmail.com" }, { name="Lawrence McDaniel", email="lpm0073@gmail.com" },
] ]
description = "A WP Oauth Python Social Auth backend for Open edX" description = "An Open edX Python Social Auth backend for Wordpress"
readme = "README.rst" readme = "README.rst"
requires-python = ">=3.7" requires-python = ">=3.7"
classifiers = [ classifiers = [
@ -17,11 +17,11 @@ classifiers = [
"Operating System :: OS Independent", "Operating System :: OS Independent",
] ]
dependencies = [ dependencies = [
"social-auth-core==4.2.0", "social-auth-core==4.3.0",
"social-auth-app-django==5.0.0" "social-auth-app-django==5.0.0"
] ]
keywords = ["Wordpress", "OAuth", "Open edX"] keywords = ["Open edX", "oauth", "Wordpress"]
[project.urls] [project.urls]
"Homepage" = "https://github.com/lpm0073/wp-oauth-backend" "Homepage" = "https://github.com/lpm0073/edx-oauth2-wordpress-backend"
"Bug Tracker" = "https://github.com/lpm0073/wp-oauth-backend/issues" "Bug Tracker" = "https://github.com/lpm0073/edx-oauth2-wordpress-backend/issues"

View File

@ -6,8 +6,8 @@
# date: oct-2022 # date: oct-2022
# #
# usage: a work in progress. build package and upload to PyPi. # usage: a work in progress. build package and upload to PyPi.
# https://pypi.org/project/wp-oauth-backend/ # https://pypi.org/project/edx-oauth2-wordpress-backend/
# https://pypi.org/project/wp-oauth-backend-lpm0073/ # https://pypi.org/project/edx-oauth2-wordpress-backend-lpm0073/
# #
# see: https://www.freecodecamp.org/news/how-to-create-and-upload-your-first-python-package-to-pypi/ # see: https://www.freecodecamp.org/news/how-to-create-and-upload-your-first-python-package-to-pypi/
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
@ -16,8 +16,7 @@ python -m pip install --upgrade build
sudo rm -r build sudo rm -r build
sudo rm -r dist sudo rm -r dist
sudo rm -r wp_oauth_backend.egg-info sudo rm -r edx_oauth2_wordpress_backend.egg-info
sudo rm -r wp_oauth_backend_lpm0073.egg-info
python3 -m build --sdist ./ python3 -m build --sdist ./
python3 -m build --wheel ./ python3 -m build --wheel ./

View File

@ -1,3 +1,3 @@
# Stable Python Social Auth, found in Open edX Nutmeg # Stable Python Social Auth, found in Open edX Olive
social-auth-app-django==5.0.0 social-auth-app-django>=5.0.0
social-auth-core==4.2.0 social-auth-core>=4.3.0

View File

@ -1,5 +1,5 @@
# Packages for testing # Packages for testing
pytest==7.1.1 pytest>=7.1.1
httpretty==1.1.4 httpretty>=1.1.4
pycodestyle==2.8.0 pycodestyle>=2.8.0
-e . -e .

View File

@ -20,7 +20,7 @@ def load_readme():
def load_about(): def load_about():
about = {} about = {}
with io.open( with io.open(
os.path.join(HERE, "wp_oauth_backend", "__about__.py"), os.path.join(HERE, "oauth2_wordpress", "__about__.py"),
"rt", "rt",
encoding="utf-8", encoding="utf-8",
) as f: ) as f:
@ -65,7 +65,7 @@ ABOUT = load_about()
VERSION = ABOUT["__version__"] VERSION = ABOUT["__version__"]
setup( setup(
name="wp-oauth-backend", name="edx-oauth2-wordpress-backend",
version=VERSION, version=VERSION,
description=( description=(
"An OAuth backend for the WP OAuth Wordpress Plugin, " "An OAuth backend for the WP OAuth Wordpress Plugin, "
@ -74,17 +74,15 @@ setup(
long_description=README, long_description=README,
author="Lawrence McDaniel, lpm0073@gmail.com", author="Lawrence McDaniel, lpm0073@gmail.com",
author_email="lpm0073@gmail.com", author_email="lpm0073@gmail.com",
url="https://github.com/StepwiseMath/wp-oauth-backend", url="https://git.unecon.ru/gevorkyan.aa/edx-oauth2-wordpress-backend",
project_urls={ project_urls={
"Code": "https://github.com/StepwiseMath/wp-oauth-backend", "Code": "https://git.unecon.ru/gevorkyan.aa/edx-oauth2-wordpress-backend"
"Issue tracker": "https://github.com/StepwiseMath/wp-oauth-backend/issues",
"Community": "https://stepwisemath.ai",
}, },
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
package_data={"": ["*.html"]}, # include any templates found in this repo. package_data={"": ["*.html"]}, # include any templates found in this repo.
zip_safe=False, zip_safe=False,
keywords="Wordpress, oauth, Open edX", keywords="Open edX, oauth, Wordpress",
python_requires=">=3.7", python_requires=">=3.7",
install_requires=load_requirements("requirements/stable-psa.txt"), install_requires=load_requirements("requirements/stable-psa.txt"),
classifiers=[ classifiers=[

View File

@ -1 +0,0 @@
__version__ = "1.0.2"