From e3f1ede0e82056130769e5f967be3ace16633256 Mon Sep 17 00:00:00 2001 From: zwiterrion Date: Thu, 6 Jun 2024 14:54:24 +0200 Subject: [PATCH] rework documentation --- cli/README.md | 5 +- .../app/builder/collaborate/_page.mdx | 8 +- .../app/cli/getting-started/_page.mdx | 11 +- docs/documentation/app/faq/_page.mdx | 109 ++++++++++++++++++ docs/documentation/app/faq/layout.js | 7 ++ docs/documentation/app/faq/page.js | 20 ++++ docs/documentation/app/globals.css | 34 ++++++ docs/documentation/components/Badge.js | 7 ++ docs/documentation/components/Badges.js | 4 +- docs/documentation/components/FAQButton.js | 21 ++++ docs/documentation/components/Layout.js | 2 +- docs/documentation/components/Searchbar.js | 4 +- docs/documentation/components/Sidebar.js | 67 +++++++++-- docs/documentation/components/mdx/Heading.js | 36 +++++- docs/documentation/components/mdx/Pre.js | 9 +- docs/documentation/public/release.png | Bin 0 -> 86005 bytes server/datastores/postgres.js | 27 ++--- server/datastores/s3.js | 7 +- ui/src/TabsHeader.js | 25 +--- ui/src/TabsManager.js | 15 ++- ui/src/index.css | 1 + 21 files changed, 346 insertions(+), 73 deletions(-) create mode 100644 docs/documentation/app/faq/_page.mdx create mode 100644 docs/documentation/app/faq/layout.js create mode 100644 docs/documentation/app/faq/page.js create mode 100644 docs/documentation/components/Badge.js create mode 100644 docs/documentation/components/FAQButton.js create mode 100644 docs/documentation/public/release.png diff --git a/cli/README.md b/cli/README.md index 4c87587..64c200a 100644 --- a/cli/README.md +++ b/cli/README.md @@ -67,7 +67,10 @@ Then open the content of your `my-first-plugin` folder. You should find the gene You can now optionally start a new plugin from a template by appending `--template=[template-name]` to the creation command. -If you don't pass a template, Wasmo will list the available templates: `js`, `ts`, `opa`, `go` and `rust`. +If you don't pass a template, Wasmo will list the available templates. There are listed by product : + - empty template : `js`, `ts`, `opa`, `go` and `rust` + - Otoroshi template : `otoroshi_go`, `otoroshi_rust`, `otoroshi_opa`, `otoroshi_ts`, `otoroshi_js` + - Izanami template : `izanami_js`, `izanami_go`, `izanami_rust`, `izanami_opa`, `izanami_ts` ``` wasmo init --name=my-first-plugin --template=[template-name] --path=[output-directory] diff --git a/docs/documentation/app/builder/collaborate/_page.mdx b/docs/documentation/app/builder/collaborate/_page.mdx index 048658a..d994964 100644 --- a/docs/documentation/app/builder/collaborate/_page.mdx +++ b/docs/documentation/app/builder/collaborate/_page.mdx @@ -3,10 +3,10 @@ Wasmo 1.2.2 brings a new feature to collaborate inside the product. You can work together on a plugin by sharing it with collaborators. It's easy to share plugins with your entire team. -1. In Wasmo, on the left, click Share plugin. -2. Email can be added to two lists : the first to allow users to edit, view and share plugin, and the second, more restrictive, where users can only -edit and view plugins. -3. Click Update authorized people +To share plugins from the UI: + 1. Click on the desired plugin + 2. Click the 🔗 button + 3. Write administrators and users emails in their respective lists
diff --git a/docs/documentation/app/cli/getting-started/_page.mdx b/docs/documentation/app/cli/getting-started/_page.mdx index 643213a..6851926 100644 --- a/docs/documentation/app/cli/getting-started/_page.mdx +++ b/docs/documentation/app/cli/getting-started/_page.mdx @@ -43,7 +43,10 @@ Then open the content of your `my-first-plugin` folder. You should find the gene You can now optionally start a new plugin from a template by appending `--template=[template-name]` to the creation command. -If you don't pass a template, Wasmo will list the available templates: `js`, `ts`, `opa`, `go` and `rust`. +If you don't pass a template, Wasmo will list the available templates. There are listed by product : + - empty template : `js`, `ts`, `opa`, `go` and `rust` + - Otoroshi template : `otoroshi_go`, `otoroshi_rust`, `otoroshi_opa`, `otoroshi_ts`, `otoroshi_js` + - Izanami template : `izanami_js`, `izanami_go`, `izanami_rust`, `izanami_opa`, `izanami_ts` ``` wasmo init --name=my-first-plugin --template=[template-name] --path=[output-directory] @@ -61,7 +64,11 @@ You have two ways to build your plugin: [wasmoserver]: https://github.com/MAIF/wasmo -Assuming we want to build our `my-first-plugin` locally. Enter `wasmo build --host=OneShotDocker --path=my-first-plugin` to start the build. +Assuming we want to build our `my-first-plugin` locally. Enter the following command to start the build. + +``` +wasmo build --host=OneShotDocker --path=my-first-plugin +``` Let's explain these 3 parameters: - the `path` parameter is explicitly used to indicate the plugin to build diff --git a/docs/documentation/app/faq/_page.mdx b/docs/documentation/app/faq/_page.mdx new file mode 100644 index 0000000..5160f5c --- /dev/null +++ b/docs/documentation/app/faq/_page.mdx @@ -0,0 +1,109 @@ +import Badge from '../../components/Badge' +import Badges from '../../components/Badges' +import FAQButton from '../../components/FAQButton' + +# FAQ + + + + + + + + + + +### What is the fastest way to use Wasmo? + +``` +$ cargo install wasmo +or +$ brew tap maif/wasmo +$ brew install wasmo +``` + +### How to create an Otoroshi-compatible plugin using Docker? + + +Initialize the plugin with corresponding Otoroshi template and Javascript language +``` +wasmo init --template=otoroshi_js --name=foo +``` + +Build plugin from folder and Docker +``` +wasmo build --host=OneShotDocker --path=. +``` + +### How can I create a new development version of my plugin? + + +Rust plugin + +``` Cargo.toml +[package] +name = "foo" +version = "1.0.2" + +... +``` + +JS/TS/Open Policy Agent plugin + +``` package.json +{ + "name": "foo", + "version": "1.0.2", + ... +} +``` + +Go plugin + +``` go.mod +module foo/1.0.2 + +... +``` + +
+ + +
+ ### Can I download the generated Wasm from the UI? + + Once you have built a dev or release version of your plugin using the Hammer or Rocker buttons (available at the top right of the screen), + you can click on each version under the 'Releases' section on the left side of the screen. + + ### Can I determine who built each version and at what time? + + Each plugin has a **config** file under the **configuration** section with the following information : + - type: language used to develop the plugin. + - users: list of users allowed to edit and view the plugin. + - admins: list of admins allowed to edit, view and share the plugin. + - filename: name of the plugin. + - pluginId: unique ID of the plugin. + - template: original template, selected at plugin creation. + - **versions: list of built versions, with name, creator and date of generation**. + - last_hash: hash used by the backend to check if changes has been made between last version. +
+
+ +### How can I collaborate with my team? + +Since version 1.22, Wasmo allows users to share plugins with two levels of rights: +- `users`: Can edit and view plugin. +- `admins`: Can edit, view and share plugin. + +You can find more information about sharing by reading this [article](/wasmo/builder/collaborate) + +### Our team have a CI/CD process and wants to automate the building of our plugins. + +Since version 1.x, Wasmo includes a command line interface to create, edit and build plugins. + +You can find more [information](/wasmo/cli/getting-started) about the CLI and the Github [repository](https://github.com/MAIF/wasmo/tree/main/cli) \ No newline at end of file diff --git a/docs/documentation/app/faq/layout.js b/docs/documentation/app/faq/layout.js new file mode 100644 index 0000000..4962903 --- /dev/null +++ b/docs/documentation/app/faq/layout.js @@ -0,0 +1,7 @@ +import Page from './page'; + +export const metadata = { + title: 'FAQ', +} + +export default Page; \ No newline at end of file diff --git a/docs/documentation/app/faq/page.js b/docs/documentation/app/faq/page.js new file mode 100644 index 0000000..2ec87a6 --- /dev/null +++ b/docs/documentation/app/faq/page.js @@ -0,0 +1,20 @@ +"use client" + +import Layout from '@/components/Layout'; +import Page from './_page.mdx'; + +export default function Home() { + + return + + + +} \ No newline at end of file diff --git a/docs/documentation/app/globals.css b/docs/documentation/app/globals.css index a8aa6a2..6e2ff3e 100644 --- a/docs/documentation/app/globals.css +++ b/docs/documentation/app/globals.css @@ -16,4 +16,38 @@ overflow: auto; max-height: calc(500px - 71px); margin-bottom: 24px; +} + +.sidebar-group::before { + position: absolute; + bottom: -0.1rem; + top: -0.1rem; + left: -0.5rem; + width: 10px; + --tw-border-opacity: 1; + border-right-width: 2px; + border-color: rgb(226 232 240 / var(--tw-border-opacity)); + opacity: 1; + content: ""; +} + +.sidebar-group-selected::before { + border-color: rgb(126 34 206); +} + +h2, h3 { + position: relative; +} + +.anchor-link { + color: #666; + opacity: 0; + position: absolute; + transform: translate(-1em, -2px); + width: 1em; +} + +h3:hover .anchor-link, +h2:hover .anchor-link { + opacity: 1; } \ No newline at end of file diff --git a/docs/documentation/components/Badge.js b/docs/documentation/components/Badge.js new file mode 100644 index 0000000..c8eec99 --- /dev/null +++ b/docs/documentation/components/Badge.js @@ -0,0 +1,7 @@ +export default function Badge({ value, raw, ...props }) { + return
+ + {!raw ? `<${value}>` : value} + +
+} \ No newline at end of file diff --git a/docs/documentation/components/Badges.js b/docs/documentation/components/Badges.js index 88e92f5..23682fa 100644 --- a/docs/documentation/components/Badges.js +++ b/docs/documentation/components/Badges.js @@ -1,5 +1,5 @@ -export default function Badges({ values, raw }) { - return
+export default function Badges({ values, raw, ...props }) { + return
{values.map(value => {!raw ? `<${value}>` : value} )} diff --git a/docs/documentation/components/FAQButton.js b/docs/documentation/components/FAQButton.js new file mode 100644 index 0000000..eb64260 --- /dev/null +++ b/docs/documentation/components/FAQButton.js @@ -0,0 +1,21 @@ +export default function FAQButton({ title }) { + return +} \ No newline at end of file diff --git a/docs/documentation/components/Layout.js b/docs/documentation/components/Layout.js index 080cd37..1e9cd54 100644 --- a/docs/documentation/components/Layout.js +++ b/docs/documentation/components/Layout.js @@ -49,7 +49,7 @@ function Layout({ children, next, metadata, previous }) { table: Table, th: props => {props.children}, thead: props => {props.children}, - h3: props =>

{props.children}

, + h3: Heading.H3, h4: props =>

{props.children}

}}> {children} diff --git a/docs/documentation/components/Searchbar.js b/docs/documentation/components/Searchbar.js index 53f47b2..ab93494 100644 --- a/docs/documentation/components/Searchbar.js +++ b/docs/documentation/components/Searchbar.js @@ -70,7 +70,9 @@ export default function Searchbar({ handleOpen, open }) { paddingTop: open ? 20 : 6 }}> - {!open &&
+ {!open &&
  • Overview
  • +
  • + + FAQ +
    New
    +
    +
  • {Object.entries(LINKS).map(([group, children]) => { return
  • @@ -65,15 +95,38 @@ export function Sidebar({ metadata }) { -
      +
        {children.map(child => { const href = `/wasmo/${slugify(group)}/${slugify(child)}`; - return
      • + return
      • {child} + + {NEWS.includes(child) &&
        New
        }
      • })} diff --git a/docs/documentation/components/mdx/Heading.js b/docs/documentation/components/mdx/Heading.js index 26384bd..5d2741b 100644 --- a/docs/documentation/components/mdx/Heading.js +++ b/docs/documentation/components/mdx/Heading.js @@ -1,6 +1,38 @@ +function getAnchor(children) { + const text = Array.isArray(children) ? children[0] : children + return ("" + text) + .toLowerCase() + .replace(/[^a-z0-9 ]/g, '') + .replace(/[ ]/g, '-'); +} + export const Heading = { H1: ({ children }) =>

        {children}

        , - H2: props => { - return

        {props.children}

        + // H2: props => { + // return

        {props.children}

        + // }, + H2: ({ children }) => { + const anchor = getAnchor(children); + const link = `#${anchor}`; + return ( +

        + + § + + {children} +

        + ); }, + H3: ({ children }) => { + const anchor = getAnchor(children); + const link = `#${anchor}`; + return ( +

        + + § + + {children} +

        + ); + } }; \ No newline at end of file diff --git a/docs/documentation/components/mdx/Pre.js b/docs/documentation/components/mdx/Pre.js index 96f6cde..ec73f26 100644 --- a/docs/documentation/components/mdx/Pre.js +++ b/docs/documentation/components/mdx/Pre.js @@ -31,15 +31,16 @@ export const Pre = props => { {!['javascript', 'go', 'rust', 'js'].includes(language) && {language}}
  • } -
    { if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(codeString); setCopied(true) } - }} - style={{ - border: '1px solid #fff' }}> diff --git a/docs/documentation/public/release.png b/docs/documentation/public/release.png new file mode 100644 index 0000000000000000000000000000000000000000..36f2f70046c4f8f86ca5344c21edb927aaa88a19 GIT binary patch literal 86005 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:xFqWi<00;`J$vb=^wS?fe`y9+F1j`36kn<}W7KY#Jx(X?u; zl<`xN(B37QWJMfA)OYov$5`I65k6WO>G{cJ`$J+3oDk65+f^Z^bCq zOL%uG`JU+2k9Ir6* zzYdJN9fYf$aqOM>fK^1}Jrl^O6jnV632FTyU2jRhuJbegDS-FqGx5}WxkYXk z>mBn?FR6G8<1UG0blEo_GI*5)4rkS#U!kY$iY(17zuG_@ql7KdpRmCa-Beq?ro5(m z7frG7(Fq9hW-`BcnD#`1qHOf#WA!jo9NKhU!-t2Yg*5?ZrY}-uk%*~gh^6BBM0%Dx zWZ7|4WS*y&)4gPk4#K=f%}dHmU`FOC;TRS8uM>J(`+u>)irE z$^)Z;+_-h>*Rn59wk1U;8VGuP03nNzE_>#Rt%tq-SLaRmTfMa*CeCZ%V`Cy6w!nLj;BE@@Tb*D{Og3iGq`F+$`Ef|^5EvAUCm5yUun!&h~b2VTB*G-7*jbGA+uZL-Um z+md(J${dIN^Oe?zI<;?9h0I@b2}+GMz9iYvsq2oc+Ae7IL8UOE9(D?z&goziJ^qfv zbNaP5EK9oFfk>-f;=^-V`ZFzQ(%}OXl-Oie1X=anM5#+32bi6j#s^m)q<-91X$QY& zoHVP}TqhQcM@a1TwWFbLmeF{Tu9ZF{VgVcvOT3v7O8;qu!LB7?wCT0CNjk=haS#4WU;c}=kTMr&X?G{Rs!&7fVEdHYx5%p zJs6?OP&OB;>9>&C&=0iXd11`WCmem;_WkQ_p21%aqZZp#es!|q4$IbJgVC;XboL{Q z3jhXM{8WD7@WDPEL!RfyWhW!?tIXO8cyZ>hQvt*|RGyI_w(HKhUSRH^pKpS4$Fjdm zNv_uS5v%j}l@>qTJ6%oBB3oE(JFn!Pev^E`)xYk`leQ$`FLXEC^~IG(yKwFKh6nWP z@)O9Dyf$R)splhgXktUR{*@$!UQ}bdzN`Rp$+s6UFC+ll3neM!Ex&*&2aNnGlO4(q4zx6RG<=;UZWgE`E=iinD!%GpnWX*mcFpjAF=k2r0;L_2u zY5@`K{lf4sWzs~Hi??NNtczbV41W)1(kJf+4g9JVTgP1%-8 zZ@oRnm6KbI;Wp}FLn-e?uRXtM<4XND7*^RIFIpIEu$m-b?xiq%q?qv9kzpfCr3%cY zR0IyXT>7vd?14wYo&%Gyg*5-iMa3wQia_y&{T?9v3mRDZHJ_lt2=jGgg~g1FvJ^VG zu8Clup>ToUPC9#r$`suYTX5^9$`2vG3f~YTocVeFML6tFRHe2y{^~Xt0A;uYgiBUy z?MSqVpHt&c;nGsDbI$y{Af>x*(R!kRbl{81po$RZU9cNj<|YE z{}mUS7bDTUEU;)3Ebvb>%}d2F-!fU?f@~a7Q+hrR?(2U9a73 zx;ZwFQ`(kjNa8L;J$;Si0WkYNE@qPB^c#nzh~AU?iI#PFya2%-0Pdg_AP|I<&8c!@ zK?5#y5UAHDdtSE(j%gLcmE#W`MQ89Zc_;(um&q@&8cpG%uQs7h&be;p{VIW zvI-HhNA}JPmsv(ageddEWhHwgD=V^#3zd~sM##(_5#QHQ-S_AI{r>H7xjN@u=e*DR zIbU{5AF|UkyMak)>!0VE4p5TljT67---00J3e!ul2e*F08h=xp_raEf0N99Y8(>Iz z5}QiWmnB$u`w<{;sK%)dV^~sHP@wfKPODI4 zb$@jkY}?i_t7ZnOh^`{u;(Q#6X@JT0+a^A%as_zEu$I8dwJiI=;u&NjDU94s@)vR3 z10W;-?pR?CQiQY@U<21>sGE#r@GtINzkhax>d1w_BAcTd-X$H&gMPpK! z&e+?Z6#@PIECDT{!uImm*_3ngdwQ%QQB--QXU-|<4Z<^igEUm5Wq)i{s&OH+m@uBZ z)i0RrZ7j}$zdQILKAoEG%8gem2S%ZvWMt{S8%tRA_#?u6!G|Q3AQ)k}xQhM3oV4VQ zuv?5b7LWl@9C~$inYgHJbp<*rl~r`QI#%z*N?ps!NM!tBc?&n4xX0B5 zL)Rxozp@gHOBEgW_b@P2)q`cM*hm}&&*E;5UAfBaIOH7o%YDHUA_U}2o;P5MEt zciFe)(DC5;r?PY7F*;gw&2V2(lxj{k+P~;H-5F>1&Duc|<7K;Y++~Y$w4o>d8t84xE|OstoxAQvfN>92=T>!9pZwg$ zuPf#IYa{lNgk3ZbI0c0GEl{aeDyB-nVy}awQ9$5EhYpu0Q;(wjHwzYfcQ=aTl6(qXwaz$z;foOj? zf>x0A>0F|=m2goF8~&tuxvhP+>akguON8W2Z+u+BhNaGp&Un6i3qZVooRdcBF`0sn zvA0!>qnk<5BMG7vhDR&nO#{Z>)0E9OeV`9)tJ(j;@>4}$U@v+ybtnZ^L>1ete+fUc(3+Kt%nDfPsajbE)GI*#s(lL`pkjuA6sAjU9f3V!~ z{9zlu(sSN2LtKTr^z_jbU6EPIy+r{O;@WUiy^td=xkFe7ndZlO?(tVxM~TX$;*ZBl zp#EHM4z>V}lgsj>sxGw;YJ5Gv((w#>ro2yyd=#ZIPV`co!BbB4QWg0CLC?#UhMh@5 z-K$Fv^0MMf{fI8; zhgVzCIz5~3vSQsH*lcW?C(s26WIZ%_SB_T8i!nIcapjt$#awTGCb-Nh{Wf||fx6E| zqAF9%kM54Kl=WPidGLWX;i}UOW&U`MiMMhoHuWijwWKv2?vlkH~*XNT|zs%iJK&uqQsRmll9bFn(Q$PGP%m?H_jqhTe#wqvg z6at88>YfOutUu+S74Y?WbpzcSFl+w)2_L+<+OK;P(Tea^xEbpmw~=KR7=`8Of=&yU zS;zAj%%!{ayl{g2u3FngqKjN64zWlnW-FYv@!R3;7htPzT9$u(sPT|q- z87A{kYf#x@jnPQ3LsZu#Y}AOMQpmg5ol>K?5%ygb4@t_PC6Ch8cfkIF>Mh}3>$ewQ zNS6^^*R&a}^PHFNmuJgL;jD8oUf;k>_@%fEwKdZU2rN8-V{#HRF~hx8?;`n9!w9ae zL&(K%_gydd)Op3en5NG6^VAvIo3L-JnR7PPPzdPF7&rLC(X1Tea#4%&@!zT$Z#kFs zo;oq+7+W6w0*8^LAgTPQm*=3aZbB%Nd*l3OFFVzLmYqNVNLma^g(qoKj0h(l) z=zqJ)_7l8|S_W5J(UHxvI@19BZf|L)qpQoMAEa^XNV(L#2c z6|Flam9zAj)Y;ZIv8R3LX?flihaxx6KjN+08~iVpJm|hDmSC?qfhMBbE9aT%b=XvU zjCDt39}7zixfIsUWhbA>Gy4lh1YuNPaT_$bo2s{AjrOd6Du*SwdKK4}lwOP+uP|Gm zZnQ5q@xgH%E`P1+?ruAuy%VdIiJbU%g?Gi~@!wdpIG>ho()C~zMES-Y_9m0x2hO-q zh=mQeM#9?H{`*(?A0F@`jv~uPQ+T}+qF-IoM(cyPtj=gIsV6+R6nQePL7aYzt}dQm zF_fJ6!8tneKWO=QvWMUmB6)TC=>z*Ug$Y{Eu*9DZWOYIY-YNeuu?R2=60oKvVYAO07TvX?v$HIy&r-}(!1qh-^XuB=Ze9?$;gaR8NC4<(j5cO_HD z@Iv-~m0n9WAeWWiJ*STD{-{8-$6s#S#&JKO&7gPkx-nJX>V-*G9)?;U9469(<(9|9`$I z($Pi#cAaFvVA;RJP{G%l`xzE}`TCvSwz>O%Ndc08yEv5S&(kUNXK&j4L*B)>g=7h$ z*NR^$EFlmLdH>!8H;F>oC+fd{7Akl=vDf1F{XUU@|G;KSCH+LQNZ>z!*M&7b!qLT7 z!0yjweTZktm~P3Ve{8P&=rV&FAnq^budJ%4ulRSRU*KzXr%8P)$=-ntJB?BPDVqzb z3r2wjxBTboW&)M`$;V{={w7M&$SaELr17Jze5L=K&LL@u%Oro!!uFBt1&-zev)U>^ zGd>7b!-t)vVoK3$K0yfd59A`x&SOwfsmA4(dN&F!}>%a$D|>U zLqD(mL@h!KYRS_4Xmy$GmlCtDju-@_gE4){eQD&4uu8H}S3x8oq{N{zn`CgHNfbGH zYrkkhE(Zy4z(e7#IqmzGy}ObDFhRCeWpNgo30JyfJyGy&*0oEO0toD>UTvf4b&~Yi zS<#|FI+@B*kcp=g7t%hR66|C7<6}m)LKM9Im4>IMPI%vO$D=!&j!BI(r&4S~sB?$oG`&|k^|kxuf;nkm3Ad_4 zZ5eDXkB#{3PA6D{qk9Gtxm|t%N=JVui_m8?`m9XPhyxIzYZTO)T|!o zht$|jMSLL}1h!c(f7CG-4Wd|}&Qy}z?M(CZI+ zy1+tVS)?sg7puliK6$#EP;DsDt*dVZn?Yd)ByNlaVCw|JGgTP^&p|)#yn64eL}{4I zR2y{@p#hi(R*k(vW6s=#F`WX4Y@J_UjhamYnfr_HaNT>R@R!}wH8OOt7tffkgeuSB z+2y`G&0;773Y=|uLcX-?u{4|rKZZ#8rJhXy=!r-f)%}L%6we%0M~*9WU~~y(1d~eK z>!KCmb$GR*Z}GhCQ%<_dSrpw$WipC!Zo=P+@n{-hqzLDSJI$wpx1nFhplcMwLTjjV z+bYhj7q#l3KsBDELL*hWm))Hp3%%&G0w-tu`$ax8f}&)eBcqaLI=Ek*x!l|cgv-}` zxVdH^qb`JGEAwdwJr)MKmZd-ww1$m@YD%Y7pgrid_kQ^7l!7TC2{8AlRP44;n0K#= zaK+$RYW|kTiMw$t4`vfr^V1*%;NRh)Rb2net_*mM9J;|s%E0UuM3qya zZWE=f6d*v=d6Q@t%+ZC>HSo={-0VSNJM$1d7>@j2>#<}9CCs*?H)GWWXVq8Kn?g|t z+61N{U3(mX4_r<@u*B<7fAv}KQcoBhc9H!!K11OJ;f*f1AD!OouYlD(ImKi6!#?oo zthNkTpdA=ckgV4``SrDhLP5!EjI+O(9N?r9qnolOEe@B<8f9H6G%!wl*e>x~^ZA#G%jMcd( zv7{o_`v=<0!#wpnO?AJwMrOdPFNo}J1anXmFmvdhT9ON?@Gl#J7w!uK1CNe{fE~5D zlI}`GWR%3(`{=8?u*2m?%mGC-a*?78r{4l2HB?V*{_Q!CTp#uU(|Z^k9z8dP_+Lin zTpSGzM_LWnz>Huj@W^aS9-lXD{^j)$qQ|5w&_e5=@IFX%cYvspx|JDSfk0Nzyx-QU zG{N=I%{g>`EL5;at-l*$6^Z;qJY`t^t*e=e*impRq}lf8$I(qQxc8|y-m-UOSeIPN zP6<49wiMrD6eBn^JMIGO#|VGcT^2ev+=5n81={Bxgfr9L_Yj6;uD>8*Q}ZTw`Vl1) zN`1VRg3}-P`S`tLYCiLzUAPQOC(%Z`Qw*{4PcICqi=a9z^)1Thl&3jd%+aJXt_d=!3qj^jUc}B4qm) zxX_()WPG?46`k^x5YjyT2JRwn3uhA9SZ25Og8YQU7m%=?t?ptTnJ!<*ny`HL@c3i5 zEDmzzSs&+8*$=$!^{_#=KC8a2vQun)_yCqiVUeeNZ&c4~S62QSj5kjf68SK& zZP(92Hivu*Zt@G4xO~ta55-02V3gNj1f%Ef*W1%a|9LFzG=ps}bj7XB?DmaWq&?4@ z{EMaIH1-bKvQ9JzF)OI75+@22bU58{S9#s?lr4{Eux{dt(@@269uG_*nu<*#fTn_437Nuqb8$6ING!v25QI@_Y< zp?G7A1eHs-fuDX|Sq~(^dZ9vM;rRii*z|Zd;hyaxVe)_w;E*K?Wa)^szdPlrHmLe1 zlkPw-*-{3juHh%Cxb@01mhV0?k01HbtdN?DT~sQ)X3*zeO{?%c#w4X@Cm;73Vtx8O zzR_m53wDaT)5c}kQyO+ijxdk?~ERZM7`j7EOOg_2Mp%9Cz5V>8OKR?A%%bDmKCk(aS|E)<9%@D1Ntu(8b9G@#o|CnXioz7JiMw-+Tlr7P!@jic6XZwlFk# zIRy7MqenB&#Qn}}uXN)k=kxtEZLfVS5Y24+!D5-Y*Cp<`Bq z%N)zROOS0TY4*gFqZx0AQ!Vxudfe0#-oYU$rI8NU9A@VH3ptkahzO^L9fER~KgVHnJ@is(J3$(G7nMKx{H9uaCe&G|t+VvEgxA%em zF6j;!rC}FX`?x+a^uls$acCf>4g|)50tv1GNv~^s<1DiQdxC?87GyA2Eob0s#cE zRj*7ZN5AA&lDf_iqP_>c+zlI(GAVSF??VTxKP+bc4x2Rxn^f=Yr;1KM##9)PomQ>i zgnsw)bz}IO7DN}OgFdqvCwiNiw`B%BDE&;WKgIi7Z2FeB@(-^!HX1je870F^>|IwB z>Ka4rg|K)BR2GSt^lgdNAeCDS^C2|)%RkOMj~43voXz1~TC-ZqI#_)RGd16_p`w6a zaPk}p)y(4@2?E+qf`T+qL$KC0omx@dN4S|5?`kfA)tzx{Zq{8jkmSNO91&(T`+SlQNB+K4o1(Wg*S+Oq-qL9U-hI z3qmHFeEAW>_Dvk{c6QhtKYLkwzTcJ8C6zITDQZoRC!TEfAli$>G%3)1n6znqe`mw1 zT&?H`Mu9t^_da{fO%{QSuP0*PLI zT)F@J8IrSzFBVz-9|imOb>&fD#D_w{cisL5zQzMKL{pqw;}o<*uhpovH3s-fYJLwwXSo5nW&5NZqNv z3xB`neSq|bcqX}kG|3+{0-k=@a?fK*nZXy($KUG4G7&p}Dn7cL();*Yrb;})o?^@^ zRou?T#EvhEj_z-GaDd?{Xu0+LJ|+2m4HiX56#~tQKY^9>4RB;^XkbIy9f>5!J6I|N zdr?0yf4=WGlNvwj{_m#ToPS}RHS!X|^w`77nj^mJXj89(&tYMpfXF_vR67|~w{81xWZ5K8sU zf+@|1cEADf4MyQ~IaKuPuzp}yiwHS@x-kbDSW(S-Ut6@BYvujXW=L@taX2)_E7psP zt7k5hePByQgQdB^MhV+{j+UZ-&vS26v( zu)i>LB}WSp1^IIlV!R$LyF<-%66mxBnwt=3L#M~je$^^uM6A_s$H9FoxD$%_N9L&l zj-NPnKF4Rwv%&AT>!XK=)_+kaP`4hInG{R$cz&5!D{0NJMO+~d}yS=T4L za;CDbd`Ni*jRiK>*Y8x=S)DWSad|L-nByf6_fd%FAKr2_y%qMl&AYOe;EsKq7YS{_ z7vx*i*T9cF^8OLHzOa{Gw~(o~VuSF>v4Hq&{SJS7mch))WRS|o5UDf%5Fsl-EmV$S zQ^7*_MRL9cWQVrIh{_#D1}>GpXUao)^=ndbkME{#f+$+F3#MAfL)jkgCab@p38;;Bk`iG8r7D&%-rYTJeuQgPL)$oEVa%;pr3)j9 z!h#LV9)ZzFu^S3tAq_<+s|| z(1cM6lKDkC!kIGg8nl-C979qH$fn`Q=0R}TVbD$`B%pY9w z*a3rkDPr(@Y!A&cNkpnugG0In15>UZ@9iSBdHO<$V(0yK$Ay%(UdE{M12#9jvo|-2 zxJlxDSCS039&G$jFDmjQM&O+g=$6Xb!D}=}n^J zIX)?q9+y4$4!k|FaTB#dV5zG>OZ^u>(y!e}f(5F5 z!_8_Y!JNyrcuKG;Och2_FWD%x6<-(*A(LHw(PC?_G7awuVRnr3qs<~yt?s)Xkbked zz7ABx1^KGj51zxPZry-lh%T@kB-)vW5Ye46w3W)Riog<*%J)RPtp3V(7rYU6H?n5-#Y*zm59aHxNRtB^aUnPW!B+VhAtrdEFXw!$zUXwJSLjjn zZ=hZr_jn5$K=>3opm~LbALGqu-pCcHQO1cUZVOgI}8MLqbE-y08iqqjo5=M8du$}7|H%pM{ti*Y2PnI)7(ozIR zJxpTfVs$*Bu`c$v(!s?6>$b{*JvTukLapNM2L8s;y|o<*;#eV9)9piDovn9=2QKY_ zgS%F1WAch;K|I~y?3?Za5Wz?@{n2Ud-$6tE{B~Gr2n%2DN<4Y`FZxv?qo86yDJ)P4eVpEP<>U#q# z{W7lF$D3b%Bu}}hjh8n+M)wCtI7XDJe^ymrcbK!1%#ZAE!i8Co8&} zv@S>eyL!`)#NCOc(8Gwv`oKbDJ)%WjSgbs$ugDoOx?vc#H2zSgYH$mi=j6^N_cV36*!UR(&4D1#)}1qx@%pt z4vJfp^^<2d_DoVuC6{8C8Q-?8UCvMZ!WVGbYGeBoD#MHoC4T1{+h`wsq4=P0PP#x` z&KYh;zG&_Qk?AKk?m~?t;!cx#q-m)t<9l#pTXO5HcweF>mRNb{-rX!i%zc_~?FP#V z(v4Xd-LCjipPryT@d{AEx$dBo-?g#x%-$ZpTV)g$D_TEHAh2h-sMXv~73(-CdHMHs zThupO_IwYbGaNIYv^RHA)5Udf2Oa0OU1te?v)SGha z!h#xIbaSZ3b9r=#%ewuF=83hGdp%mZeWDbi6HY$kVV+V9n6GGVcA~T!QXKBz0(kQ! zk^N{WJK|8Fr~re&rqj0+&-TtuqW~MRZZUU70{2+%pyLyF5`##S1>QunUeZRFD~%ga}o&ly|-EITIOj*na zL{HId!x6GS<)rRFbF-FFbv%B)3&YLMD(a}=a4?fKjDJWesPb}+e_~ax{GPI-DKUyz zWc*lx+XW$q^ZKl|ibe-N5ngS^%%+$+{229&^GBw(u`%w_7i1|HD=)}PFjUX_Hu}HI z%5SxNx|`&M(r9bifLDPqut#s)c{}^?;RKf3&3RQr=W;YfH6jQ@YE;=6-|sOB2kmMW8Ih!^jm9r!G;= zR2atyJgO&7Y5;#1Th{Eyd5UF4Sm?dP>SNvq3~B_L4Q%C415J zc7Z8@f;Y-v?2?%))Vd^sHZVNuJ)7c@L3W88Z*|Ho5{Y^hv@{n_>s3B@mq7VtT+ya2 zvGw<_5@YbC(o~))c*{pOAu-9RCBy+w*Aw(9Cu7A?&_7}RV(V16}Ig7eJ--Fg`IwjuAt+Vx<+OdoYxOWk!;EY+Pff4WQ`?B=Dc4^8yb6tVm%?;SMH z##$WE6SESpHA@A0wEgde+ zu4B!uK_TvVcTcnjuFkdIHAoh6Jdw_%VjiWR}(IIDPc@!`vb|s zV%bQmq~7g?OxlCfK5KD?KV{z5XBzbRzHdt4?04vM7dx^fx3a0t&D;z(axt90t}Z~l zjQ!zatD83x@Bu?v$-7!5@g25{j!O9a_YR?E^A0&*N)<@DBWmRuZ*Fb=(RwMOq)#f< z>9KvA6y$D5(t8{6+&$J(spo>bijhb+MvTq(D_`ooSB5~eRm;-Gi(Gr${0*>Ksq&msb1mBAo2ZvnXbia=sX?H5pD#5F4cJF@hlbIxTUmLB zB2pi_$KMc{mr_yh@--TPjEK8jI)y){mbcX5)kUssi4pe$?}T~spEDwa>u*{ft(%Fe z4Xd<2{Zys7=;G8c%y#67Cs6@;TlQe%7gK8(xebx1ZE2szEo#X>05_mUCcX3uhjYAu z;K+VL%H{crs!yJLQ_Y#nSyO*ezZww|;OC6?(Ynez^X+8tHJtT+-+MGE>#ebe-~Dez z{92zVe&n$Jt^5zI4u7S{tQI#=Tl(XP@xzam+T;SZ9gB~=Ej8=ZDXCoP9OM3+N~rW_ zJS`GtLxPxJd9{_oPtS!Nk|YRy*7@U0hf{qj9SGE{b}%VVZY6~!AH5}L=h*)1Z0HXS zJy*Vz8%KBq^#|amkctr0ITm<5K!;SA{N-|Pq|5X_A|`yFtU6lqC(4Sr5Je%)I-bRw z!+tv8&c7Op4=ifxTZ6S;@6X?&yS-7kp?+ANc2;Si=Jg2c>y@9aYXh3&BI} zNu`Y!|2HvzmXCQU|Gx*WkGptNLSIG4{_i15<6cw~Ma?KD3;T9sM4A3eyj(=O3(^y^ zvi}{_?R2gwJ2}O8#?5;#jx;j32T1}Z$#XgU;_}u1Q7`GVU=A_*VB8UKXB+vz(Pzkz ze27lo@Lwy3G;W6sgg08BB%G*N{@2dX%8Cf7Zcuoe;^5XL0Y1O3E}~+6MfY-x*B}DT~}%s%|VpAf@B%mGtKP& zL_VY!@w8sNtDvy;`PzvfL(mkhXf{ARKhJcU2ttGJPf5Z^${AoM_>X`wz&b1vXfO}I zY>m{+?a_H>sQ!JFQl(jym>{bQqDn8~+q9KNTd8^E~JxjT0= z?AoW?#sRP^aykzl&8O2sszJUXNC8pMitol4f^XJiVkCtZbxJcBo1oSE| zY)fne-y<625cuNr>7vA(mnsH_pWCkZ0Cuxj#WZ^C?jc_F6ft*xV4HpCo!>Z(X^b4S zy$d*TowCY=t#}031p&xeINe#-0bfIJrQ=As1%gcBCws4)&QC-jp-B#qZxs`_0}=e| zlwR4t;KiZV0PM;)LvTJ=W6^wwWt9KzgKZ*5^N)6)AkJC_dxAvhFGz-3^+dRo5*sxl zw6wxb7}5FM%+E>C1D}9KqI64Wk3Tm9Kaw31X@7#0)6W3T(kGc$MZ_z+5(U~NfLhWw z!Rb+>imiH}Cf}>h4~$A6(>7}w=jlVSzkMYv3DS0|61fzU8#mE?aC00+s9b;)Nh4pO znpt_2r?BzYAn(hNu||>;TV>$dxS_KLR6`&%10g zj5`T@7MF|a8k+HFq)xJXCB3m9>|U-x!7$rQ@swZLbZNd@iDT{RF7RenNm&cIh~+yO+CUkoKoy}*?lE-`Di z%VAeWn?mi5%~xR6>}EyYX*EMnybZKdhy_mRt2sdw8U-eiY&y0ZXF8A35zqJsHW_Zi zHo~qcb}Y%h*j8n3ISGb$U)DYZ#m6z{+-P;~y_t6W+k{9dsWqfWD?bXUdu;aW3L~7% z5V$S^6SB9wi;SzL3(nIS5cK%Z7C#Z=)f@t|7)s)Hs!R04sLV!Wx z7HKhY=skauh(U7H;qB%?f6^~V+q{e{D*vqXe7!MGR+|Rg7$!+4ae^P?qpRFzJo#RI z10VNemaD4hLAKovFn){^1^Y$OUmI?FU_oGF@l^24`rAHA3?Z9(=W_*m>N^Tw8f5}c z4Mm<|9)ns8<YKyApk*Qr^VY?#e&v%kO>rnzTNsZ$tNB2jWNNngni_FbG>_4Mrb9 z#8@8kV*|H&7;?=fh{x#VMzJy1=@i{bgeP-M=t9hWwI@^Q!Jpk8P4>v4g|||sD`89tdoa?@ZG@ za7VAh>QiQ)1y(O7f$5J_TXl3|Zg`IV^X5l}wug9H%%&9zhH)as9ay_?j*Y&ZYh4Iy-9#(J#12}!Ka{djj&yH3PcC;)2;OFI_9UVea?n$H(wl+b0oUFEW|m^E%0=o{OLPXl{G)hh zF(PDi_WWdDnBp*}i+mBf%%xaXO#>SzE`!hK+9UU*)_(uq{B=cvpIsrJa$mjUT!`xU zZU5V`uC6)gldBpm?xYf0<-YR2pod+h;3rh%@E>dh`tzfuAD{73MQ5ioPs-2J+9=`p z3UDeO)<7ib25Sj3`3>vVS(Ie`d(TsaS0&zZLuy{joL)FCJf{+EQ4gXw{(cI0?5Lns<#s!mH%>Gr36gTKZ|9 zFYaQ0HY3lZ0+bFo+TB%0uXQ7PiMM%1I-=3>ByF4EtEpk~xFUfy_?m3}*j7JYYB$y4tdMWBh!$e&jyG;)R3;&?_)aofuKq1{qU@0dW}$C%T=y~!@$j2LI|W$0>-i@e$G zHaZYg{37pi>TL&v8GBy{)BXH)ZF{trEfyKqk>7v2c*}uIFsa8QrTa+E@nutMY))`B zuGDi@JWm#HkNLIkewVPDGP4kIlG>@Xa;JJvyd=}XbSkYD{B?z`fuF?a zXD#odWM9OC9gb&H^w*Ef>nX=vtO=Dq-nbp%r{>HX`)Bh7hVLtK7d+dA=s&bZoMwok z$ipViGB*Z`s`VkH3#!hN#$uXpOWjbBifnjCDc0s1*cBc9Heglwk{!b;Xa{V#;{`n( zwyD4;qn;F&(}K!V%h%bimA3I+o)8nWXp7)$jD3U6i>c_Ql3$jQI)h#DDvw#)1W(;| zxc!j> z6)mt%zr>Yp1(a&Y`i#|Z(x$OK~@z5S{=htVN}x*?+S4=8{= z8EP^yyk(*ARXO#<^Q zJj3@dc3k{hw3T_upR;E%p}&aC>qptUcGz&MgyaW{V7#lGu1z0Goz1kKsl)$0Ipl3U zlebPsEztkao6dvx`s-Tlo`XZD>U*z=#8aO5j6C0?)6zh;5cB824-skT@uc`yVavh* zcYp7nyQYuoC?9bn2;HAR^l=te)1Q0U z?&f>^12fbC1f@=_W}Kg+N!42ae$_KIKtZ4Xw@5I(5rhD$lGG{#@*3mb|F#J}!qX~| z$imLy-?y;KKRUFBc>7Th{I;3q_#Z53s-zpLUuvB6pF<&08`l0!^cSC9%)sS>el7-P z)P31+sY!ow5|DD#YZs!Z{-0B_NOsL(U&zY)*ZOwsc$QKB|EWNfzV)1Kqcv~n@3|ns z{vwtCqss>nn72Hk{GY(P%GL{#vj36$!Lk2~?jO#V#lL%PHK<-h@XvE64RF@*{C{vI zSOI2KZyT5OoBsz6Dm8WLX-Zr%v!-kys<>w*(;Igt&G6+jd)GW&tAFR)jmx#F9Cdwp z(UtZ-d{C!~iF*ypT(8w1gxK?iSd>BS6&~ zR-53XOo_S5JGKXTjwe+^(f_@fq;TTUpQlL7<4wxS60W$nkHaokpu`^B#7Gp;F%V=< z;dL+oC&Ronpz(&$#YVNm>q7?i2qZu2&QCQ`r)eIh{I86RK0M&LWpPsrJaHC2+X@|i6KH2zc15fldlu>_A$oFN?>B6=ekcs*+{ z*O%-2ZuWO++`4S_Q`CK4>x3pQ&ngF_I%$uj-@aF%?k>pPHc$shcRiU9c*Eat-4hY# z!EOK42LPpnkSxYr<#Gxs>#=t5_782x&;0^O*o+wJw+XUUGlsdfE5r zTS-t}_oYUIy#g2#H5=FhM2cR!LOo)ql!RV&^~%0iGnaje)f1palBDl1G-9+z<~-|A z*V;%wp}qejV+KG*gq9tm8dDj$Jx9jN<+G024wYt!LYp}jCiX1l7j8YJoCd{I2vJ&P zGIp96HejmVXGD0^AeLu?syPFHQIy@n;5B}{d6bW!hf0hQ`tS;>0cJUd zv`EcX?!I+df~|nX!NJ}=&o8czs0|q&Eb<{v+y~1*b>N>3d;o>uSOi6i^W-Vz3;obb zK~f4+3_b42_gB>vR=%h+k{fta8fR@5IHa-mv;x`8d>YCr*1*Ae$YZXmAR7$&mG zT`A%GYEl@XK&EO!WJR{SbxkTM2<>!MPIasD1@FY&=PgGWR1fsN!H=2ke|V6g&6__A z42uIb)vE?*;kh8`c1$f2WckY9&S|_dpU!|zn)Qx4nE!>`PO~3EZd@l4ZQ-5o)K(iu z2H|OsyRks`vK^XvD_BfDS~UO~0KY~usT&$fd99e1L54y{Q=>Q%F+5AY(H!TsUZ9TsEdhXV|B<+pF>$`?Sx&JBeGD=Koz{>7=02Q|c*8SAY{Yg(UrPW^uH?R&P z?UEph@zn>s%rjs{5e{N``)j_y8sF;NJgjnreMD zI6bufAgR1`&J`@^L!=T4)Pl(A4qR0+6!0IX{=~!~-Z8_(VM@WVr11L1Gv2N}eh5-L zz*r!vk*_g!$gsK0!dsf7{U#p=hb;x==eG|$*MWf;T0qDE z_XBhNjHmC-Lg=i)?tE>8di;C?-6i(-VCJz?g?7SPx-H^fp1O6Uu<<}BcNUT{mAx0- zjy>y<+`}T=gjvD@8kT1|#*gWCs;)AQ-*0c16;MWJU8XtI7;M1ucYYydUovf(i;ezv z1v_HkSP@4JB$*&L&@tQA&`GLDX-3h7SwW~4h4no0!x2-Kp8XjhHo6`jKY@kULn_y! z&o_?0XgS{{1v4r8mA5bpLuEPI≫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

    cy3!DNb)|appE8GB$mwCsq0#&1 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 { + if (email === "*") + return Promise.resolve() + return this.#pool.connect() - .then(client => client.query("SELECT * FROM plugins WHERE id = $1::text", [pluginId]) + .then(client => client.query("SELECT * FROM plugins WHERE id = $1::text AND (content->'admins' ? $2::text OR content->'users' ? $2::text)", [pluginId, email]) .then(res => { client.release() - return res.rowCount === 1 ? res.rows[0].content : {} + return res.rowCount === 1 })) - .then(plugin => { - if (email === "*") - return - - const users = plugin?.users || []; - const admins = plugin?.admins || []; - - if (users.includes(email) || admins.includes(email)) { - return plugin - } - - // TODO - better error handling - throw 'Not authorized' + .then(authorized => { + if (!authorized) + throw 'Not authorized' }) } diff --git a/server/datastores/s3.js b/server/datastores/s3.js index 69aee8c..29dfc09 100755 --- a/server/datastores/s3.js +++ b/server/datastores/s3.js @@ -5,8 +5,7 @@ const { GetObjectCommand, S3Client, HeadBucketCommand, CreateBucketCommand, - DeleteObjectCommand, - DeleteBucketCommand + DeleteObjectCommand } = require("@aws-sdk/client-s3"); const { fromUtf8 } = require("@aws-sdk/util-utf8-node"); @@ -23,10 +22,6 @@ const AdmZip = require("adm-zip"); const { Console } = require('console'); const CustomStream = require('./CustomStream'); -/** - * Class representing S3. - * @extends Datastore - */ module.exports = class S3Datastore extends Datastore { #state = { instance: undefined, diff --git a/ui/src/TabsHeader.js b/ui/src/TabsHeader.js index 98cce4a..a7abcf9 100644 --- a/ui/src/TabsHeader.js +++ b/ui/src/TabsHeader.js @@ -6,7 +6,7 @@ import { toast } from 'react-toastify' import Select from 'react-select/creatable'; export function TabsHeader({ - selectedPlugin, onSave, onBuild, onDownload, + selectedPlugin, onSave, onBuild, showPlaySettings, children }) { if (!selectedPlugin?.pluginId) @@ -16,20 +16,15 @@ export function TabsHeader({ selectedPluginType={selectedPlugin?.type} onSave={onSave} onBuild={onBuild} - onDownload={onDownload} showActions={!!selectedPlugin} showPlaySettings={showPlaySettings} pluginId={selectedPlugin?.pluginId} - // users={selectedPlugin?.users} - // admins={selectedPlugin?.admins} > {children} } -function Header({ - children, onSave, onBuild, showActions, onDownload, - showPlaySettings, pluginId }) { +function Header({ children, onSave, onBuild, showActions, showPlaySettings, pluginId }) { const [runtimeState, setRuntimeEnvironment] = useState(false); const [canShare, setCanSharePlugin] = useState(false); @@ -73,7 +68,6 @@ function Header({ - {runtimeState && } }

    @@ -213,9 +207,9 @@ function ShareButton(props) { @@ -248,16 +242,7 @@ function Release({ onBuild }) { tooltip="Release" className="navbar-item" onClick={() => onBuild(true)}> - - -} - -function Download({ onDownload }) { - return } diff --git a/ui/src/TabsManager.js b/ui/src/TabsManager.js index 615287d..a04285c 100644 --- a/ui/src/TabsManager.js +++ b/ui/src/TabsManager.js @@ -70,6 +70,7 @@ function TabsManager({ plugins, ...props }) { onNewPlugin={props.onNewPlugin} setFilename={props.onPluginNameChange} removePlugin={props.removePlugin} + onDownload={props.onDownload} enablePluginRenaming={props.enablePluginRenaming} /> {props.selectedPlugin && } - {props.selectedPlugin && } + {props.selectedPlugin &&
    + + +
    } } diff --git a/ui/src/index.css b/ui/src/index.css index a706e20..946b09d 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -73,6 +73,7 @@ h1 { [tooltip]::before, [tooltip]::after { text-transform: none; + right: -50%; font-size: 0.75em; line-height: 1; user-select: none;