From dd19067f6009e72fccc329f9bcc24dac6090738e Mon Sep 17 00:00:00 2001 From: Jainil Prajapati <86187588+jaainil@users.noreply.github.com> Date: Fri, 26 Sep 2025 08:06:48 +0530 Subject: [PATCH] feat: add Flatnotes blueprint with TOTP authentication (#387) * feat: add Flatnotes blueprint with TOTP authentication Introduces a new blueprint for deploying Flatnotes with TOTP-based 2FA, including compose, template, and metadata files. * feat: add Flatnotes self-hosted markdown note-taking app --- blueprints/flatnotes-totp/docker-compose.yml | 23 +++++++++++ blueprints/flatnotes-totp/image.png | Bin 0 -> 4974 bytes blueprints/flatnotes-totp/template.toml | 28 ++++++++++++++ blueprints/flatnotes/docker-compose.yml | 28 ++++++++++++++ blueprints/flatnotes/image.png | Bin 0 -> 4974 bytes blueprints/flatnotes/template.toml | 32 ++++++++++++++++ meta.json | 38 +++++++++++++++++++ 7 files changed, 149 insertions(+) create mode 100644 blueprints/flatnotes-totp/docker-compose.yml create mode 100644 blueprints/flatnotes-totp/image.png create mode 100644 blueprints/flatnotes-totp/template.toml create mode 100644 blueprints/flatnotes/docker-compose.yml create mode 100644 blueprints/flatnotes/image.png create mode 100644 blueprints/flatnotes/template.toml diff --git a/blueprints/flatnotes-totp/docker-compose.yml b/blueprints/flatnotes-totp/docker-compose.yml new file mode 100644 index 00000000..c9d658b5 --- /dev/null +++ b/blueprints/flatnotes-totp/docker-compose.yml @@ -0,0 +1,23 @@ +version: "3.8" + +services: + flatnotes: + image: dullage/flatnotes:latest + restart: unless-stopped + environment: + PUID: ${PUID} + PGID: ${PGID} + FLATNOTES_AUTH_TYPE: "totp" + FLATNOTES_USERNAME: ${FLATNOTES_USERNAME} + FLATNOTES_PASSWORD: ${FLATNOTES_PASSWORD} + FLATNOTES_SECRET_KEY: ${FLATNOTES_SECRET_KEY} + FLATNOTES_TOTP_KEY: ${FLATNOTES_TOTP_KEY} + FLATNOTES_SESSION_EXPIRY_DAYS: ${FLATNOTES_SESSION_EXPIRY_DAYS} + FLATNOTES_PATH_PREFIX: ${FLATNOTES_PATH_PREFIX} + expose: + - 8080 + volumes: + - flatnotes-data:/data + +volumes: + flatnotes-data: {} diff --git a/blueprints/flatnotes-totp/image.png b/blueprints/flatnotes-totp/image.png new file mode 100644 index 0000000000000000000000000000000000000000..3796c5868bd5055322ec054f9a2b7c2d6812b444 GIT binary patch literal 4974 zcmV-!6OrtRP)TFU9Gy^ z->;&GOfuk7^jAkrhEHp)d4nKTSJx`FY>QO1)gqQ6NMUA@_iq39CHGAdl1v7MnMjl0 zJMWx(?!D)pd)__wdq$)3uWW&`1u`s9c8Uyhlmlf85S5*x+zQGT$g)7$DY6Vw4wfxo zJ4MUNdDk9#dfw)ir|0c$d1jvIRzR6{+0dc&{THwf?La!kAm^yNgoJFpSCX#FTbSbaLp!JaZ zE@B?*C?IGX=*I=oeZ=&=*&a^|!bkUXL2fxZNvLnyII;`Gm6V9^^Dmz*>t@56jbAG% zT)c~7Meao)sGTp;8>K=9Wsx|DYUaLB|f1qCEi)%=qSF} z?a)0!usB1ND_DP2(Pdn=KxZv*1Wv)^9##W~Sl8LIj&=H8ssNq!or*5wvIRP8flfPx zcIL$-Op~l#a?0M>;*Mc@ft5o_yi04vD4q)BK&FK~sT}+=>*y@N!gA~m3p@1DN$vjJ zopuU+&=@jzyxRSmW|g?K@uico&DyMhnNL+o;tB0J#h17tYRpn`66=}}5*G{M#x18{ zt9NcVV#LBxL$pKey->th*?=>Ve6kid8ht{Mn5`$=_BoY~i3cdY!m=C{FL5Z+e1(b& zMVoJxJPDzu*wxTwT{sfkDRlvS09X}Xy|I0xK_)B$macvC1e9?n@^1lr1Q1v#e+GCr z6fu@8Tea!jLSjNq#tk8-emq;Hg@LClzKxq=kEpnOSZ;b`nYIAZJ$M-3ws zjV)@37^Cy$%g3*8YW9Vru?Cd?PB?1p2Z&I_I2ei=FEvD8zA|6F&N)R@U(!w=Oy-Ag z<&)Qa{3@55na3%}DtLtAOKcIHLr3_N&Oq+gJtXK!G-^+#7#_?_)3LDM5RS&4mX4Yk zPjrHtT>m0s3wDp}UX zP&D?8bi@?DAZm!lrfP{V{(v&%8f*j-4+Ibs^#=@LrdupMu>)o1-Kb!T26C!?$Sd^# zBFNyg6klQzJd_IjV818O7~e(`xnXiX5%-3WuMkl+6W<}2Hlc3MuH5k2Nz}nFygD{2 z95uG1@55#W&q4XJ>=R`+W~ySM34*j2(b4?7jN(#dqI70Z~jEbQA|VB zSU}PlDC74zoZv0+v*wR{lkU>jWTZskklTfC0HTPetwqn9mPv5iLH8nj)az_fID3Jk zyiS5PW86Dr^YCKg8!KG25@f*#qtN#R@hT?jrxFSwc0<-{B*gC&PhylgFC2+&lujwb zT?tFq8vVo3*y}{>jD&=rAo?YA`G1hk!^G2CS`NJ_^Ek{bqCT?e0%6j6u;EyEw?A*A ze)1e^mtw)D_ru};O@$Tilv8M@o=4X1_f_5=#d9Zl{)DYoR)B{3sZt0>D5opF#By6! z#TAPi(2L^3EL7?7fnFm`jE1~^L7(@s)Rr$3iT1l=%wxk53le zRQiL}-t!82K=CCG`aIu4{9%ul5UYtebqz=Cu>{?kN<_gvT-rxRIl9T9y2AYvM% z$3+w6`7y=onc2Rj0sVI{@zqiu;L@PqTOIIwPKVRqud*}K55ig3fI8(A+;1Ssvk4{e zc*a8TLRCLOv<@F=L|}^du*Fos=Y0gd^}}gtrzyIN@i3IL4UP4ZTA%m%blKAJf9!U4Z`0m{8og@s7WQ?$gzI|a1jKK)62@tMqb+yffQ5KGV`I7CBLud0H_ z^%l97wHrjFdcAf|mr<vndvS?E8NEBIf}+q>D@Wk zjmek>syK<^ERVqv=bB`lAM|@?N}htEoq~IxV&@TU&h*s|m*T6?+`KdTqSsm%^mzg| zUw!%hLiy_aV}7gRnfXjbcPSRMJ>VPrMj@HAYsPIQ5{|C9=HAR!+VqYenKo@?haXha zbY~ickz;B;9Rx9}I5aqiR=jjvHx<;&8ATv`LSy5Ws&tvA&dz!P z{L=shACy@?*EfDgcA}!3LXHrwp~)#~#n>QKjK9kP_h^jLz4~O!?a^>Wr75~of$Z(V zVt0Q!r6W^Oi#b%>X&72ule;$=#RzI2K}1<$h z<%-9|LeV)fTge86NHoHX=^$7+pBes9^4f&lp|a!m>8)S4iPUTE4!kNjv)+P9kw=zrEnLc5f$ZFYJ|Qb>fb9 zBDDIIq2WmL^>RB8I~S2Kc4aIU&JEmSRe!WFX9Or%hM>5LXR>rfOWd$}^NCEr{%N}ZNx|iZxmQ!Nu zdcX!U-$Q#ao$t_Lf!&dytENv8ove6)8qZRU7BLl0;j5s|Vm(3I@Etz^JO>A?O~oCCayv!q0g4-oDe=x) zvOeC5QDHk#yoJQ)*fA_I2RN)oV06XwY598Nv~VQ086SETF$I|EA0gU#1kndD{zmj% z8_FTc^oKN8!|)sqpj( zHcQhbO-Lt5lgK`h%g%y@^LRmgn;=4uof*qar=u>{F;N)bcjvN5%-O9{DRVo8icQ0E zT_Fy9mc}{0NwZbJ8F-XaOF`QNi~q8i{Q;aiU;%zEj9(q}d9MljJrAG_;2SxqOOkL` zkh9)^f~jc~sA3)=+NUZ^=pBp6ls^p`rlX5UHein+>J;d@JMWq(=&N25#My|@%+ufi zv(afS1^g;QBj&SB;uqxgl5~D?PJtRw<%!tW=-h~#UeK3`Zjkq4IL#rLf&ss0aInVv zuXQ!m(Jxb7(siAEjmK$-;187do`8#c1UqX068uSVnewN?2@$q) zq;)mpwqQ-TTk&5H<#uBCkJ3~8JqQh$qaGVE=sZ9l&jscP9)Q&z}F)}-w#uVC5NNoyWebmu)b9pP3 z1^qykgOT$oMQ39{EYyor}&NJG4X)bgYJ-|3xS;b>!iIOju^YKgS0X` zE%=SXihm3}mhX497QAj_*9&JEN`}dnbDFLxW?ro6M3zb7v)m`<`oLlBPB3T;=>smX z9fbR1E8B%xMVerCCpR3@SS3kXM6W5u1oN!=$R=kSQ1K-W%fGXT#N>sx;WFG2%=Ay# zLs*%qbo*T`huzRramNbFONWAKzLGCYb4~s8%^5puDsFky=zFN;pzP7lw|Rm#V`HJ- zrgOXmv(reJX=?qN*hM*#IV_F&b`^kQ+!%_)9#!FNj0QgwyI##UpXn z;Qx@j@3>eU#EHs4y`6q^{1Hh(7+HGY^7VkhF0Tb4rnS+iUjcZ6jAbm-ew@zeGx3HN4` zH_5t5kTy$CE9p5ko}a_cizO`qWywEw+74YFvUP~Wri7!h2NB*%Oiv*`dHYq+A7S%< zrmUY8k1s+4|46bKqmQXs?;`&S`Q2o_LXqa#p=fMT8?}ANl(vpxEu(Yl*eOs#;_WDj zJ%}aVG4UOcS4qx~X9R1iH#tENML7l1eW{)|DxxS8%^Gx2#3o z9w~2kG7_qEg%;ZKa-kJZj3FUHD!sxkGoJC6d5V9e*vvY-OP3=Xu&W3i`bRWc{E^03+T#sNd}t7U6D}^;N{p3{D>RK~~m+!Mdr{{|kMG zVJdSOWZL!9HEnRAOtrr8KMTN~8tWG^i5uXIcR`Q&g6Z2rXoFFoL4d~#$xv~rdM$>$ z3xuwn%bJ)XWwGEojp+*3+$SNBib zkroj2dEbIeyMA+O#{Iq+Idf{p{<;>OL(uPC1U()K)_9&Rc9hB`UpjQ{6z>`-tJYr~ znuC!HhknVw;>(o*JPjVS4Y(wpQqrX)3{qC2M=YReEFSKWl5-SVO1k7wugv-zv4Ga= zrX@{e(IoWJuVP{HdAHYF(C2p9(81QF+Z8AmShhf>1+b000I_L_t&o0K@w5!V4dsp#T5?07*qoM6N<$f(Emm{r~^~ literal 0 HcmV?d00001 diff --git a/blueprints/flatnotes-totp/template.toml b/blueprints/flatnotes-totp/template.toml new file mode 100644 index 00000000..8ce4bc9c --- /dev/null +++ b/blueprints/flatnotes-totp/template.toml @@ -0,0 +1,28 @@ +[variables] +main_domain = "${domain}" +username = "${username}" +password = "${password:16}" +secret_key = "${password:32}" +totp_key = "${password:32}" + +[config] +[[config.domains]] +serviceName = "flatnotes" +port = 8080 +host = "${main_domain}" +path = "/" + +[config.env] +PUID = "1000" +PGID = "1000" +FLATNOTES_AUTH_TYPE = "totp" +FLATNOTES_USERNAME = "${username}" +FLATNOTES_PASSWORD = "${password}" +FLATNOTES_SECRET_KEY = "${secret_key}" +FLATNOTES_TOTP_KEY = "${totp_key}" +FLATNOTES_SESSION_EXPIRY_DAYS = "30" +FLATNOTES_PATH_PREFIX = "" + +[[config.mounts]] +name = "flatnotes-data" +mountPath = "/data" diff --git a/blueprints/flatnotes/docker-compose.yml b/blueprints/flatnotes/docker-compose.yml new file mode 100644 index 00000000..be5090f2 --- /dev/null +++ b/blueprints/flatnotes/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3.8" + +services: + flatnotes: + image: dullage/flatnotes:latest + restart: unless-stopped + environment: + PUID: ${PUID} + PGID: ${PGID} + FLATNOTES_AUTH_TYPE: ${FLATNOTES_AUTH_TYPE} + FLATNOTES_USERNAME: ${FLATNOTES_USERNAME} + FLATNOTES_PASSWORD: ${FLATNOTES_PASSWORD} + FLATNOTES_SECRET_KEY: ${FLATNOTES_SECRET_KEY} + FLATNOTES_SESSION_EXPIRY_DAYS: ${FLATNOTES_SESSION_EXPIRY_DAYS} + FLATNOTES_TOTP_KEY: ${FLATNOTES_TOTP_KEY} + FLATNOTES_PATH_PREFIX: ${FLATNOTES_PATH_PREFIX} + FLATNOTES_QUICK_ACCESS_HIDE: ${FLATNOTES_QUICK_ACCESS_HIDE} + FLATNOTES_QUICK_ACCESS_TITLE: ${FLATNOTES_QUICK_ACCESS_TITLE} + FLATNOTES_QUICK_ACCESS_TERM: ${FLATNOTES_QUICK_ACCESS_TERM} + FLATNOTES_QUICK_ACCESS_SORT: ${FLATNOTES_QUICK_ACCESS_SORT} + FLATNOTES_QUICK_ACCESS_LIMIT: ${FLATNOTES_QUICK_ACCESS_LIMIT} + expose: + - 8080 + volumes: + - flatnotes-data:/data + +volumes: + flatnotes-data: {} diff --git a/blueprints/flatnotes/image.png b/blueprints/flatnotes/image.png new file mode 100644 index 0000000000000000000000000000000000000000..3796c5868bd5055322ec054f9a2b7c2d6812b444 GIT binary patch literal 4974 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 literal 0 HcmV?d00001 diff --git a/blueprints/flatnotes/template.toml b/blueprints/flatnotes/template.toml new file mode 100644 index 00000000..6749da36 --- /dev/null +++ b/blueprints/flatnotes/template.toml @@ -0,0 +1,32 @@ +[variables] +main_domain = "${domain}" +username = "${username}" +password = "${password:16}" +secret_key = "${password:32}" + +[config] +[[config.domains]] +serviceName = "flatnotes" +port = 8080 +host = "${main_domain}" +path = "/" + +[config.env] +PUID = "1000" +PGID = "1000" +FLATNOTES_AUTH_TYPE = "password" +FLATNOTES_USERNAME = "${username}" +FLATNOTES_PASSWORD = "${password}" +FLATNOTES_SECRET_KEY = "${secret_key}" +FLATNOTES_SESSION_EXPIRY_DAYS = "30" +FLATNOTES_TOTP_KEY = "" +FLATNOTES_PATH_PREFIX = "" +FLATNOTES_QUICK_ACCESS_HIDE = "false" +FLATNOTES_QUICK_ACCESS_TITLE = "RECENTLY MODIFIED" +FLATNOTES_QUICK_ACCESS_TERM = "*" +FLATNOTES_QUICK_ACCESS_SORT = "lastModified" +FLATNOTES_QUICK_ACCESS_LIMIT = "4" + +[[config.mounts]] +name = "flatnotes-data" +mountPath = "/data" diff --git a/meta.json b/meta.json index 014bddd2..f426816a 100644 --- a/meta.json +++ b/meta.json @@ -2003,6 +2003,44 @@ "ddos-guard" ] }, + { + "id": "flatnotes", + "name": "Flatnotes", + "version": "latest", + "description": "A self-hosted, modern note-taking web app that saves your notes as plain text Markdown files.", + "logo": "image.png", + "links": { + "github": "https://github.com/dullage/flatnotes", + "website": "https://flatnotes.io", + "docs": "https://github.com/dullage/flatnotes" + }, + "tags": [ + "notes", + "productivity", + "markdown", + "self-hosted" + ] + }, + { + "id": "flatnotes-totp", + "name": "Flatnotes (TOTP)", + "version": "latest", + "description": "Flatnotes with TOTP authentication enabled (username + password + one-time passcode).", + "logo": "image.png", + "links": { + "github": "https://github.com/dullage/flatnotes", + "website": "https://flatnotes.io", + "docs": "https://github.com/dullage/flatnotes" + }, + "tags": [ + "notes", + "productivity", + "markdown", + "self-hosted", + "totp", + "2fa" + ] + }, { "id": "flowise", "name": "Flowise",