From 416ef9e17e91f93e4c37f55374e8588386b3c575 Mon Sep 17 00:00:00 2001 From: Matthew Macdonald-Wallace Date: Sun, 11 Feb 2024 08:43:41 +0000 Subject: [PATCH 1/6] Start work on the Moodle integration docs --- docs/MOODLE.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 docs/MOODLE.md diff --git a/docs/MOODLE.md b/docs/MOODLE.md new file mode 100644 index 00000000..4cec5671 --- /dev/null +++ b/docs/MOODLE.md @@ -0,0 +1,30 @@ +# Moodle Integration + +[Moodle](https://moodle.org/) is an open-source Virtual Learning Environment (VLE) that can either be hosted by a thrid-party or on your own infrastructure. + +The great thing about having a VLE as part of your space is that you can provide your members with access to online learning courses whenever it suits them rather than having to organise everyone to be in the same place at the same time. + +MemberMatters can use Moodle as part of the sign-up process to provide an induction course that all new members must take before their accounts are activated. + +## How does it work? + +MemberMatters has an [OAuth2](https://oauth.net/2/) server built in that allows your members to log in to many other applications using their MemberMatters username and password. + +We will use this centralised authentication option to connect to Moodle and create new users in Moodle as part of the sign-up process. + +Members will then be able to access Moodle and any courses that you have created via their MemberMatters credentials. + +## What do I need? + +Installing and configuring Moodle (other than the authentication) is out of scope of these instructions however, the [Moodle installation guide](https://docs.moodle.org/403/en/Installing_Moodle) is a good place to start. + +We assume the following: + + 1. You have MemberMatters installed and running in production + 2. You have a Moodle installation running in production + 3. Moodle can connect to MemberMatters + 4. MemberMatters can connect to Moodle + +In order to achieve (3) and (4), you may want to host these systems on the same server, on the same network inside your space, or on the public internet. How to secure these platforms and keep them updated is also outside the scope of these instructions. + +## Setting up the platform From de9a63d66ceca19723ebeca31348776890111727 Mon Sep 17 00:00:00 2001 From: Matthew Macdonald-Wallace Date: Sun, 11 Feb 2024 20:16:26 +0000 Subject: [PATCH 2/6] Moodle installation steps with images --- docs/MOODLE.md | 93 ++++++++++++++++++++++++++- docs/moodle-api-key.png | Bin 0 -> 11046 bytes docs/moodle-api-token-output.png | Bin 0 -> 8379 bytes docs/moodle-auth-configure.png | Bin 0 -> 3219 bytes docs/moodle-custom-service.png | Bin 0 -> 4410 bytes docs/moodle-external-functions.png | Bin 0 -> 18051 bytes docs/moodle-external-service.png | Bin 0 -> 8788 bytes docs/moodle-membermatters-openid.png | Bin 0 -> 5634 bytes docs/moodle-new-oauth2-client.png | Bin 0 -> 21308 bytes docs/moodle-new-service-config.png | Bin 0 -> 30618 bytes docs/moodle-oauth2-secrets.png | Bin 0 -> 7057 bytes 11 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 docs/moodle-api-key.png create mode 100644 docs/moodle-api-token-output.png create mode 100644 docs/moodle-auth-configure.png create mode 100644 docs/moodle-custom-service.png create mode 100644 docs/moodle-external-functions.png create mode 100644 docs/moodle-external-service.png create mode 100644 docs/moodle-membermatters-openid.png create mode 100644 docs/moodle-new-oauth2-client.png create mode 100644 docs/moodle-new-service-config.png create mode 100644 docs/moodle-oauth2-secrets.png diff --git a/docs/MOODLE.md b/docs/MOODLE.md index 4cec5671..0787dcb1 100644 --- a/docs/MOODLE.md +++ b/docs/MOODLE.md @@ -20,11 +20,100 @@ Installing and configuring Moodle (other than the authentication) is out of scop We assume the following: - 1. You have MemberMatters installed and running in production - 2. You have a Moodle installation running in production + 1. You have MemberMatters installed and running in production behind a TLS/SSL Certificate + 2. You have a Moodle installation running in production behind a TLS/SSL Certificate 3. Moodle can connect to MemberMatters 4. MemberMatters can connect to Moodle +**NOTE: You MUST have TLS/SSL in place (https://) in order for this to work.** + In order to achieve (3) and (4), you may want to host these systems on the same server, on the same network inside your space, or on the public internet. How to secure these platforms and keep them updated is also outside the scope of these instructions. ## Setting up the platform + +### MemberMatters OAuth2 Setup + +Log in to your MemberMatters admin portal (https:///admin) and add a new OpenID Connect Provider Client: + +![](moodle-membermatters-openid.png) + +Fill in the name, set the `client type` to "Confidential", and the `response types` to "code (Authorization Code Flow)". Finally, set the `redirect URLs` to the oauth2 callback for your Moodle installation, which is usually `https://your-moodle-install/admin/oauth2callback.php`: + +![](moodle-new-oauth2-client.png) + +Click "Save and Continue Editing" to retrieve the credentials: + +![](moodle-oauth2-secrets.png) + +Leave this tab open, and browse to `https:///admin/tool/oauth2/issuers.php` in a new tab. + +### Moodle OAuth Setup + +**NOTE:** You MUST log in as your Moodle admin user in order for the rest of this process to work! + +Select `Custom Service` from the options to create a new service: + +![](moodle-custom-service.png) + +Fill in the form, making sure to add the ClientID and Client Secret from the MemberMatters configuration screen you left open in the previous tab. + +For the `Service Base URL`, you should enter `https:///api/openid/` - Moodle will auto-discover the rest of the settings from this url. + +Make sure to set `This service will be used` to "Login Page and Internal Services" - this allows users to both log in, and control various items within Moodle. + +Set a name to be displayed on the login page, and update both `Scopes to be included` fields to "openid profile email phone address". + +Finally, uncheck `Require Email Verification` and check the box that says you understand about disabling email verification. If we were allowing anyone visiting the website to sign up, then we would need to take this into account, however we're only going to allow people with a MemberMatters account to log in to Moodle, so we don't need to worry about it. + +Your screen should now look a bit like this: + +![](moodle-new-service-config.png) + +Save your changes, go to `https:///admin/settings.php?section=externalservices` and click `add`. + +Create a new external service: + +![](moodle-external-service.png) + +When prompted to add functions, add the following: + + * `core_completion_get_activities_completion_status` + * `core_completion_get_course_completion_status` + * `core_user_get_users_by_field` + +![](moodle-external-functions.png) + +We're nearly there, but Moodle is less than straight-forward when it comes to setting this up, so we've got a couple more things to do. + +Go to `https:///admin/settings.php?section=manageauths` and enable OAuth2 by clicking on the closed eye icon. + +Click on the `Test Settings` link, then click on the login button for your MemberMatters installation. You should be redirected to MemberMatters, and then back to Moodle, and if everything is working then Moodle should show your name, nickname, email, and phone number as stored in MemberMatters. + +As a final test, log out of Moodle, then use the MemberMatters button to log in. + +If everything works then congratulations, you can continue to create your API Key and induction course. + +If you run into any errors, please [log a bug in Github](https://github.com/membermatters/MemberMatters/issues) or join the Discord server and we'll try to help! + +The last step is to create an API key for MemberMatters to check on course status in Moodle. + +Navigate to `https:///admin/webservice/tokens.php` and create a new token: + +![](moodle-api-key.png) + +Select your custom service from the `Service` dropdown, and your admin user from the `User` search (**Note**: You should really create a new user for this, but again, that is out of scope of this document). Uncheck the `valid until` checkbox, ensure there aren't any IP restrictions unless you understand what this means, and click "save".o + +![](moodle-api-token-output.png) + +Make a note of this value, you'll need it for the next steps. + + +## Induction Course + +Creating the induction course is out of scope of this tutorial, however once you have the course created go to the Constance configuration screen in MemberMatters (https:///admin/constance/config/) and scroll down to the `Moodle (LMS) Integration` section. + +Enable the Moodle integration and input the Moodle API Key you created above, your Moodle site address, and the course ID, then save your settings. + +Any new user should now automatically be redirected to your Moodle induction course and be able to log in via MemberMatters to complete the course. Once the course is complete, they will be returned to MemberMatters. + +In future, they can log in to any courses they want to take on your Moodle installation using their MemberMatters account. diff --git a/docs/moodle-api-key.png b/docs/moodle-api-key.png new file mode 100644 index 0000000000000000000000000000000000000000..9b94c5f70cf91fd229ce58742c4511101ea795c4 GIT binary patch literal 11046 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 P|8&JcGQ#D8KYjlnPeI0M literal 0 HcmV?d00001 diff --git a/docs/moodle-api-token-output.png b/docs/moodle-api-token-output.png new file mode 100644 index 0000000000000000000000000000000000000000..80d5668d7cc3967d9c9c9067bc17525da3617814 GIT binary patch literal 8379 zcmZ{IWl$VI(zM~R1qhDM;ID5r^rh5`L|e!|84xA(cy z$D^TPqQO+P<)5COCbll_Pge*XJ82+H6I(|Qr&BEIUfkN=$?niNCz*-Ot%sws>b@0T z2-DU5Q^(NO<;3#O-IJAxj$&E{p8JuHsRxe_N395# z_w2!=Ayb#_TUX-?^A9tjPxt5QUydin>L%C6l@(LYYK<)0&i|gS{61Y7-&kTctEjNG z>R4F)KDO*@<24#4{%|^HPMqglV|IC@UqhJ6;3wfeFFucf3%P>5tBp-?!X{DBGU12$)XzUhza&Muc_sNd zHlZHQPFEjx8d z)|~scA3iL`pL7S5eUSV6^whY1!DbYn{Km$NAtHT zIj^d`gy@|TqouVBjxq2l4imC-#z9p9~~Nwz{N)@bJ#w<{G$}uvh1k%k=H`>S0vN8ghNJSwPF(UYuk?&Do=OQJN@I45jmFnKIv-A zC6i}==8-SOKCZVWE|xoF2ge5aMKpO^afvBCJ*}TiExdQkYDsgDss8jy? z&ptjB4UNW2Nlr%Fd+8|4EK*g2dO%%lGlb&8dmCMAOUAl~Q{pd4aj7n{w}<)nDb*Ay zy=tO{?h(N&BvIqcw~Np^`XFMBSvDJ?(Y*;NjuA|x?#a!4V41;3E?$lF!2AfLq{l?w zde7<1>HWB56_yO>|GhQ|c^N)mb1>bH&_#$XlxKJyH~5y`@@^qOdx+%ysr|gpy~%~u z){hAib(u?(cv$`yI=Eixui@Exx<7MaBz_;IV`exCh`SI-yWART1W805k<_QGW^rpG? z3|jy-zu?t(p9WB?0|rF zRRfho9VRCv%C;wKrR4HXl?vp1w0bYCY)Ov(upAcR18;m>aYxKAL{t^_Fdsk|Tdz3f zfpb=_(lv^!={*yLh_^KaaHj|f3M_y_#BBx|OGn27U&07K{_SrW&>~!;Ki$hN^zVx7WeFb&&r^$L#aues!{DD| zdKQU6A&I?_BXv>7UwckkJuz$FtnNX;BO5GY5z>^3N&?Oo?)(%J7!tz@Ko-tak0KGA z-+~;JJ~8`1Nof#08WfK7z#0ihy%;ys3fG7qx?OFxfw;L|#r5~H(mQLvWkd|oH!}*L za&PnBb>nG-(8#92=)OP~^YdVu>@-`3no{YBn!2C4me&}^6RKTVr@G&9V*OfG@U!2e zA2wyEeliDs&eu<>fHlor{;G9OuQQ3nI|3==DTjFCW)CMih&M6zP*W!NDUhE^D?Wg< zr-i=;-2@K4QkA?Zg1+4KihSnhbD??PdIO~}Iv|6XR`aTMA|+1Fd?%c$7G;e{`3K4cY0{JX1 z58l|A59SoK_`k(59X^zj)sGe*mG`=yM;`4 zPON;D*264E8cjPxX#OUk{hoZ6p|j83?!mSGE8=>#qFVps7<+~66T4l}g)*peL)Qp? zA_Nn{+PtCA`hcf3|K}r&fdg0P*dn&o?78fV60vGoC--L%?KhUWsHa0M_bsyjyUK;R z9Ie#FEWxOMo=>j71mR}9MPRnBtYr^}bExUMvJX1hvMIERN2{bSQyYsb3$Ml-0qdHm z#q>2q$jglGF`WKPW(ir>d z=dm?ioK%t=>6ImClB^Bxb4pj~&*5a))75lJ>|jMskM| z{7rbV>~faeeu?8mAH6Md5C24sMT%%ZEZJqH&Qnz z?c`CF<|fEHajZn;YxZNEFzp~Jdd&(kr80<)%P#?6)6y%bWOPSvfBS?eiVgHO%N@#H%5rPw@4clZA-?`7BgZYqP+fM7aym+rZ(j= zn5m*PLxXd7Ku#$sTWDAC(z#pj-a9%_U1)c80Ep0doC1Xxolr!_n^kMw?)8i(vM2;b zzj?g+-Pt|)vjXf%3eI{n6EqCFf@aF<+yEdp7OW31$RXu^aJ~^<%)x<;qO_%_bpg>hhAf0o}SPo7>s<9q-5J{-DTM4Y1GRmt5S( zPu<_ojPz?f$)wzGBU=>lC!bi^J--toI+svH^@bD7ntiDZ@pfb!>POk;er0*v0mTY| zg!R85ej-Z=;ja^dX3rtp9j$6l9?0jS!K@YC6f zB=Mw@x+P1#_SyAx+JQ+M9(kY3NuS3-idKGkVcKzbN{0JHVZuIjf#GjF$%24mG}+8Y z$x+QTFNv16h^>7K$C&3_)=vfJFfq6KiFypD%m{zZlKjQg&;A}haWfeuX@0ChmWj9l z3J!6vIx^B+W7Nx#U&MQ9PEz_9Q$!p3mDac$M)r5w3|E!pI}};KB0Zq~o3&9yr~g)H z?$Ya0eL4%uM#`emQb|%Lu7N=7^6tV?k{raobdZ1E&n)nTW*T_%ynjZLdhY_=Xg~0~ zS-Zz;%kk{}+o{Mn&&^GLFu>x<2#zh{Fe-K_AeOWP1{bVSmwJe(I04)`%3Jv3V`$27 z!V7x`UeSNBfXCA>NmRyAiPx_5;1Z!!Nrmzi10N6jeVtjXlJIQH+rzI&T8{w`hMK)^ z`?NQltcRtNSl-BCM3~X=IhvzD0$3`b@N+hFo>XUy$81qaczx0BJHWyu&h+sjD&|h< zvYB**F-_3)+ zH&9{F?$uIYFqAKQ&(~1E&?UIar5JxhI7BbXw5*?g@rK3!*ij|y^wv|{ifVPBx_tS* zy}1wTCx11pQx3wP)cX^QZ+1=gwsHCTYXq!5&CfE`U2lvuVTH$CoXMCnwWY-A1vGKJFmVfta7T6<~gFz#!c19u5Jt#LbDG)~pPC z_YlOmCdB5$s&6A^ikI8pOEB#mL16L!hvGvHBy7svU^hrdYGT%TAso`n!25}XKi=xQz(^ek99lM?P8n>pS$LzD?9?;KspNZ!#`ZGpsjzD8z;WJ>XAq(y6>-vli?q8 zdM;?vx3ila!I%D$r8P5xkx|2wSc?b)m=_`Or&l_!@LnMweES>>(!sqFo$&k>BMT`EJfY!nM=V&clR%xV&Gu z!<^tgc;vrC$VWkKmP8>jX=G$gfZ8yX!_9ZUwc1v)mXTzYZ3i)HzJr^l%*Wm!sAh){ zxzdqgLx*MIuH5{zgRbP~TCkM?p@rBVR9W#t`eFtc&(`j+nFf$avl!FM@f&glNGP1P zIE|g6*sJo6Cx5UyeODL7J7>&^ctH=5C%c+c^c3 zBJ}wW-qug=Ips%b{8$56{Q!mjoaH6|c{9_bcYGzhN_l>Z4Vzr9X=`XIKXNjSenvlk z9-}nl$TxJinH*5hP1QS#@mo#UH0kGQsb~2vXS;9>@8`+9-0trOvhp{ zOc%w+{fHDZH4lU;A}3(j6x=3D##%j6rz4DeKaNIfXg3}n=qqV3pxPH5zke3WU@dD> z222`9ot=jqp%*BR=aQni9s~>Nsu0lz4^yvazIE12(vRQtX6TMVn8VGxSb6LFB= zp~!c*P_>y|>!Eeo+b9$JVPR>fJVKw7I5Jz~9PA-9zfDUXz(DcK5vk-g)ObgnkDt_s zY`?y29{!xwVML0$@gNG(ssA0FPzdPp>qlg*+Y<_uZTZ+MZ3CdN98^ILfK-e4zK=H@ zqY%9SzeJodA}WUxH?%q6CrBsbn<~J>Up9su_Ao1!^rFtM8!q@qY^|TVZE(3?z0f!} z$XyqQ1XLpq*VIG+eVr1_EvOF&F;+SF8L=~?5|f!&SV72OsSKW3E=3ZzWFY6m4YV@; z-+ydW3aI#=n*vGYEBU24jCjASM4|Z#TFLc4=Bpd9j^wZCN3JiGZ;t2I%XF_q>x@aka|2aUf0^1( zlK>q)MFnA;1{AR>cJAzEOD{RDiKd`^0iBSEtWj7}G|hBcD3-EJdU?zS9nguK2#1_J zAWwpkjF?K+=YXJ-kj9tr$r$fucW5Rp^1s5m=@1nM8LPf zfmI{}lp;A7dHc!fqBs^9LqJ4T1gV4IQ47gAM#6jHtgefoItV2(RnboiDCsD?sE`B< z_uxe@&=^2}l!n!W#Nzux-#Pc98^>>&Kj3`XE_=OK2jR2&3(vv7zDf3aHCK+?s*|!n z$Z~x6imp|295-m$XVKA2VZijAV-S_^>#w6@`vV>%9`84HxFM(L`WNzld@)>l^UQqD z0|J#eMg*^idFX{7t)17p4Ew(?Xu;@x(c+?416@4R5072HH8)*x0{MQbLiKDw<1_Xs zeRb1}@M~+PD0Tjih{p97Q{_UtJ>2^PM2$wj_*Q8U>=Vha$MrBDn_lUQPV}|=Os9u9G$NP4^Ht5vx2bY@l}06fc+9J5w!m>X+$ zB4WuHXCiP%DfEq@a{L^#)V^=ri944!XkLT zkm2JGI4$>crj#Qm#RN~BTLJB0of?7cvDF6xn;<+J;To#$q4dl{UE*lkNNpzw(q7-; zg~shDJbndoQ~2EOX*r?=^MSJ7z3`>v9c=%om~uL&3__E*7BTC)z>*gczqUyk9nS>0 z7ARRDe92oZ-?jxxgaLwRH%RB(|oFq&I2dH{yv}Gv-ba!;-7z9FDjb%{^9~yK>Lrp z*A#=j*MOtu(9cJ)Sn-9CiwKBwfe>WO!vcefuY|T2{);DsfP%PS`%0QO<0l+I@tpA= z#F|5ckfO5m z)Dp&<-=%*Gk}qZBio~nAhLP76ZD8ogl=_|(;NCt>+?X=KCD z%RbCTX#osOIER9~oi^LUy$4T>hFv%ObHE4c0v+lKjt|`5YhU4_c|HI=d&IZ zwumBb>`$2z24`&%z+KPpTR7o#zYfLD8j|tpib>#hq;XT3;X?tf9pebx-)~nuubtH8 zQe5PXu+*3P-SOV{(XWmRU+`M6dT!V$t~wYLkr(WUs$F)#PyoRNpGPUVO7j=vh!t)h zGQ;X#qSADTAr;lp+^1q9j9*p)Ca(|_i4gtghSFW2++!A~`qTkx4#7lQZP8g2I~5tI zeI^btxEA$nBokmY$R6Ql@)u32luCVI5rDGBy`i$Y5NIB$^CoHrM@Rf?w|a!23|06$ z8-vqweiaFrz5s-KvQXo4&ss{X(I+>vb=%srTKT$oD9Od7pPy zps|0ZmE*4y8f6(%$2iPmwI?VO(meHdck?md;nns9UQy9Pf>J9_LCKy8fr0qBkeEdc z@ByuoAX|i*Rxi9%vNZ&kDy_ueT4del2l`9D5UFRa{26i7lfvInU7#j3r^{zViCp2xg2^gjLH0e`7CPy>c=8vv6{=u=>vz4+M>4yi`d^v=-B-dnf#bB?D z1DyvXh0suqDgfE89V_Xf#e^p!VG0Bh_4EFmeo8Edqs@UQJeIMlf@RbRJo<5#>kK$4 zpP7yH9P~eRkTGCp)~nhm)+F+AcoW|p3>k`f%9@H15y4mDkyJaS}NID8+h)r2i) zAN0C@o@HIEz4?@7E8Ps6Sy;ub+)6NmNUVN6=V+n&+OE0gr?rJ#WY1d@7Xw!Ng3Ax^ z=QdUwsCG1kK%{Q3^M4`db6S`J^InRTppp#>U-3>*}XcCNfqaX%^6djNM)RT+pa)9;t z)flcuH|*YxP!&c0HN=Vr2n{YizcN`(&%NCciPB@93|gJkv(V28$V}Es(8--h<ugUrgZj-$SewOdbtfc7rs3dkpqeNefR_}aQI~> zW)jfJV#gnLDIy}j;;p#LGb_<*$p2x7Gbd8sZ!R2v*E-VrSxhqI58<@c;8&e2gt(^C zK;I&rXxYjBw1p_s!nHb$cnGdLbJGj>Bxp3^U%HcSgY>pl3Jn}yl90NMBIW+r2)JL{ z$f>fi*vF)7%zVjeiJl(JA^XjZ^?07ZC3Vqc?yn-nh=2cz&zibH(bzL(0(L*EOW62r zIhXMI#}gQg>(irU=}VDr7N5%!>1E9~<_ zq5+^H>EUcv(s*0@o6A!dI18V|`&ImiCQi-p5go;rBezrl9k|YRgMS{iz5I_Zf+wty z5m#7|%pT?V-V7_>QT9_1c(wvi4bh}@!^(G! z`2i#`JWivjoi1E~vp^R6qdHV_X8IW$kMz#&Jp$<-0tgW}LHeLp7)J?@(@>CxL`+72 zfw+NPuYLpNS+}OBO-fsym0TtYV!FK#Be1n6OGd4Bn}-fVauprdTrbIR%RrG^Kes=Ksp59 zu6(S$9lmt`FbT_kf>O#t9ql83+eMmD8Dg@rtGT~s>ftG78Q%+Tpr9|>jWRU+f;6D` dpJ{HsFZ$PUdw-D|Z=V0?O7d!QHL~WR{|o1CG`|1< literal 0 HcmV?d00001 diff --git a/docs/moodle-auth-configure.png b/docs/moodle-auth-configure.png new file mode 100644 index 0000000000000000000000000000000000000000..a92c797fd29f78efbdd2198ff247b0fd2b31e4c8 GIT binary patch literal 3219 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 A?f?J) literal 0 HcmV?d00001 diff --git a/docs/moodle-external-functions.png b/docs/moodle-external-functions.png new file mode 100644 index 0000000000000000000000000000000000000000..3115722cbe50c7c14ba2dccd7e6bd45b5c8cf6ee GIT binary patch literal 18051 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 literal 0 HcmV?d00001 diff --git a/docs/moodle-external-service.png b/docs/moodle-external-service.png new file mode 100644 index 0000000000000000000000000000000000000000..0b70ee5807a364140d099f818ddbd19f2e9fef51 GIT binary patch literal 8788 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 literal 0 HcmV?d00001 diff --git a/docs/moodle-membermatters-openid.png b/docs/moodle-membermatters-openid.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4318ca292820318b9cc402a4ac73a5764e951b GIT binary patch literal 5634 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 TKBMNtKim3nV_3EBz1aT&ExWh9 literal 0 HcmV?d00001 diff --git a/docs/moodle-new-service-config.png b/docs/moodle-new-service-config.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff39d4f55b3d40319ebb1c05f40f481632231ab GIT binary patch literal 30618 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 NC?lyLQ4KK){2!?F{rvy{ literal 0 HcmV?d00001 diff --git a/docs/moodle-oauth2-secrets.png b/docs/moodle-oauth2-secrets.png new file mode 100644 index 0000000000000000000000000000000000000000..be313d88b171b48e97520c8607346350c13edd7e GIT binary patch literal 7057 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%0DyyHqzhEf3!aN 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 literal 0 HcmV?d00001 From 3ae4469d8b63f7e6f47fcf10db1bbf3c10bf103e Mon Sep 17 00:00:00 2001 From: Jaimyn Mayer Date: Mon, 8 Apr 2024 14:48:56 +1000 Subject: [PATCH 3/6] Update build_docker.pr.yml --- .github/workflows/build_docker.pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_docker.pr.yml b/.github/workflows/build_docker.pr.yml index 50557b3d..f4de7f92 100644 --- a/.github/workflows/build_docker.pr.yml +++ b/.github/workflows/build_docker.pr.yml @@ -1,6 +1,7 @@ name: Build Docker Image (On PR) on: + workflow_dispatch: pull_request: types: [opened, synchronize] branches: From 057e6b82bd20dbd6bdeee83c9e996506fdde6e94 Mon Sep 17 00:00:00 2001 From: Jaimyn Mayer Date: Mon, 8 Apr 2024 14:49:57 +1000 Subject: [PATCH 4/6] Update build_docker.dev.yml --- .github/workflows/build_docker.dev.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_docker.dev.yml b/.github/workflows/build_docker.dev.yml index 13e45d59..9e9f04dd 100644 --- a/.github/workflows/build_docker.dev.yml +++ b/.github/workflows/build_docker.dev.yml @@ -1,6 +1,7 @@ name: Build Docker Image (On Dev Push) on: + workflow_dispatch: push: branches: - "dev" From 842a74eddab29f764ae17c56da9ed6e50336bfa7 Mon Sep 17 00:00:00 2001 From: Jaimyn Mayer Date: Mon, 8 Apr 2024 14:50:23 +1000 Subject: [PATCH 5/6] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 8368fb1b..55581a55 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -12,6 +12,7 @@ name: "CodeQL" on: + workflow_dispatch: push: branches: - "dev" From c8aaecfc740771bdfdbb1c7b6e330bcd1edd6aa2 Mon Sep 17 00:00:00 2001 From: Jaimyn Mayer Date: Mon, 8 Apr 2024 14:50:45 +1000 Subject: [PATCH 6/6] Update black.yml --- .github/workflows/black.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index ff1cdbaa..28e3f60a 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -1,6 +1,8 @@ name: Python Linter (Black) -on: [pull_request] +on: + workflow_dispatch: + pull_request: jobs: lint-backend: