From a47d91dbd01fbf8ca82eff40d679a9653bc5a287 Mon Sep 17 00:00:00 2001 From: Sheogorath Date: Wed, 3 Oct 2018 19:33:04 +0200 Subject: [PATCH 1/4] Add development mode for webpack in package.json Seems like we have to explicitly tell the new webpack version that we want to use the development environment. This provides us with source maps and similar. This patch adds the commandline option in our scripts in package.json Signed-off-by: Sheogorath --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d46122..1217263 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "test": "npm run-script standard && npm run-script jsonlint", "jsonlint": "find . -not -path './node_modules/*' -type f -name '*.json' -o -type f -name '*.json.example' | while read json; do echo $json ; jq . $json; done", "standard": "node ./node_modules/standard/bin/cmd.js", - "dev": "webpack --config webpack.config.js --progress --colors --watch", + "dev": "webpack --config webpack.config.js --mode=production --progress --colors --watch", "build": "webpack --config webpack.production.js --progress --colors --bail", "postinstall": "bin/heroku", "start": "node app.js", From 75a23fe2c91d6c2f5008daccae72f8964af72307 Mon Sep 17 00:00:00 2001 From: Sheogorath Date: Thu, 4 Oct 2018 01:41:48 +0200 Subject: [PATCH 2/4] Add rel="noopener" to target="_blank" links The noopener construct protects from some nasty clickjacking attacks. We can apply them savely to all our links since we don't rely on the previously used page. Some more details: https://mathiasbynens.github.io/rel-noopener/ Signed-off-by: Sheogorath --- public/js/extra.js | 4 +++- public/views/codimd/body.ejs | 2 +- public/views/codimd/header.ejs | 16 ++++++++-------- public/views/index/body.ejs | 4 ++-- public/views/shared/refresh-modal.ejs | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/public/js/extra.js b/public/js/extra.js index d6bbb0c..7a1077d 100644 --- a/public/js/extra.js +++ b/public/js/extra.js @@ -570,7 +570,9 @@ export function postProcess (code) { $(value).html(html) }) // link should open in new window or tab - result.find('a:not([href^="#"]):not([target])').attr('target', '_blank') + // also add noopener to prevent clickjacking + // See details: https://mathiasbynens.github.io/rel-noopener/ + result.find('a:not([href^="#"]):not([target])').attr('target', '_blank').attr('rel', 'noopener') // update continue line numbers const linenumberdivs = result.find('.gutter.linenumber').toArray() for (let i = 0; i < linenumberdivs.length; i++) { diff --git a/public/views/codimd/body.ejs b/public/views/codimd/body.ejs index d4f27a9..dc11190 100644 --- a/public/views/codimd/body.ejs +++ b/public/views/codimd/body.ejs @@ -113,7 +113,7 @@ diff --git a/public/views/shared/refresh-modal.ejs b/public/views/shared/refresh-modal.ejs index 5be41b2..6458054 100644 --- a/public/views/shared/refresh-modal.ejs +++ b/public/views/shared/refresh-modal.ejs @@ -14,7 +14,7 @@ From a10f551023615c159ef828536c54535078805e4e Mon Sep 17 00:00:00 2001 From: Claudius Coenen Date: Thu, 4 Oct 2018 11:03:58 +0200 Subject: [PATCH 3/4] How to use Nextcloud as OAuth2 Provider for CodiMD Signed-off-by: Claudius Coenen --- docs/guides/auth/nextcloud.md | 52 ++++++++++++++++++ .../auth/nextcloud-oauth2-1-settings.png | Bin 0 -> 47047 bytes .../auth/nextcloud-oauth2-2-client-add.png | Bin 0 -> 11684 bytes .../nextcloud-oauth2-3-clientid-secret.png | Bin 0 -> 13428 bytes 4 files changed, 52 insertions(+) create mode 100644 docs/guides/auth/nextcloud.md create mode 100644 docs/guides/images/auth/nextcloud-oauth2-1-settings.png create mode 100644 docs/guides/images/auth/nextcloud-oauth2-2-client-add.png create mode 100644 docs/guides/images/auth/nextcloud-oauth2-3-clientid-secret.png diff --git a/docs/guides/auth/nextcloud.md b/docs/guides/auth/nextcloud.md new file mode 100644 index 0000000..108772d --- /dev/null +++ b/docs/guides/auth/nextcloud.md @@ -0,0 +1,52 @@ +Authentication guide - Nextcloud (self-hosted) +=== + +*This has been constructed using the [Nextcloud OAuth2 Documentation](https://docs.nextcloud.com/server/14/admin_manual/configuration_server/oauth2.html?highlight=oauth2) combined with [this issue comment on the nextcloud bugtracker](https://github.com/nextcloud/server/issues/5694#issuecomment-314761326).* + +This guide uses the generic OAuth2 module for compatibility with Nextcloud 13 and above (this guide has been tested successfully with Nextcloud 14). + +1. Sign-in with an administrator account to your Nextcloud server + +2. Navigate to the OAuth integration settings: Profile Icon (top right) --> Settings + Then choose Security Settings from the *Administration* part of the list - Don't confuse this with Personal Security Settings, where you would change your personal password! + At the top there's OAuth 2.0-Clients. + ![Where to find OAuth2 in Nextcloud](../images/auth/nextcloud-oauth2-1-settings.png) + +3. Add your CodiMD instance by giving it a *name* (perhaps CodiMD, but could be anything) and a *Redirection-URI*. The Redirection-URI will be `\/auth/oauth2/callback`. Click Add. + ![Adding a client to Nextcloud](../images/auth/nextcloud-oauth2-2-client-add.png) + + +4. You'll now see a line containing a *client identifier* and a *Secret*. + ![Successfully added OAuth2-client](../images/auth/nextcloud-oauth2-3-clientid-secret.png) + +5. That's it for Nextcloud, the rest is configured in your CodiMD `config.json` or via the `CMD_` environment variables! + +6. Add the Client ID and Client Secret to your `config.json` file or pass them as environment variables. Make sure you also replace `` with the right domain name. + * `config.json`: + ```javascript + { + "production": { + "oauth2": { + "clientID": "ii4p1u3jz7dXXXXXXXXXXXXXXX", + "clientSecret": "mqzzx6fydbXXXXXXXXXXXXXXXX", + "authorizationURL": "https:///apps/oauth2/authorize", + "tokenURL": "https:///apps/oauth2/api/v1/token", + "userProfileURL": "https:///ocs/v2.php/cloud/user?format=json", + "userProfileUsernameAttr": "ocs.data.id", + "userProfileDisplayNameAttr": "ocs.data.display-name", + "userProfileEmailAttr": "ocs.data.email" + } + } + } + ``` + * environment variables: + ```sh + CMD_OAUTH2_CLIENT_ID=ii4p1u3jz7dXXXXXXXXXXXXXXX + CMD_OAUTH2_CLIENT_SECRET=mqzzx6fydbXXXXXXXXXXXXXXXX + CMD_OAUTH2_AUTHORIZATION_URL=https:///apps/oauth2/authorize + CMD_OAUTH2_TOKEN_URL=https:///apps/oauth2/api/v1/token + CMD_OAUTH2_USER_PROFILE_URL=https:///ocs/v2.php/cloud/user?format=json + CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR=ocs.data.id + CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR=ocs.data.display-name + CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR=ocs.data.email + ``` diff --git a/docs/guides/images/auth/nextcloud-oauth2-1-settings.png b/docs/guides/images/auth/nextcloud-oauth2-1-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..82652a54ff1dafe5e7a490c7fa730472dec7c237 GIT binary patch literal 47047 zcmeFY2UJtvw=N1QqS90Zq$`MkgdiXw(p0L_6a)f6gv{pU^6{Q~>{QtraAn;$(NyECO#X7(S7Gf`gM6OmM7&2fV-hT1wR# z2Zy-f?1kH6nWhhXc-=-EVxwqjU}LXi1;dfFg261TjVx_6l`a9dln6f)d-BRbbLE8O z6^%+YvqS#~Ujf2tPe#Que${$zXQzE+(b~zrb1g0_c5QskRfzk@sa$@b({9Z2@4^_X$XDK%7BlAHk+d|@W62Il}#osH_-;oyY z&n3<_XM5xCl@&4Y^6yUzbu}fQ{JFaQ{x{t?kaawsS3QA6GY>CmIhSD9W6O7g?^$4H z{6?@!Lz7xvH3>qEQF+b7_pbcD+EU224-Z4JO&rEkmSjXL!9hIZj&^%Ps0r8Yu|0qP z%yxE{y@e*1k$EjzvkI)e+itos>7U08m1UdTwPn$LaezSD&p-wmdsphGKUO;(n8Vj+ zCtTL=j$H7i{4F9_h`*yo`ElHJLvc=_&m0VFXX`4di6MRCFjcXxda&j!oSjKle7L$- zsaaTt?L%SZcWKS7D-vySLiqm3vOhUufXNR%s;e9s6)oP8UEbYTZx6bFNJ`PiAg)EJ zijlLb(tir$r*hFj*aVozMMVr*D6+{~C%qIqFkQz)oBSC``9=G(G`Z{ZQ+4t42<*x? zk@U(FgpkmFjS_dHFsDBnd)q~FR-4l*lO3W<;@ct?U_g+gRcTtLt~~f;C_xn;!Ur)d zym-^NABiBN$gsM4Mh)d`EDekrmNc%EI9F-2z zDRe#U>*0^`Y`0o%pxB-lKG~uVCov8bH#p&tZ?17V$RhtBZec)&U5nm&!?CA9b(E^q zfVgqfAadV>TAr>dLWOR&M(M0hLZ2kOYU?bl5kYay-S<&aNO@Z?22dzxH>3Gab$35|E6y+8Ce=A<7N_NCRmY+`? zpwypk;uvfq@s!CGit4#C()5G-5tz_q_5M?=%C>s(y*ZWKi!0qjmenKhxVekRryL^J zdSX?tp%PDPPBsb_%kc6pAJzB_i&)NuL|_>wnCHFY@|EBZyC1WeVG}u*?=0Ult&#H` z;sO^;7dIaBO;o6k3bZGVx#tD0dVfq00Yrgj&7F$6gq9=JxfC5{?9jm>&u5t8sHHP+W-~E-_=JO1p1@*l8 zB!M!_ry2ar=T zM~WohoLb&;1MwZjL00YO7k?N;8=FS^vNBras4ta6(+#!7!Upp5Yj-i8J?I>sIOPkA zUkwf-V%>Yye~yhUF)vM@DQ{y8;mCFBY(;tp5?ymJ-jQ0)O4%0oFz*(oow$v-<56vS z-J=E*NK510OqboQks6IkFgBo*Ayjy^^+vI;G4rxUq1`P^zlNLb|16y>n1r`u$)y#w4w?b`LMc=4SXATH=>(I67hPNLQjLoev z@hpj6?74v1EtTARkz%qSaA3&3w@VarZ!H)lvW1lpumSww=GtY~p|1yZ*;UG1^jkd? zJ##ESubda0IqG3iBl4=p`us}oy1U}5j$P5w&l?SQ8}W}$UpASCo2i~>nz-Au%J;l{ z*Hy4?*eHHpz1+vZvSi$l+OMOCfw&G>SeY@cK;i!9PYZ<0H%%Mp$UYn%e^WG%CniU> zz~I{t74dh_TIQ1u1*OVZ&_hs)I!L2&6irmBymG}zMKs@R?Z)e$4n4F3G-sQ^AY9m@ zn^wB}F2Xajs~VJb%3&?yxItE9>E(l>;uJhiZQ~R6(V2ny8)4Mg#~`9LqIoXZ4CKn| z!#tC2%6?7^%MY^|JlQbKdgIZAhC42TAfp0hI-;mdA5$j&$TvKCfqau{Wyh3aKjjWr zIg^8Fb176W(a#{VwUQu)FP5Ttmn$&k{NNHESpjR1ZI%O9b9@m*zFFIISIng^o|n?&B;M9o|54p=u0`%evp2TtBdH!R zlxLR6D@(KX#BB*;_5y}%vT3egKAjv42yJWLoCLB#rW$z?&+fmU5r*B}Jk7@E&eWWJ zmE}W)!Lr%c=yvS%Fo(0~+VDR#+I%UZEJh?iBar6C*3Z-(Cj@%bTApP&`D(~YN4ov8 z0c@s*S02jN2>Z1$?9ekisbTT$YG<~*lRDei^!3|LaK`$vM}a7|$Fs}QZBsy*acKw} zDzb>x4FUX}o`4Qq^)6=tFW`?kc`DiiXDwVd1?-Iaar=qj)I{A8C-G$cQ`pMczN!x~ z)jsQN2YhWin?&IMC_`3eVaN8ZwEd{-*Ph9W5gpase0Pe%c!L=Hn{@@xV$q=6otl(8 z^8+(xq@1tXuZ$S3wUC;Hu^ZuY>F^}x0rzcoyj^}-3>~~aL6*;IFG@Oa1^x>Xzz8U| z%asnQ^jr~1lXF$`$007$J#H%^*EEapUb0qSP`@)%?K_cIyaM>GYu4Br9XA5*p46Qk zalst`)i9G+lScbsgN4yrZ`m0H1TKhpSp?-5*ZO3(m$y9v@$cy+1G~mfj^tYwHd0eC zeCaT>1;CfZ=6}eQ>;|xaYazafS!_qhglj{6n%(l{tX#1S&$$K5cz@NVie<^6FPHK& zaoGR|b=1`-!2KhJ(07x@_mR@C>!E?DE$endG$Kax^z-%(x$uWcMA(tW&D6}wlwRqjW=T_&YwbZAjTj^a9fGe&+i_L1Q1jKx_UJiw( zgMPV(Y?e9OXokdjY}rbGk)&3E)V*Ardrz}c3bA=NZubL6~XQ!*>po+V)P;Z?(6Ut-KKoKzXN1&%-Jq(IX^dpT@E`z_~L3@)4>||sToo|Qa86oF%04UMb3Q`+lP;CTyw-q)OFM^hiFwDD__ukq7SPo z^IY#7b=fNMKbXCOx~>2Bjz9ow@3N|GoOA(NEP$kkmL2uY4onz@fXS}5iP`FVF6ep~%6lG27ge4@FTTEsr^D}q0^WhWO9?0MU#Yjc zip0giffB+L}fPcB&7NSgUq=65o#KEaW1K-d{Jb{QmQxz||2MmFOgB1O_0z8;L6I0Je zPEN*u&c-HlFj(03FAHFknTq(ahC#JoqY+PY;o!KVZiCN140xMM^Do2xTMxFS;50Fj zH>2HfUhVvQD{H2o>+fWOA3SNOqx~{~q1n&yi}STyNa%Q1N|^EZ3FOz5WvpPV>gxp* zM~%yaWgxU&Gt!}&*!+tLik`Ye}t~m%OIxtw0Xqu{8*`yV)!wQy6VXR@&ZZRH3 zLRoF$nYI#5snc(o@N2-2j=6`u?d~+fAb5ZFuG1EN5S_z36J{n(so_RPoBosncE=+G_6J{Wu#(;5&x(-(N=NpU z;cyJ8a=O`pTC;eZQ`2XXJam$SQnRVR_s&rTrwv=g=jkMMlWp3#e%418UIX@t`Q^3Ro#&Thb(zK4tmmd=JfzF9Md(knS#ceF0 z>0E=H6G6}(p@V1<%Fe+-Ng#Nenw7{GeJKg3m(r(OpkKN)%4hF*XnLh=?rPSH6r<0d z2OE=u*-rhsat2S7Uoyu_>X;g@SV=6Kg zB#_uI2f_s1UvlGOXj z-3O0MQDw14HZ{&_qU|VCZU~Ii8ZXSr(h+GL!lEK}+wJ#<vaI;MN-Py1daA#o|5!?x>-yq980c@&{dXD8f9Vna!-Sm@ zP3XpxajBQhr-d37-^U$1un2_2%b9P4LQ(g+v3hn$o0B>^FdL~$D9Z!3i|I#5DPs&ht_e%)x_ zmprT)*M*plFk!>6b}_>z!_^<@8hrB`QpjwwP2M?@32A;vF9%tMhU4PYcKq71&hi$R zuw13sQb9n7UP3_ZI14HzXT-24Ip6|u3eER~4a(iM+>VG?Jo1CMPS1X2-Pjo}gzlL` zE57i{WfzRY`LFG+wSQ69CFb%EalZ1%SX|rKUS3l`I>I$MU9YVFwn7GN`ZnEQiTz$@ zY{g#n?Hige)%D*=G(u;`D)#d40z2nqKUDVBK)Ml~;I}g%?PSDcJh|hRvGh4Ip*fL| zbIg%q8FR`w?;Ywi6PZF2VUAf-ceY=bo55CvksgSNT<h2ey*uy;1gOjh;VXOen|eY z52u47Y%-=$2C57x(y{ff8rO1Q*fbv2nsy7}Gxy|Xf_R(Br}mX_GwMficHD`|U&a4? zU^ZW6c}P_x*CB&xVeO^rs=tX0GX{AVl3ed}x&E+FMP$m;(s|+Acf;tY;~BC=XWQtF z&cZ@fc`!bXI}s29egw&W0dRp#_*kL-B-IxwzDC}L8-(OXGLA#{u0)$=4d<5A&iOXE ztT;36MNe*1tfVTA5D6AIRrqww8yWTux!m~XK<-sl&}-3o;Ns=5rOd!(82x=h@`LD+ zoa<9IAg0p&R^#*2`7p0u&IePzuS9S?(ABYC)NQKbI@VcA)XIjO%=J!|{rk)Z;Zy;| z0!qr3)`b4PERUM27x%_hwK-`=@B6V^7pI?8sfF52hUzHb1Cbo}S0slIEo{B=FihpV z9CU%0YAfHimZx8>=);f&t4sg8-4mf#Y{96k>f||F>Z6nqfeKv#_U1->x%GizR7{pQ zg7kcXsIz@)4fP`L1nC7F9Nufch8=P*Lp4XXvhJ`usEzA9;XD8I?xnL~JNv~{e0OQr zca(+ghrrqdz#511@fXS?j8|cu{c{V`1Tai;a`ODXdiXvAfEEVt|CT`2%vQdA^JGcg z3+6i!k{|Kn5<(nRe+^27g~YDzr7vV2cizmP*U-%F;WDhSfvBuiZu*ZoyJnn(lL2sr z@YmW@*Gnr$U6H%=YCRUW4C@(7c;km2UBcY7sMYC{xcgX5ig3U&Jn~(FPAp`|6*+L< z-mz8d$!w=xWNAB7xu2GN&egq$^EmFZ0POjx143YbXWp+a8S!fut?nLnVK+wvB4(Je z`9deh+T;X^2JT-ke7({34*d~4w5eowk$hsw@PN(z{`EFUM=a;{SUl$*wv`HY`(m?T zlnk4SSMxQ%Qh90rNV2p&^)$RX7UOSEeZ*Xpp8L~<9r6>$;(4j--rQu7O}GBihqU_y zshZi))qO;_c|5&ZLbNA3cXV%!tGy!Z@_UKvq~Veb-rwD(C*2_5}oE^6nUUfhsx`y|CwKIpKPLRfpc!~!YcG!~G77C}y&Jq?TA-Tv|R)8MhjMb>) z!=xmm3lymW^9`jA&eigTuJ3RQiR0kps{Zz%5>02g6TnwUr|#ns+-JH1etLqY;hq_tMddq zwFXjwD30v-%M&Ru>8=XX9GP!imBWAVdRb93dVGAmy}kYT*hNjNs80L-foff(L+;k0 zwc5}H@+8!DL4owe{XRme28`GrfSV-@?&|1>6>`RWs$VRPA&e&=9eb0%_2Q1gB8iQ> zPwk_@Zn*u%+ZwLx{D_mO>Gm;5S`2%^T|+ru61IlXVddL3HQ>|aL9_g%gC#=^ih7;# z2W2G`4YDwpi*rBbdn{#gC&Q7+3ALHUp-nC;O{T2HrtSl~sZr;aaRCZnsB>);gpN*= z@=p>nx-?@2BB!RO7lBV-@JCUAp`V78dRov2l3B1_Mi2}f(2LYafK=RvCs(3xYf)u( z5l`GGvx9Fw0~y6#;B>CIJDMRkrycF#+&0kwvb>Ks9qQN8=g<4cG!tiMsSSf6Bvr@rP z06H#`0fL(_&=M*)hv3?9*`?&~5uC{Qj!b=8+iV&-)fNgaOd%A!DHj`%X)v8UW5qSF z9X>Tkn)k^<*V@4W_7}66`k}0?t=pgh9>kSsYQ?ns_DL~Zg^3R*COVSR%NFam@v8z) zLrx_=Lp(xCdncE12HXR;f^*op)hnz z42_x=0qTXL08Oz}6z_rcl%pVYNQhmiJaYwxF?jg!)0n5|*tXgBpUY6>aL4>4h3G>; z(wz3|&YFtQ;(wJVPZJDo7(hS)4hRk|Sdb~o&dg|sHNdYwmFNKwy{&zRj{)VBP^k*98m zTTpds;{C4Jbs8=@xUeSn$*bu(_U(oSwG8xIS^oB)?d(-z!ZyhqOiysmpIFxB* zk!2SE7tHqdcSI5Zi>&4xYJlj%nzXD8YtP}x?&}p}ASyBH8{bHl9#)^(f*<%Z zFWsK=j$+_clyev*^V@luI%mn_r8}eR$O`sF9ik?4Z3XknA|rdXRF#csbKI>*2U;n{ zkjfh?m=bXl;mmIQIWox}7#KhkwSK=J-!=%v*lo?q*s{HONFvbZ@@SmWHz@b(=v9@O zP}V|U`@X!jX1|Xg{nX|L%n+HfiYkVBvP9}6c=gH+Ezh=Hul0PJ^S2Ncrmue0cj_MQ znf@lldj6@|e0iOrf2kmXk6c)VsX2}MkgkKHb8nz`M^S6;h>;2D)x;$r=DO#9An6*Y zROz^S@MY_p(#-8JTubz)CC>Tv;=aOkLrh_`Mk0R?Olr(a=UU>rh2g{3)x4ut+j#0# zz3`rCg+M!HR*eCrlx7%;j>Ed0jlOSrkL!A1F0(*nU>tFGDdOQIR?6{uVMfHtWy@Dh zISBKGhArvyTHBB6FjqFRMr5$B>vl?th<5odLOjaBAv5j)0-PByLA z{L0s&cUwcdUtG~z>$7J19QXICJD|9yBPgs*8hd+u=WvvitBMxeG*>0p?+AC;jK*Ij zQ=Vx)`S2p%!J16Rk7>ax%9JCNYJ{(CR^YCs_0p@1!_#&<1wA_9{_geYQFEe263z*V z=WA*a@hbMh@{b|RIyyoJrJ z7MJ!%8J>;mfzJtw2AVH4cTAY1y*O$C>yl0EJaPWKo2{VNwDHu4M1xAf(yy^x5q4_- z_S7pe%5)gl{E?RJvkFc59HrQo;I|#97sVBaa!U~C?tywBy@{%#RMm53T6tHiaF;iW z@?V#d*_2-;V&y9shjofdE6Y{B90U}4XT?8_Mq#Jb(!QvVksL*zXa?F{ayS1?cV${a z<%qQXPQS7yt0DDS`M7y4L%r;^tfQ$$BJ-?8kxx_Ze-x~KUbB2-c%Zs!|6V3daN}bxmO-!^psJ$}CBcj97)Op8a99nk9EX`FC$V zU+H9CP9B(oGswD~V!(uI(f;D@?OfRl^F(~L+jGXwk8O`H^+Gqnj-OsFw8cE;sCH$s_8=U>sE2p{4jVJK*n<0gc zNxd~k!^NDDH6sQwh-cxn8gb6Ald{V0ezwWn5!(D@C!@B1s1^oi>n7Mt`xs6^(IRlr zctLGyKd1|dj9;heol_=Y?EXGY5<0^w%wm50O7OnOAOzyJ>kHAbnK!8lTpS*RemP)f z)L`G8A_*h%XUBhqrx=_Z)G7ywgeIM))7srpgFQM|;kO?4y)%M4^&BUR7wxUU!&cQrF5pnv?Otajn zH7a$54@4Ky_eT-T&+N!@A2=c;PX;Vc%G50N%6a>dex9MhZW(hgihR@4-wf-e>wQnN zvIsB$JyDC2s-|sOH!LF~ z`9{1{$(0u7=qrS zkKx?54U5`9C$^54|Kx3DDfyL6L|IMWt-H2X)_kT{7KjwEU6Uz3dQPOU%z~}a0>eaR z!K)dT%i9e|8BwjnbUgW^r@gqV5liQ4k|pLvpVPYBir#9?YHn^`U^-lwc9>80@{%q` z)KCDiW+^aC4@4iq9GL6RT#tNI-*OY|(ZoAvs^^++V|`<8y*Tc=wW5q{U@sktCWO+s z?B?>TR14<#ggm?L*I57Pz}9!LDPxta(}`2c6SAAZo>bFI8Pbi9)NVH;y22(NXY+*^rwN#? zkE(nXtXZ*~*~;~fO?5_wuZ3h2>1)T*;$mCvw!7y|=PW3d@us6w2}`d%akgs?Ra%Z2%qx{j)ItohYO z54gpAbc<_N|I&Cuw!}E)&qufX(fcdo^V)7LuU>OV*y1om>)yCE9PuWqIlC@nnp`g> z#ZE}`G-6Z=<-0YTBid@nQf4cgcEVR_aJtq~H0?&5d2f`zt+)!b7Fw%$UrC95i3s#+ zj_unkrQ}hi#3h%CrdUoH4kG_f=6DG=!+>ZN^~G12T3#Q=cUOsE-tNWM%)hy*Q#hqITS6I7jj;HQXn-x)0baG9zxD!1%G~Jy z%D)sKoBykd#Q*(#?za~JCi`D0f&A~Bu&l2IT~<~GAm!Ql`T5z|S1Kwq8uX9PfGh$I zq_j|rFnA;k7XFcBN#DR=I*{Hy;p{8ZUtg7#mq&@uk}}HyI6F8fC?Bu5?cSn}yUO44 zPf1%T$SYj+1$hRLcj&sSW@b0Hj|Dw;%;mlA`>stsoQJ69lT(Y!xWiq{I}Xrj#ops| zTnNSA)ZpF>7eNbQ7K?(ZvM$B|=7=TC$_(}#8ghh9XXLioA$d4pq_{TLSw5m`V!i%;C_W6v1oUG)Jrb#t$5iHk@ zs)VF>wRW@~+O7O~J(6v8QIPr)&=CU39KnrT+pH;ivWkxs!U;^+?f zgJ98-W>|wykrGtXW$^l%TQ*46zR%Aax8LV)eds0hEjuSz35C8e%9bdZz3t~W{2{)b&}sz)r`B3*tg)aYkpvV;AsCM zx-f6!4kqI`d1h<%wPOvKs%yN`fj=d>fiPF%k4R&rr?;wt^0~u~?Z|+HOjT9mSo%sU zx4jw)6^3u(p+w=`_+UmKR?5|^w_7h}U)#l29~MU6l*7wG3(Tx*D1H9JSF-Yw?Ujx; zv(fA4V?_U?Xl2%1&0h8FoVBWdCZn0&(wF4_&h^mukG$03&~XV(LM`75ZEeC-b%n6k z*Z)u}d-qyk?zVrEzW?>2;QzV4#q1SyjZL=8RQ{V^Q7P7)?>XwOw4grup7RMDw)k@P zg;Ue}{7V31=J~sx5$KEZ#Z(6DloU{>7>#}Gfje??3JEcWE9*_}7`KW74a=E8N6n9V zaKY`f;sT6Mrf}YIIlK)O)Pm-T{DS%@bO#`~%70gzsjneZsa)_@FAF!uP~J><1m+yw zSyQ)seT1O}nfS-b8B8kW%)qu+(|j0&|t1yX;Ve?tDu)lj+-ej)#;=CsKEx$E*S#8D=LkKH zv0Hj+3}ZJWi`>f_MV(j^)O4;PRkP(r8VT zHg?7;QK(C_p{O46m2u0;gr?6V+(9a*4+*9~D$bNVAAtNII`&jep>fgCNlZ8|0N++n z4R`!fH^bS1jQFzc5K7&a{CR9Pz#kBdYO8+0`3KI!fH-k*iroP=5dxBs#`y#UA483q zeDc6u$UEUi{20<$ymFEyCa?2D&OI!jz?<*m7L(kj3*3|eozdLHjHDLH@34bA+kMbX z(_61J`kyqsGX#qFviT{c?c`jzsFR}}p=-96hIqjoa<=4b7321^ zf(qO?IA$q4P3Wa16F|_U02|itxCV3$;AHkKoyCWRIuCsLn1@f6gCf=*sk&K*D`&C; z@y(r_Lc~&#)cGk&;s>>=9Gv~!(X9h`H@ z9N&{uP#74_8+V(z+1b6p@{df6a;EqG%gteM$Jejl!(ewsL~4`_W#f<4OBLy>`Hym$ z26<$8+Rs8E7lhjP!dWalNW|8s>$S*1rf;G_brj;4FYWL!_s}-&x{-6 zd3&9Cb6KMHSy8wTgZ{cq*|S~NV^wX0k%mX4ceizn6AnzMPLguHWhY6uD6ilWj5rn) zN}bha0Jya6wcO&SX(>k3Xsbc*y8@GolMny$hdgk8a{rf)c-vZARU6DBLReKhI{f|R zb?ewjpKE*+ht8=#@FVH+zh+XbeGM7dv4kHcit{k=?@C}$az%~{oW7BZ0NqBOv60Kf zk@|ksk4-pEBVB(SpB;U8Kzb#kw6gR*B&C@ zpipjRy8<{X$BUN*1R6~jYG5Wu1%WdJq=@O&TVPp3O(-Dx{j*brxbaL0$dQtglE$uN z3X;zB#i5(&lp%TCb7iQK2K0$ZZolD_H%qdrj%0A*&AI`;@{V|bwS8FwWzZ4 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 KX4#Dg&;JjXZpvu@ literal 0 HcmV?d00001 diff --git a/docs/guides/images/auth/nextcloud-oauth2-2-client-add.png b/docs/guides/images/auth/nextcloud-oauth2-2-client-add.png new file mode 100644 index 0000000000000000000000000000000000000000..7909fa62898a1bb559d9e5b2a99190a2ba1535de GIT binary patch literal 11684 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 literal 0 HcmV?d00001 From 423956c44d2589daa5436b28af394151cb88e23c Mon Sep 17 00:00:00 2001 From: Claudius Coenen Date: Thu, 4 Oct 2018 11:35:24 +0200 Subject: [PATCH 4/4] details about OAuth2 in general. Fixes #930 Signed-off-by: Claudius Coenen --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index ecdc8c7..25388ec 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,14 @@ There are some config settings you need to change in the files below. | `CMD_SAML_ATTRIBUTE_ID` | `sAMAccountName` | attribute map for `id` (optional, default: NameID of SAML response) | | `CMD_SAML_ATTRIBUTE_USERNAME` | `mailNickname` | attribute map for `username` (optional, default: NameID of SAML response) | | `CMD_SAML_ATTRIBUTE_EMAIL` | `mail` | attribute map for `email` (optional, default: NameID of SAML response if `CMD_SAML_IDENTIFIERFORMAT` is default) | +| `CMD_OAUTH2_USER_PROFILE_URL` | `https://example.com` | where retrieve information about a user after succesful login. Needs to output JSON. (no default value) Refer to the [Mattermost](docs/guides/auth/mattermost-self-hosted.md) or [Nextcloud](docs/guides/auth/nextcloud.md) examples for more details on all of the `CMD_OAUTH2...` options. | +| `CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR` | `name` | where to find the username in the JSON from the user profile URL. (no default value)| +| `CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR` | `display-name` | where to find the display-name in the JSON from the user profile URL. (no default value) | +| `CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR` | `email` | where to find the email address in the JSON from the user profile URL. (no default value) | +| `CMD_OAUTH2_TOKEN_URL` | `https://example.com` | sometimes called token endpoint, please refer to the documentation of your OAuth2 provider (no default value) | +| `CMD_OAUTH2_AUTHORIZATION_URL` | `https://example.com` | authorization URL of your provider, please refer to the documentation of your OAuth2 provider (no default value) | +| `CMD_OAUTH2_CLIENT_ID` | `afae02fckafd...` | you will get this from your OAuth2 provider when you register CodiMD as OAuth2-client, (no default value) | +| `CMD_OAUTH2_CLIENT_SECRET` | `afae02fckafd...` | you will get this from your OAuth2 provider when you register CodiMD as OAuth2-client, (no default value) | | `CMD_IMGUR_CLIENTID` | no example | Imgur API client id | | `CMD_EMAIL` | `true` or `false` | set to allow email signin | | `CMD_ALLOW_PDF_EXPORT` | `true` or `false` | Enable or disable PDF exports | @@ -298,6 +306,7 @@ There are some config settings you need to change in the files below. | `heartbeatTimeout` | `10000` | socket.io heartbeat timeout | | `documentMaxLength` | `100000` | note max length | | `email` | `true` or `false` | set to allow email signin | +| `oauth2` | `{baseURL: ..., userProfileURL: ..., userProfileUsernameAttr: ..., userProfileDisplayNameAttr: ..., userProfileEmailAttr: ..., tokenURL: ..., authorizationURL: ..., clientID: ..., clientSecret: ...}` | An object detailing your OAuth2 provider. Refer to the [Mattermost](docs/guides/auth/mattermost-self-hosted.md) or [Nextcloud](docs/guides/auth/nextcloud.md) examples for more details!| | `allowEmailRegister` | `true` or `false` | set to allow email register (only applied when email is set, default is `true`. Note `bin/manage_users` might help you if registration is `false`.) | | `allowGravatar` | `true` or `false` | set to `false` to disable gravatar as profile picture source on your instance | | `imageUploadType` | `imgur`, `s3`, `minio`, `azure` or `filesystem`(default) | Where to upload images. For S3, see our Image Upload Guides for [S3](docs/guides/s3-image-upload.md) or [Minio](docs/guides/minio-image-upload.md)|