├── .air-linux.toml ├── .air-windows.toml ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .gitmodules ├── .prettierignore ├── .woodpecker.yml ├── Dockerfile ├── LICENSE ├── README.md ├── assets ├── css │ ├── SimpleIcons.otf │ ├── SimpleIcons.ttf │ ├── SimpleIcons.woff │ ├── SimpleIcons.woff2 │ ├── flag-icons.min.css │ ├── main.css │ ├── markdown.css │ ├── remixicon.min.css │ ├── remixicon.woff │ ├── remixicon.woff2 │ └── simple-icons.min.css ├── favicon.ico ├── flags │ ├── 1x1 │ │ ├── ad.svg │ │ ├── ae.svg │ │ ├── af.svg │ │ ├── ag.svg │ │ ├── ai.svg │ │ ├── al.svg │ │ ├── am.svg │ │ ├── ao.svg │ │ ├── aq.svg │ │ ├── ar.svg │ │ ├── arab.svg │ │ ├── as.svg │ │ ├── at.svg │ │ ├── au.svg │ │ ├── aw.svg │ │ ├── ax.svg │ │ ├── az.svg │ │ ├── ba.svg │ │ ├── bb.svg │ │ ├── bd.svg │ │ ├── be.svg │ │ ├── bf.svg │ │ ├── bg.svg │ │ ├── bh.svg │ │ ├── bi.svg │ │ ├── bj.svg │ │ ├── bl.svg │ │ ├── bm.svg │ │ ├── bn.svg │ │ ├── bo.svg │ │ ├── bq.svg │ │ ├── br.svg │ │ ├── bs.svg │ │ ├── bt.svg │ │ ├── bv.svg │ │ ├── bw.svg │ │ ├── by.svg │ │ ├── bz.svg │ │ ├── ca.svg │ │ ├── cc.svg │ │ ├── cd.svg │ │ ├── cefta.svg │ │ ├── cf.svg │ │ ├── cg.svg │ │ ├── ch.svg │ │ ├── ci.svg │ │ ├── ck.svg │ │ ├── cl.svg │ │ ├── cm.svg │ │ ├── cn.svg │ │ ├── co.svg │ │ ├── cp.svg │ │ ├── cr.svg │ │ ├── cu.svg │ │ ├── cv.svg │ │ ├── cw.svg │ │ ├── cx.svg │ │ ├── cy.svg │ │ ├── cz.svg │ │ ├── de.svg │ │ ├── dg.svg │ │ ├── dj.svg │ │ ├── dk.svg │ │ ├── dm.svg │ │ ├── do.svg │ │ ├── dz.svg │ │ ├── eac.svg │ │ ├── ec.svg │ │ ├── ee.svg │ │ ├── eg.svg │ │ ├── eh.svg │ │ ├── er.svg │ │ ├── es-ct.svg │ │ ├── es-ga.svg │ │ ├── es-pv.svg │ │ ├── es.svg │ │ ├── et.svg │ │ ├── eu.svg │ │ ├── fi.svg │ │ ├── fj.svg │ │ ├── fk.svg │ │ ├── fm.svg │ │ ├── fo.svg │ │ ├── fr.svg │ │ ├── ga.svg │ │ ├── gb-eng.svg │ │ ├── gb-nir.svg │ │ ├── gb-sct.svg │ │ ├── gb-wls.svg │ │ ├── gb.svg │ │ ├── gd.svg │ │ ├── ge.svg │ │ ├── gf.svg │ │ ├── gg.svg │ │ ├── gh.svg │ │ ├── gi.svg │ │ ├── gl.svg │ │ ├── gm.svg │ │ ├── gn.svg │ │ ├── gp.svg │ │ ├── gq.svg │ │ ├── gr.svg │ │ ├── gs.svg │ │ ├── gt.svg │ │ ├── gu.svg │ │ ├── gw.svg │ │ ├── gy.svg │ │ ├── hk.svg │ │ ├── hm.svg │ │ ├── hn.svg │ │ ├── hr.svg │ │ ├── ht.svg │ │ ├── hu.svg │ │ ├── ic.svg │ │ ├── id.svg │ │ ├── ie.svg │ │ ├── il.svg │ │ ├── im.svg │ │ ├── in.svg │ │ ├── io.svg │ │ ├── iq.svg │ │ ├── ir.svg │ │ ├── is.svg │ │ ├── it.svg │ │ ├── je.svg │ │ ├── jm.svg │ │ ├── jo.svg │ │ ├── jp.svg │ │ ├── ke.svg │ │ ├── kg.svg │ │ ├── kh.svg │ │ ├── ki.svg │ │ ├── km.svg │ │ ├── kn.svg │ │ ├── kp.svg │ │ ├── kr.svg │ │ ├── kw.svg │ │ ├── ky.svg │ │ ├── kz.svg │ │ ├── la.svg │ │ ├── lb.svg │ │ ├── lc.svg │ │ ├── li.svg │ │ ├── lk.svg │ │ ├── lr.svg │ │ ├── ls.svg │ │ ├── lt.svg │ │ ├── lu.svg │ │ ├── lv.svg │ │ ├── ly.svg │ │ ├── ma.svg │ │ ├── mc.svg │ │ ├── md.svg │ │ ├── me.svg │ │ ├── mf.svg │ │ ├── mg.svg │ │ ├── mh.svg │ │ ├── mk.svg │ │ ├── ml.svg │ │ ├── mm.svg │ │ ├── mn.svg │ │ ├── mo.svg │ │ ├── mp.svg │ │ ├── mq.svg │ │ ├── mr.svg │ │ ├── ms.svg │ │ ├── mt.svg │ │ ├── mu.svg │ │ ├── mv.svg │ │ ├── mw.svg │ │ ├── mx.svg │ │ ├── my.svg │ │ ├── mz.svg │ │ ├── na.svg │ │ ├── nc.svg │ │ ├── ne.svg │ │ ├── nf.svg │ │ ├── ng.svg │ │ ├── ni.svg │ │ ├── nl.svg │ │ ├── no.svg │ │ ├── np.svg │ │ ├── nr.svg │ │ ├── nu.svg │ │ ├── nz.svg │ │ ├── om.svg │ │ ├── pa.svg │ │ ├── pc.svg │ │ ├── pe.svg │ │ ├── pf.svg │ │ ├── pg.svg │ │ ├── ph.svg │ │ ├── pk.svg │ │ ├── pl.svg │ │ ├── pm.svg │ │ ├── pn.svg │ │ ├── pr.svg │ │ ├── ps.svg │ │ ├── pt.svg │ │ ├── pw.svg │ │ ├── py.svg │ │ ├── qa.svg │ │ ├── re.svg │ │ ├── ro.svg │ │ ├── rs.svg │ │ ├── ru.svg │ │ ├── rw.svg │ │ ├── sa.svg │ │ ├── sb.svg │ │ ├── sc.svg │ │ ├── sd.svg │ │ ├── se.svg │ │ ├── sg.svg │ │ ├── sh-ac.svg │ │ ├── sh-hl.svg │ │ ├── sh-ta.svg │ │ ├── sh.svg │ │ ├── si.svg │ │ ├── sj.svg │ │ ├── sk.svg │ │ ├── sl.svg │ │ ├── sm.svg │ │ ├── sn.svg │ │ ├── so.svg │ │ ├── sr.svg │ │ ├── ss.svg │ │ ├── st.svg │ │ ├── sv.svg │ │ ├── sx.svg │ │ ├── sy.svg │ │ ├── sz.svg │ │ ├── tc.svg │ │ ├── td.svg │ │ ├── tf.svg │ │ ├── tg.svg │ │ ├── th.svg │ │ ├── tj.svg │ │ ├── tk.svg │ │ ├── tl.svg │ │ ├── tm.svg │ │ ├── tn.svg │ │ ├── to.svg │ │ ├── tr.svg │ │ ├── tt.svg │ │ ├── tv.svg │ │ ├── tw.svg │ │ ├── tz.svg │ │ ├── ua.svg │ │ ├── ug.svg │ │ ├── um.svg │ │ ├── un.svg │ │ ├── us.svg │ │ ├── uy.svg │ │ ├── uz.svg │ │ ├── va.svg │ │ ├── vc.svg │ │ ├── ve.svg │ │ ├── vg.svg │ │ ├── vi.svg │ │ ├── vn.svg │ │ ├── vu.svg │ │ ├── wf.svg │ │ ├── ws.svg │ │ ├── xk.svg │ │ ├── xx.svg │ │ ├── ye.svg │ │ ├── yt.svg │ │ ├── za.svg │ │ ├── zm.svg │ │ └── zw.svg │ └── 4x3 │ │ ├── ad.svg │ │ ├── ae.svg │ │ ├── af.svg │ │ ├── ag.svg │ │ ├── ai.svg │ │ ├── al.svg │ │ ├── am.svg │ │ ├── ao.svg │ │ ├── aq.svg │ │ ├── ar.svg │ │ ├── arab.svg │ │ ├── as.svg │ │ ├── at.svg │ │ ├── au.svg │ │ ├── aw.svg │ │ ├── ax.svg │ │ ├── az.svg │ │ ├── ba.svg │ │ ├── bb.svg │ │ ├── bd.svg │ │ ├── be.svg │ │ ├── bf.svg │ │ ├── bg.svg │ │ ├── bh.svg │ │ ├── bi.svg │ │ ├── bj.svg │ │ ├── bl.svg │ │ ├── bm.svg │ │ ├── bn.svg │ │ ├── bo.svg │ │ ├── bq.svg │ │ ├── br.svg │ │ ├── bs.svg │ │ ├── bt.svg │ │ ├── bv.svg │ │ ├── bw.svg │ │ ├── by.svg │ │ ├── bz.svg │ │ ├── ca.svg │ │ ├── cc.svg │ │ ├── cd.svg │ │ ├── cefta.svg │ │ ├── cf.svg │ │ ├── cg.svg │ │ ├── ch.svg │ │ ├── ci.svg │ │ ├── ck.svg │ │ ├── cl.svg │ │ ├── cm.svg │ │ ├── cn.svg │ │ ├── co.svg │ │ ├── cp.svg │ │ ├── cr.svg │ │ ├── cu.svg │ │ ├── cv.svg │ │ ├── cw.svg │ │ ├── cx.svg │ │ ├── cy.svg │ │ ├── cz.svg │ │ ├── de.svg │ │ ├── dg.svg │ │ ├── dj.svg │ │ ├── dk.svg │ │ ├── dm.svg │ │ ├── do.svg │ │ ├── dz.svg │ │ ├── eac.svg │ │ ├── ec.svg │ │ ├── ee.svg │ │ ├── eg.svg │ │ ├── eh.svg │ │ ├── er.svg │ │ ├── es-ct.svg │ │ ├── es-ga.svg │ │ ├── es-pv.svg │ │ ├── es.svg │ │ ├── et.svg │ │ ├── eu.svg │ │ ├── fi.svg │ │ ├── fj.svg │ │ ├── fk.svg │ │ ├── fm.svg │ │ ├── fo.svg │ │ ├── fr.svg │ │ ├── ga.svg │ │ ├── gb-eng.svg │ │ ├── gb-nir.svg │ │ ├── gb-sct.svg │ │ ├── gb-wls.svg │ │ ├── gb.svg │ │ ├── gd.svg │ │ ├── ge.svg │ │ ├── gf.svg │ │ ├── gg.svg │ │ ├── gh.svg │ │ ├── gi.svg │ │ ├── gl.svg │ │ ├── gm.svg │ │ ├── gn.svg │ │ ├── gp.svg │ │ ├── gq.svg │ │ ├── gr.svg │ │ ├── gs.svg │ │ ├── gt.svg │ │ ├── gu.svg │ │ ├── gw.svg │ │ ├── gy.svg │ │ ├── hk.svg │ │ ├── hm.svg │ │ ├── hn.svg │ │ ├── hr.svg │ │ ├── ht.svg │ │ ├── hu.svg │ │ ├── ic.svg │ │ ├── id.svg │ │ ├── ie.svg │ │ ├── il.svg │ │ ├── im.svg │ │ ├── in.svg │ │ ├── io.svg │ │ ├── iq.svg │ │ ├── ir.svg │ │ ├── is.svg │ │ ├── it.svg │ │ ├── je.svg │ │ ├── jm.svg │ │ ├── jo.svg │ │ ├── jp.svg │ │ ├── ke.svg │ │ ├── kg.svg │ │ ├── kh.svg │ │ ├── ki.svg │ │ ├── km.svg │ │ ├── kn.svg │ │ ├── kp.svg │ │ ├── kr.svg │ │ ├── kw.svg │ │ ├── ky.svg │ │ ├── kz.svg │ │ ├── la.svg │ │ ├── lb.svg │ │ ├── lc.svg │ │ ├── li.svg │ │ ├── lk.svg │ │ ├── lr.svg │ │ ├── ls.svg │ │ ├── lt.svg │ │ ├── lu.svg │ │ ├── lv.svg │ │ ├── ly.svg │ │ ├── ma.svg │ │ ├── mc.svg │ │ ├── md.svg │ │ ├── me.svg │ │ ├── mf.svg │ │ ├── mg.svg │ │ ├── mh.svg │ │ ├── mk.svg │ │ ├── ml.svg │ │ ├── mm.svg │ │ ├── mn.svg │ │ ├── mo.svg │ │ ├── mp.svg │ │ ├── mq.svg │ │ ├── mr.svg │ │ ├── ms.svg │ │ ├── mt.svg │ │ ├── mu.svg │ │ ├── mv.svg │ │ ├── mw.svg │ │ ├── mx.svg │ │ ├── my.svg │ │ ├── mz.svg │ │ ├── na.svg │ │ ├── nc.svg │ │ ├── ne.svg │ │ ├── nf.svg │ │ ├── ng.svg │ │ ├── ni.svg │ │ ├── nl.svg │ │ ├── no.svg │ │ ├── np.svg │ │ ├── nr.svg │ │ ├── nu.svg │ │ ├── nz.svg │ │ ├── om.svg │ │ ├── pa.svg │ │ ├── pc.svg │ │ ├── pe.svg │ │ ├── pf.svg │ │ ├── pg.svg │ │ ├── ph.svg │ │ ├── pk.svg │ │ ├── pl.svg │ │ ├── pm.svg │ │ ├── pn.svg │ │ ├── pr.svg │ │ ├── ps.svg │ │ ├── pt.svg │ │ ├── pw.svg │ │ ├── py.svg │ │ ├── qa.svg │ │ ├── re.svg │ │ ├── ro.svg │ │ ├── rs.svg │ │ ├── ru.svg │ │ ├── rw.svg │ │ ├── sa.svg │ │ ├── sb.svg │ │ ├── sc.svg │ │ ├── sd.svg │ │ ├── se.svg │ │ ├── sg.svg │ │ ├── sh-ac.svg │ │ ├── sh-hl.svg │ │ ├── sh-ta.svg │ │ ├── sh.svg │ │ ├── si.svg │ │ ├── sj.svg │ │ ├── sk.svg │ │ ├── sl.svg │ │ ├── sm.svg │ │ ├── sn.svg │ │ ├── so.svg │ │ ├── sr.svg │ │ ├── ss.svg │ │ ├── st.svg │ │ ├── sv.svg │ │ ├── sx.svg │ │ ├── sy.svg │ │ ├── sz.svg │ │ ├── tc.svg │ │ ├── td.svg │ │ ├── tf.svg │ │ ├── tg.svg │ │ ├── th.svg │ │ ├── tj.svg │ │ ├── tk.svg │ │ ├── tl.svg │ │ ├── tm.svg │ │ ├── tn.svg │ │ ├── to.svg │ │ ├── tr.svg │ │ ├── tt.svg │ │ ├── tv.svg │ │ ├── tw.svg │ │ ├── tz.svg │ │ ├── ua.svg │ │ ├── ug.svg │ │ ├── um.svg │ │ ├── un.svg │ │ ├── us.svg │ │ ├── uy.svg │ │ ├── uz.svg │ │ ├── va.svg │ │ ├── vc.svg │ │ ├── ve.svg │ │ ├── vg.svg │ │ ├── vi.svg │ │ ├── vn.svg │ │ ├── vu.svg │ │ ├── wf.svg │ │ ├── ws.svg │ │ ├── xk.svg │ │ ├── xx.svg │ │ ├── ye.svg │ │ ├── yt.svg │ │ ├── za.svg │ │ ├── zm.svg │ │ └── zw.svg ├── img │ ├── computers.jpg │ ├── openuem.png │ ├── os │ │ ├── almalinux.png │ │ ├── debian.png │ │ ├── fedora.png │ │ ├── question.png │ │ ├── redhat.png │ │ ├── rockylinux.png │ │ ├── suse.png │ │ ├── ubuntu.png │ │ └── windows.png │ └── reports │ │ ├── check.png │ │ ├── warning.png │ │ └── x.png ├── js │ ├── _hyperscript.min.js │ ├── core.iife.js │ ├── core │ │ ├── base64.js │ │ ├── crypto │ │ │ ├── aes.js │ │ │ ├── bigint.js │ │ │ ├── crypto.js │ │ │ ├── des.js │ │ │ ├── dh.js │ │ │ ├── md5.js │ │ │ └── rsa.js │ │ ├── decoders │ │ │ ├── copyrect.js │ │ │ ├── h264.js │ │ │ ├── hextile.js │ │ │ ├── jpeg.js │ │ │ ├── raw.js │ │ │ ├── rre.js │ │ │ ├── tight.js │ │ │ ├── tightpng.js │ │ │ ├── zlib.js │ │ │ └── zrle.js │ │ ├── deflator.js │ │ ├── display.js │ │ ├── encodings.js │ │ ├── inflator.js │ │ ├── input │ │ │ ├── domkeytable.js │ │ │ ├── fixedkeys.js │ │ │ ├── gesturehandler.js │ │ │ ├── keyboard.js │ │ │ ├── keysym.js │ │ │ ├── keysymdef.js │ │ │ ├── util.js │ │ │ ├── vkeys.js │ │ │ └── xtscancodes.js │ │ ├── ra2.js │ │ ├── rfb.js │ │ ├── util │ │ │ ├── browser.js │ │ │ ├── cursor.js │ │ │ ├── element.js │ │ │ ├── events.js │ │ │ ├── eventtarget.js │ │ │ ├── int.js │ │ │ ├── logging.js │ │ │ └── strings.js │ │ └── websock.js │ ├── echarts.min.js │ ├── franken-wc.iife.js │ ├── htmx.min.js │ ├── icon.iife.js │ ├── lucide-icons.js │ ├── lucide.min.js │ ├── novnc.js │ ├── openuem.js │ ├── openuem.js.map │ ├── uikit.min.js │ └── vendor │ │ └── pako │ │ ├── LICENSE │ │ ├── README.md │ │ └── lib │ │ ├── utils │ │ └── common.js │ │ └── zlib │ │ ├── adler32.js │ │ ├── constants.js │ │ ├── crc32.js │ │ ├── deflate.js │ │ ├── gzheader.js │ │ ├── inffast.js │ │ ├── inflate.js │ │ ├── inftrees.js │ │ ├── messages.js │ │ ├── trees.js │ │ └── zstream.js └── openuem.ico ├── go.mod ├── go.sum ├── internal ├── commands │ ├── check-requisites.go │ ├── flags.go │ ├── start.go │ ├── stop.go │ └── type.go ├── common │ ├── check_updates.go │ ├── cli.go │ ├── config.go │ ├── db.go │ ├── downloads.go │ ├── flatpakdb.go │ ├── server_releases.go │ ├── software_package.go │ ├── tmp_dir.go │ ├── wd.go │ ├── wingetdb.go │ └── worker.go ├── controllers │ ├── authserver │ │ ├── authserver.go │ │ └── handlers │ │ │ ├── auth.go │ │ │ ├── handler.go │ │ │ └── routes.go │ ├── router │ │ ├── middleware │ │ │ └── i18n.go │ │ └── router.go │ ├── sessions │ │ └── sessions.go │ └── webserver │ │ ├── handlers │ │ ├── agents.go │ │ ├── auth.go │ │ ├── certificates.go │ │ ├── common.go │ │ ├── computers.go │ │ ├── dashboard.go │ │ ├── deploy.go │ │ ├── handler.go │ │ ├── login.go │ │ ├── logout.go │ │ ├── org_metadata.go │ │ ├── printers.go │ │ ├── profiles.go │ │ ├── register.go │ │ ├── render.go │ │ ├── render_markdown.go │ │ ├── reports.go │ │ ├── routes.go │ │ ├── security.go │ │ ├── sessions.go │ │ ├── settings.go │ │ ├── sftp.go │ │ ├── sites.go │ │ ├── smtp.go │ │ ├── software.go │ │ ├── tags.go │ │ ├── tasks.go │ │ ├── tenants.go │ │ ├── update_agents.go │ │ ├── update_servers.go │ │ ├── users.go │ │ └── winget.go │ │ └── webserver.go ├── models │ ├── agents.go │ ├── agents_test.go │ ├── antivirus.go │ ├── antivirus_test.go │ ├── apps.go │ ├── apps_test.go │ ├── certificates.go │ ├── certificates_test.go │ ├── computers.go │ ├── computers_test.go │ ├── deployment.go │ ├── deployment_test.go │ ├── latest_updates.go │ ├── latest_updates_test.go │ ├── metadata.go │ ├── metadata_test.go │ ├── model.go │ ├── model_test.go │ ├── operatingsystems.go │ ├── operatingsystems_test.go │ ├── org_metadata.go │ ├── org_metadata_test.go │ ├── overview.go │ ├── printers.go │ ├── printers_test.go │ ├── profiles.go │ ├── releases.go │ ├── releases_test.go │ ├── server.go │ ├── server_test.go │ ├── servers │ │ └── api.go │ ├── sessions.go │ ├── sessions_test.go │ ├── settings.go │ ├── settings_test.go │ ├── site.go │ ├── smtp.go │ ├── smtp_test.go │ ├── tags.go │ ├── tags_test.go │ ├── tasks.go │ ├── tenant.go │ ├── updates.go │ ├── updates_test.go │ ├── user.go │ ├── user_test.go │ └── winget │ │ └── deploy.go ├── service │ ├── linux │ │ └── service.go │ └── windows │ │ ├── rsrc_windows_386.syso │ │ ├── rsrc_windows_amd64.syso │ │ └── service.go └── views │ ├── admin_views │ ├── admin_navbar.templ │ ├── admin_navbar_test.go │ ├── certificates_views.templ │ ├── org_metadata_views.templ │ ├── sessions_views.templ │ ├── settings.templ │ ├── sites_views.templ │ ├── smtpsettings_views.templ │ ├── tags_views.templ │ ├── tenants_views.templ │ ├── update_agents.templ │ ├── update_servers_views.templ │ └── users_views.templ │ ├── agents_views │ └── agents.templ │ ├── charts │ ├── agent_by_last_report.go │ ├── agent_by_os.go │ ├── agent_by_os_version.go │ ├── agent_by_system_update.go │ └── top_10_apps.go │ ├── computers_views │ ├── apps_views.templ │ ├── computer.templ │ ├── computers_navbar.templ │ ├── computers_views.templ │ ├── deploy_views.templ │ ├── logical_disks.templ │ ├── metadata_views.templ │ ├── monitor.templ │ ├── network_adapters.templ │ ├── notes_views.templ │ ├── operating_system.templ │ ├── overview_views.templ │ ├── power_views.templ │ ├── printers.templ │ ├── rdp_views.templ │ ├── remote-assistance.templ │ ├── sftp_views.templ │ ├── shares.templ │ └── vnc_views.templ │ ├── dashboard_views │ ├── chart.templ │ └── dashboard.templ │ ├── deploy_views │ └── deploy_views.templ │ ├── error_page.templ │ ├── filters │ ├── clear.all.filter.templ │ ├── clear.filter.templ │ ├── date.filter.templ │ ├── filter.go │ ├── options.filter.templ │ ├── singlechoice.filter.templ │ ├── source.filter.templ │ ├── tags.filter.templ │ └── text.filter.templ │ ├── layout │ ├── base.layout.templ │ ├── login.layout.templ │ └── register.layout.templ │ ├── locales │ ├── en.yaml │ ├── es.yaml │ └── locales.go │ ├── login_views │ └── login.templ │ ├── partials │ ├── add.tag.partials.templ │ ├── alerticon.partials.templ │ ├── bitlocker.partials.templ │ ├── brand.partials.templ │ ├── checkmark.partials.templ │ ├── command.partials.templ │ ├── confirm.partials.templ │ ├── confirm_admission.partials.templ │ ├── confirm_admit_agents.partials.templ │ ├── confirm_cert_revocation.templ │ ├── confirm_delete.partials.templ │ ├── confirm_delete_agent.partials.templ │ ├── confirm_disable.partials.templ │ ├── confirm_disable_agents.partials.templ │ ├── confirm_enable_agents.partials.templ │ ├── confirm_update_agents.partials.templ │ ├── confirm_update_servers.partials.templ │ ├── countries.partials.templ │ ├── csvreport.partials.templ │ ├── error.partials.templ │ ├── header.partials.templ │ ├── local_group.partials.templ │ ├── local_user.partials.templ │ ├── manufacturer.partials.templ │ ├── markdown.partials.templ │ ├── message.partials.templ │ ├── more.button.templ │ ├── navbar.partials.templ │ ├── osbadge.partials.templ │ ├── package.search.partials.templ │ ├── pagination.partials.templ │ ├── pdfreport.partials.templ │ ├── refresh.partials.templ │ ├── registry.partials.templ │ ├── show.tags.partials.templ │ ├── sort_by_column_icon.partials.templ │ ├── status.partials.templ │ └── task.select.partials.templ │ ├── printers_views │ └── printer_views.templ │ ├── profiles_views │ ├── profiles_edit.templ │ ├── profiles_issues.templ │ ├── profiles_new.templ │ └── profiles_views.templ │ ├── register_views │ └── register_views.templ │ ├── reports_views │ └── reports_views.templ │ ├── security_views │ ├── antivirus_views.templ │ ├── latest_updates_views.templ │ ├── security_views.templ │ └── updates_views.templ │ ├── software_views │ └── software_views.templ │ ├── tailwind │ ├── base.css │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.cjs │ └── tailwind.config.js │ ├── tasks_views │ ├── tasks_edit.templ │ └── tasks_new.templ │ ├── translatorForDates.go │ └── typescript │ ├── package-lock.json │ ├── package.json │ └── src │ └── index.ts └── main.go /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: 'Bug: ' 5 | labels: '' 6 | assignees: doncicuto 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - Browser [e.g. chrome, safari] 28 | - Version [e.g. 22] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: 'Feat:' 5 | labels: '' 6 | assignees: doncicuto 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.db 3 | tmp 4 | node_modules 5 | *_templ.go 6 | *_templ.txt 7 | *.cer 8 | *.key 9 | .vscode 10 | PIDFILE 11 | openuem-console 12 | .air.toml -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/.gitmodules -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.min.js -------------------------------------------------------------------------------- /.woodpecker.yml: -------------------------------------------------------------------------------- 1 | when: 2 | - event: [push, manual] 3 | branch: main 4 | 5 | steps: 6 | publish: 7 | image: woodpeckerci/plugin-docker-buildx 8 | settings: 9 | platforms: linux/amd64 10 | repo: openuem/openuem-console 11 | tags: 12 | - 0.7.1 13 | - latest 14 | username: 15 | from_secret: docker_username 16 | password: 17 | from_secret: docker_password 18 | notify: 19 | image: appleboy/drone-discord 20 | settings: 21 | webhook_id: 22 | from_secret: discord_webhook_id 23 | webhook_token: 24 | from_secret: discord_webhook_token 25 | message: > 26 | {{#success build.status}} 27 | repo {{repo.name}} build {{build.number}} succeeded. Good job. 28 | {{else}} 29 | repo {{repo.name}} build {{build.number}} failed. Fix me please. 30 | {{/success}} 31 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.24.2 AS build 2 | COPY . ./ 3 | RUN go install github.com/a-h/templ/cmd/templ@v0.3.857 4 | RUN templ generate 5 | RUN CGO_ENABLED=1 go build -o "/bin/openuem-console" . 6 | 7 | FROM debian:latest 8 | COPY --from=build /bin/openuem-console /bin/openuem-console 9 | COPY ./assets /bin/assets 10 | RUN apt-get update 11 | RUN apt install -y ca-certificates 12 | EXPOSE 1323 13 | EXPOSE 1324 14 | WORKDIR /bin 15 | ENTRYPOINT ["/bin/openuem-console"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenUEM - Console 2 | 3 | The Console is OpenUEM's Web User Interface 4 | 5 |  6 | 7 | The console allows you to perform the following actions: 8 | 9 | - Admit, enable or disable an agent that contacts OpenUEM Agent Workers 10 | - Browse an endpoint's information gathered by an agent 11 | - Start a VNC remote assistance session 12 | - Browse the files contained in an endpoint's logical disks 13 | - Deploy a package to an endpoint using Winget. You can also uninstalled packages deployed by OpenUEM 14 | - Create profiles to automate tasks to deploy software and manage settings (registry, local user, local groups...) 15 | - Wake On Lan, power off and reboot endpoints 16 | - Get statistics and check the status of the different OpenUEM components 17 | 18 | Now more about the console in [OpenUEM documentation](https://openuem.eu/docs/Console/intro) 19 | -------------------------------------------------------------------------------- /assets/css/SimpleIcons.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/css/SimpleIcons.otf -------------------------------------------------------------------------------- /assets/css/SimpleIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/css/SimpleIcons.ttf -------------------------------------------------------------------------------- /assets/css/SimpleIcons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/css/SimpleIcons.woff -------------------------------------------------------------------------------- /assets/css/SimpleIcons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/css/SimpleIcons.woff2 -------------------------------------------------------------------------------- /assets/css/remixicon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/css/remixicon.woff -------------------------------------------------------------------------------- /assets/css/remixicon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/css/remixicon.woff2 -------------------------------------------------------------------------------- /assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/favicon.ico -------------------------------------------------------------------------------- /assets/flags/1x1/ae.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/ag.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/am.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/at.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/ax.svg: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /assets/flags/1x1/az.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/bb.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/bd.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/be.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/bf.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/bg.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/bh.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/bj.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/bl.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/bq.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/bs.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/bv.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/bw.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/ca.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/cd.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/cefta.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/cf.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/cg.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/ch.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/1x1/ci.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/cl.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/cm.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/cn.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/co.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/cp.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/cr.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/cu.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/cw.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/cz.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/de.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/dj.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/dk.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/dz.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/ee.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/eh.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/es-ct.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/es-pv.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/fi.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/fm.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/fo.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/fr.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/ga.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/gb-sct.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/gb.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/gf.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/gg.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/1x1/gh.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/gl.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/gm.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/1x1/gn.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/gp.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/gr.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/1x1/gw.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/gy.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/1x1/hk.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/hu.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/ic.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/id.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/ie.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/il.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/is.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/it.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/jm.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/jo.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/1x1/jp.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/kn.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/kp.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/kr.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /assets/flags/1x1/kw.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/la.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/lc.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/lr.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/lt.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/lu.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/lv.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/ly.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/ma.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/mc.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/mf.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/mg.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/mh.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/mk.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/ml.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/mm.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /assets/flags/1x1/mq.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/mr.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/mu.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/mv.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/na.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/1x1/ne.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/ng.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/nl.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/no.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/nr.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/nu.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /assets/flags/1x1/pa.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/pe.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/pk.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/pl.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/pm.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/pr.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/ps.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/pw.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/qa.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/re.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/ro.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/ru.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/rw.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/sb.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/sc.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/sd.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/se.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/sg.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/sh.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/sj.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/sl.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/1x1/sn.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/so.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/sr.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/ss.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/st.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/1x1/sy.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/td.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/tg.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/1x1/th.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/tk.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/tl.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/1x1/tn.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/to.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /assets/flags/1x1/tr.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/tt.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/tz.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/1x1/ua.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/1x1/um.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/1x1/us.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/1x1/vc.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/1x1/vn.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/1x1/wf.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/ws.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/xx.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/1x1/ye.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/1x1/yt.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/1x1/za.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /assets/flags/4x3/ae.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/ag.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/am.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/at.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/ax.svg: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /assets/flags/4x3/az.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/bb.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/bd.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/be.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/bf.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/bg.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/bh.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/bj.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/bl.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/bq.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/bs.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/bv.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/bw.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/ca.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/cd.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/cefta.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/cf.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/4x3/cg.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/4x3/ch.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/4x3/ci.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/cl.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/cm.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/4x3/cn.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/4x3/co.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/cp.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/cr.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/cu.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/cw.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/cz.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/de.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/dj.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/dk.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/dz.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/ee.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/eh.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/4x3/es-ct.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/es-pv.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/fi.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/fm.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/4x3/fo.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/4x3/fr.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/ga.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/gb-sct.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/gb.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/gf.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/gg.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/4x3/gh.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/gl.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/gm.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/gn.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/gp.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/gr.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/4x3/gw.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/gy.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/4x3/hk.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/hu.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/ic.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/id.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/ie.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/il.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/is.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/4x3/it.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/jm.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/jo.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/4x3/jp.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/4x3/kn.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/kp.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/4x3/kw.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/la.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/4x3/lc.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/lr.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/lt.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/lu.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/lv.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/ly.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/ma.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/mc.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/mf.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/mg.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/mh.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/mk.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/ml.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/mm.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/4x3/mq.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/mr.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/mu.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/mv.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/ne.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/ng.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/nl.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/no.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/nr.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/flags/4x3/nu.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /assets/flags/4x3/pa.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/pe.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/pk.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/4x3/pl.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/pm.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/pr.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/ps.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /assets/flags/4x3/pw.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/4x3/qa.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/re.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/ro.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/ru.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/rw.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/sb.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/sc.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/sd.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/se.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/sg.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/sh.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/sj.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/sl.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/sn.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/so.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/4x3/sr.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/ss.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/st.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/flags/4x3/sy.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/td.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/tg.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/flags/4x3/th.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/tk.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/tl.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/tn.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/to.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /assets/flags/4x3/tr.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/tt.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/tz.svg: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /assets/flags/4x3/ua.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/flags/4x3/um.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/4x3/us.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /assets/flags/4x3/vc.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /assets/flags/4x3/vn.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/flags/4x3/wf.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/ws.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/xx.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/flags/4x3/ye.svg: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /assets/flags/4x3/yt.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/flags/4x3/za.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /assets/img/computers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/computers.jpg -------------------------------------------------------------------------------- /assets/img/openuem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/openuem.png -------------------------------------------------------------------------------- /assets/img/os/almalinux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/almalinux.png -------------------------------------------------------------------------------- /assets/img/os/debian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/debian.png -------------------------------------------------------------------------------- /assets/img/os/fedora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/fedora.png -------------------------------------------------------------------------------- /assets/img/os/question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/question.png -------------------------------------------------------------------------------- /assets/img/os/redhat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/redhat.png -------------------------------------------------------------------------------- /assets/img/os/rockylinux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/rockylinux.png -------------------------------------------------------------------------------- /assets/img/os/suse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/suse.png -------------------------------------------------------------------------------- /assets/img/os/ubuntu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/ubuntu.png -------------------------------------------------------------------------------- /assets/img/os/windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/os/windows.png -------------------------------------------------------------------------------- /assets/img/reports/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/reports/check.png -------------------------------------------------------------------------------- /assets/img/reports/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/reports/warning.png -------------------------------------------------------------------------------- /assets/img/reports/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/img/reports/x.png -------------------------------------------------------------------------------- /assets/js/core/crypto/bigint.js: -------------------------------------------------------------------------------- 1 | export function modPow(b, e, m) { 2 | let r = 1n; 3 | b = b % m; 4 | while (e > 0n) { 5 | if ((e & 1n) === 1n) { 6 | r = (r * b) % m; 7 | } 8 | e = e >> 1n; 9 | b = (b * b) % m; 10 | } 11 | return r; 12 | } 13 | 14 | export function bigIntToU8Array(bigint, padLength=0) { 15 | let hex = bigint.toString(16); 16 | if (padLength === 0) { 17 | padLength = Math.ceil(hex.length / 2); 18 | } 19 | hex = hex.padStart(padLength * 2, '0'); 20 | const length = hex.length / 2; 21 | const arr = new Uint8Array(length); 22 | for (let i = 0; i < length; i++) { 23 | arr[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16); 24 | } 25 | return arr; 26 | } 27 | 28 | export function u8ArrayToBigInt(arr) { 29 | let hex = '0x'; 30 | for (let i = 0; i < arr.length; i++) { 31 | hex += arr[i].toString(16).padStart(2, '0'); 32 | } 33 | return BigInt(hex); 34 | } 35 | -------------------------------------------------------------------------------- /assets/js/core/decoders/copyrect.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | * 8 | */ 9 | 10 | export default class CopyRectDecoder { 11 | decodeRect(x, y, width, height, sock, display, depth) { 12 | if (sock.rQwait("COPYRECT", 4)) { 13 | return false; 14 | } 15 | 16 | let deltaX = sock.rQshift16(); 17 | let deltaY = sock.rQshift16(); 18 | 19 | if ((width === 0) || (height === 0)) { 20 | return true; 21 | } 22 | 23 | display.copyImage(deltaX, deltaY, x, y, width, height); 24 | 25 | return true; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /assets/js/core/decoders/tightpng.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | * 8 | */ 9 | 10 | import TightDecoder from './tight.js'; 11 | 12 | export default class TightPNGDecoder extends TightDecoder { 13 | _pngRect(x, y, width, height, sock, display, depth) { 14 | let data = this._readData(sock); 15 | if (data === null) { 16 | return false; 17 | } 18 | 19 | display.imageRect(x, y, width, height, "image/png", data); 20 | 21 | return true; 22 | } 23 | 24 | _basicRect(ctl, x, y, width, height, sock, display, depth) { 25 | throw new Error("BasicCompression received in TightPNG rect"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /assets/js/core/util/element.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | /* 10 | * HTML element utility functions 11 | */ 12 | 13 | export function clientToElement(x, y, elem) { 14 | const bounds = elem.getBoundingClientRect(); 15 | let pos = { x: 0, y: 0 }; 16 | // Clip to target bounds 17 | if (x < bounds.left) { 18 | pos.x = 0; 19 | } else if (x >= bounds.right) { 20 | pos.x = bounds.width - 1; 21 | } else { 22 | pos.x = x - bounds.left; 23 | } 24 | if (y < bounds.top) { 25 | pos.y = 0; 26 | } else if (y >= bounds.bottom) { 27 | pos.y = bounds.height - 1; 28 | } else { 29 | pos.y = y - bounds.top; 30 | } 31 | return pos; 32 | } 33 | -------------------------------------------------------------------------------- /assets/js/core/util/int.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | export function toUnsigned32bit(toConvert) { 10 | return toConvert >>> 0; 11 | } 12 | 13 | export function toSigned32bit(toConvert) { 14 | return toConvert | 0; 15 | } 16 | -------------------------------------------------------------------------------- /assets/js/core/util/strings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | // Decode from UTF-8 10 | export function decodeUTF8(utf8string, allowLatin1=false) { 11 | try { 12 | return decodeURIComponent(escape(utf8string)); 13 | } catch (e) { 14 | if (e instanceof URIError) { 15 | if (allowLatin1) { 16 | // If we allow Latin1 we can ignore any decoding fails 17 | // and in these cases return the original string 18 | return utf8string; 19 | } 20 | } 21 | throw e; 22 | } 23 | } 24 | 25 | // Encode to UTF-8 26 | export function encodeUTF8(DOMString) { 27 | return unescape(encodeURIComponent(DOMString)); 28 | } 29 | -------------------------------------------------------------------------------- /assets/js/lucide-icons.js: -------------------------------------------------------------------------------- 1 | lucide.createIcons({ 2 | Dashboard: lucide.Dashboard, 3 | Computer: lucide.Computer, 4 | AppWindow: lucide.AppWindow, 5 | Shield: lucide.Shield, 6 | GlobeLock: lucide.GlobeLock, 7 | Printer: lucide.Printer, 8 | Satellite: lucide.Satellite, 9 | }) -------------------------------------------------------------------------------- /assets/js/vendor/pako/README.md: -------------------------------------------------------------------------------- 1 | This is an ES6-modules-compatible version of 2 | https://github.com/nodeca/pako, based on pako version 1.0.3. 3 | 4 | It's more-or-less a direct translation of the original, with unused parts 5 | removed, and the dynamic support for non-typed arrays removed (since ES6 6 | modules don't work well with dynamic exports). 7 | -------------------------------------------------------------------------------- /assets/js/vendor/pako/lib/zlib/adler32.js: -------------------------------------------------------------------------------- 1 | // Note: adler32 takes 12% for level 0 and 2% for level 6. 2 | // It doesn't worth to make additional optimizationa as in original. 3 | // Small size is preferable. 4 | 5 | export default function adler32(adler, buf, len, pos) { 6 | var s1 = (adler & 0xffff) |0, 7 | s2 = ((adler >>> 16) & 0xffff) |0, 8 | n = 0; 9 | 10 | while (len !== 0) { 11 | // Set limit ~ twice less than 5552, to keep 12 | // s2 in 31-bits, because we force signed ints. 13 | // in other case %= will fail. 14 | n = len > 2000 ? 2000 : len; 15 | len -= n; 16 | 17 | do { 18 | s1 = (s1 + buf[pos++]) |0; 19 | s2 = (s2 + s1) |0; 20 | } while (--n); 21 | 22 | s1 %= 65521; 23 | s2 %= 65521; 24 | } 25 | 26 | return (s1 | (s2 << 16)) |0; 27 | } 28 | -------------------------------------------------------------------------------- /assets/js/vendor/pako/lib/zlib/crc32.js: -------------------------------------------------------------------------------- 1 | // Note: we can't get significant speed boost here. 2 | // So write code to minimize size - no pregenerated tables 3 | // and array tools dependencies. 4 | 5 | 6 | // Use ordinary array, since untyped makes no boost here 7 | export default function makeTable() { 8 | var c, table = []; 9 | 10 | for (var n = 0; n < 256; n++) { 11 | c = n; 12 | for (var k = 0; k < 8; k++) { 13 | c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); 14 | } 15 | table[n] = c; 16 | } 17 | 18 | return table; 19 | } 20 | 21 | // Create table on load. Just 255 signed longs. Not a problem. 22 | var crcTable = makeTable(); 23 | 24 | 25 | function crc32(crc, buf, len, pos) { 26 | var t = crcTable, 27 | end = pos + len; 28 | 29 | crc ^= -1; 30 | 31 | for (var i = pos; i < end; i++) { 32 | crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; 33 | } 34 | 35 | return (crc ^ (-1)); // >>> 0; 36 | } 37 | -------------------------------------------------------------------------------- /assets/js/vendor/pako/lib/zlib/messages.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 2: 'need dictionary', /* Z_NEED_DICT 2 */ 3 | 1: 'stream end', /* Z_STREAM_END 1 */ 4 | 0: '', /* Z_OK 0 */ 5 | '-1': 'file error', /* Z_ERRNO (-1) */ 6 | '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ 7 | '-3': 'data error', /* Z_DATA_ERROR (-3) */ 8 | '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ 9 | '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ 10 | '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ 11 | }; 12 | -------------------------------------------------------------------------------- /assets/js/vendor/pako/lib/zlib/zstream.js: -------------------------------------------------------------------------------- 1 | export default function ZStream() { 2 | /* next input byte */ 3 | this.input = null; // JS specific, because we have no pointers 4 | this.next_in = 0; 5 | /* number of bytes available at input */ 6 | this.avail_in = 0; 7 | /* total number of input bytes read so far */ 8 | this.total_in = 0; 9 | /* next output byte should be put there */ 10 | this.output = null; // JS specific, because we have no pointers 11 | this.next_out = 0; 12 | /* remaining free space at output */ 13 | this.avail_out = 0; 14 | /* total number of bytes output so far */ 15 | this.total_out = 0; 16 | /* last error message, NULL if no error */ 17 | this.msg = ''/*Z_NULL*/; 18 | /* not visible by applications */ 19 | this.state = null; 20 | /* best guess about the data type: binary or text */ 21 | this.data_type = 2/*Z_UNKNOWN*/; 22 | /* adler32 value of the uncompressed data */ 23 | this.adler = 0; 24 | } 25 | -------------------------------------------------------------------------------- /assets/openuem.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/assets/openuem.ico -------------------------------------------------------------------------------- /internal/commands/stop.go: -------------------------------------------------------------------------------- 1 | package commands 2 | 3 | import "github.com/urfave/cli/v2" 4 | 5 | func StopConsole() *cli.Command { 6 | return &cli.Command{ 7 | Name: "stop", 8 | Usage: "Stop the OpenUEM console", 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /internal/commands/type.go: -------------------------------------------------------------------------------- 1 | package commands 2 | 3 | import ( 4 | "crypto/x509" 5 | 6 | "github.com/nats-io/nats.go" 7 | "github.com/open-uem/openuem-console/internal/models" 8 | ) 9 | 10 | type ConsoleCommand struct { 11 | NATSConnection *nats.Conn 12 | Model *models.Model 13 | CACert *x509.Certificate 14 | DBUrl string 15 | CertPath string 16 | CertKey string 17 | CACertPath string 18 | NATSServers string 19 | JWTKey string 20 | Domain string 21 | } 22 | -------------------------------------------------------------------------------- /internal/common/wd.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import ( 4 | "log" 5 | "os" 6 | "path/filepath" 7 | ) 8 | 9 | func GetWd() (string, error) { 10 | ex, err := os.Executable() 11 | if err != nil { 12 | log.Printf("[ERROR]:could not get executable info: %v", err) 13 | return "", err 14 | } 15 | return filepath.Dir(ex), nil 16 | } 17 | -------------------------------------------------------------------------------- /internal/controllers/authserver/handlers/handler.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "crypto/x509" 5 | 6 | "github.com/open-uem/openuem-console/internal/controllers/sessions" 7 | "github.com/open-uem/openuem-console/internal/models" 8 | ) 9 | 10 | type Handler struct { 11 | Model *models.Model 12 | SessionManager *sessions.SessionManager 13 | CACert *x509.Certificate 14 | ServerName string 15 | ConsolePort string 16 | ReverseProxyAuthPort string 17 | } 18 | 19 | func NewHandler(model *models.Model, sm *sessions.SessionManager, cert *x509.Certificate, server, consolePort, reverseProxyAuthPort string) *Handler { 20 | return &Handler{ 21 | Model: model, 22 | SessionManager: sm, 23 | CACert: cert, 24 | ServerName: server, 25 | ConsolePort: consolePort, 26 | ReverseProxyAuthPort: reverseProxyAuthPort, 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /internal/controllers/authserver/handlers/routes.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "github.com/labstack/echo/v4" 5 | ) 6 | 7 | func (h *Handler) Register(e *echo.Echo) { 8 | e.GET("/auth", h.Auth) 9 | } 10 | -------------------------------------------------------------------------------- /internal/controllers/router/middleware/i18n.go: -------------------------------------------------------------------------------- 1 | package middleware 2 | 3 | import ( 4 | "github.com/invopop/ctxi18n" 5 | "github.com/labstack/echo/v4" 6 | ) 7 | 8 | func GetLocale(next echo.HandlerFunc) echo.HandlerFunc { 9 | return func(c echo.Context) error { 10 | accept := c.Request().Header.Get("Accept-Language") 11 | ctx, err := ctxi18n.WithLocale(c.Request().Context(), accept) 12 | if err != nil { 13 | return err 14 | } 15 | c.SetRequest(c.Request().WithContext(ctx)) 16 | return next(c) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /internal/controllers/sessions/sessions.go: -------------------------------------------------------------------------------- 1 | package sessions 2 | 3 | import ( 4 | "context" 5 | "log" 6 | "time" 7 | 8 | "github.com/alexedwards/scs/pgxstore" 9 | "github.com/alexedwards/scs/v2" 10 | "github.com/jackc/pgx/v5/pgxpool" 11 | ) 12 | 13 | type SessionManager struct { 14 | Manager *scs.SessionManager 15 | Pool *pgxpool.Pool 16 | } 17 | 18 | func New(dbUrl string, sessionLifetimeInMinutes int) *SessionManager { 19 | var err error 20 | sm := SessionManager{} 21 | 22 | sm.Pool, err = pgxpool.New(context.Background(), dbUrl) 23 | if err != nil { 24 | log.Println("[FATAL]: session manager could not contact the database") 25 | log.Fatal(err) 26 | } 27 | 28 | sm.Manager = scs.New() 29 | sm.Manager.Lifetime = time.Duration(sessionLifetimeInMinutes) * time.Minute 30 | sm.Manager.Store = pgxstore.New(sm.Pool) 31 | sm.Manager.Cookie.Secure = true 32 | return &sm 33 | } 34 | 35 | func (s *SessionManager) Close() { 36 | s.Pool.Close() 37 | } 38 | -------------------------------------------------------------------------------- /internal/controllers/webserver/handlers/login.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "github.com/open-uem/openuem-console/internal/views/login_views" 5 | "github.com/labstack/echo/v4" 6 | ) 7 | 8 | func (h *Handler) Login(c echo.Context) error { 9 | return RenderLogin(c, login_views.LoginIndex(login_views.Login())) 10 | } 11 | -------------------------------------------------------------------------------- /internal/controllers/webserver/handlers/logout.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "net/http" 5 | 6 | "github.com/labstack/echo/v4" 7 | ) 8 | 9 | func (h *Handler) Logout(c echo.Context) error { 10 | if err := h.SessionManager.Manager.Destroy(c.Request().Context()); err != nil { 11 | return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) 12 | } 13 | return h.Login(c) 14 | } 15 | -------------------------------------------------------------------------------- /internal/controllers/webserver/handlers/printers.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "github.com/labstack/echo/v4" 5 | "github.com/open-uem/openuem-console/internal/views/printers_views" 6 | ) 7 | 8 | func (h *Handler) NetworkPrinters(c echo.Context) error { 9 | commonInfo, err := h.GetCommonInfo(c) 10 | if err != nil { 11 | return err 12 | } 13 | 14 | return RenderView(c, printers_views.PrintersIndex("| Network Printers", printers_views.Printers(c, commonInfo), commonInfo)) 15 | } 16 | -------------------------------------------------------------------------------- /internal/controllers/webserver/handlers/render_markdown.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "github.com/gomarkdown/markdown" 5 | "github.com/microcosm-cc/bluemonday" 6 | 7 | "github.com/labstack/echo/v4" 8 | ) 9 | 10 | func (h *Handler) RenderMarkdown(c echo.Context) error { 11 | // Get markdown 12 | 13 | md := c.FormValue("markdown") 14 | 15 | maybeUnsafeHTML := markdown.ToHTML([]byte(md), nil, nil) 16 | html := bluemonday.UGCPolicy().SanitizeBytes(maybeUnsafeHTML) 17 | 18 | return c.HTML(200, string(html)) 19 | } 20 | -------------------------------------------------------------------------------- /internal/models/model_test.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | "github.com/stretchr/testify/suite" 8 | ) 9 | 10 | type ModelTestSuite struct { 11 | suite.Suite 12 | } 13 | 14 | func (suite *ModelTestSuite) TestNewModel() { 15 | _, err := New("file:ent?mode=memory&_fk=1", "sqlite3", "openuem.eu") 16 | assert.NoError(suite.T(), err, "should create model") 17 | 18 | _, err = New("postgres://localhost:1111/test", "pgx", "openuem.eu") 19 | assert.Error(suite.T(), err, "pgx should raise error") 20 | } 21 | 22 | func (suite *ModelTestSuite) TestCloseModel() { 23 | m, err := New("file:ent?mode=memory&_fk=1", "sqlite3", "openuem.eu") 24 | assert.NoError(suite.T(), err, "should create model") 25 | err = m.Close() 26 | assert.NoError(suite.T(), err, "should close model") 27 | } 28 | 29 | func TestModelTestSuite(t *testing.T) { 30 | suite.Run(t, new(ModelTestSuite)) 31 | } 32 | -------------------------------------------------------------------------------- /internal/models/printers.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import ( 4 | "context" 5 | "strconv" 6 | 7 | "github.com/open-uem/ent/agent" 8 | "github.com/open-uem/ent/printer" 9 | "github.com/open-uem/ent/site" 10 | "github.com/open-uem/ent/tenant" 11 | "github.com/open-uem/openuem-console/internal/views/partials" 12 | ) 13 | 14 | func (m *Model) CountDifferentPrinters(c *partials.CommonInfo) (int, error) { 15 | siteID, err := strconv.Atoi(c.SiteID) 16 | if err != nil { 17 | return 0, err 18 | } 19 | tenantID, err := strconv.Atoi(c.TenantID) 20 | if err != nil { 21 | return 0, err 22 | } 23 | 24 | if siteID == -1 { 25 | return m.Client.Printer.Query().Where(printer.HasOwnerWith(agent.HasSiteWith(site.HasTenantWith(tenant.ID(tenantID))))).Select(printer.FieldName).Unique(true).Count(context.Background()) 26 | } else { 27 | return m.Client.Printer.Query().Where(printer.HasOwnerWith(agent.HasSiteWith(site.ID(siteID), site.HasTenantWith(tenant.ID(tenantID))))).Select(printer.FieldName).Unique(true).Count(context.Background()) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /internal/models/servers/api.go: -------------------------------------------------------------------------------- 1 | package servers 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "os" 7 | "path/filepath" 8 | 9 | openuem_nats "github.com/open-uem/nats" 10 | ) 11 | 12 | func GetLatestServerReleaseFromAPI(tmpDir string) (*openuem_nats.OpenUEMRelease, error) { 13 | latestServerReleasePath := filepath.Join(tmpDir, "latest.json") 14 | 15 | if _, err := os.Stat(latestServerReleasePath); os.IsNotExist(err) { 16 | return nil, fmt.Errorf("latest server releases json file doesn't exist, reason: %v", err) 17 | } 18 | 19 | data, err := os.ReadFile(latestServerReleasePath) 20 | if err != nil { 21 | return nil, err 22 | } 23 | 24 | r := openuem_nats.OpenUEMRelease{} 25 | if err := json.Unmarshal(data, &r); err != nil { 26 | return nil, err 27 | } 28 | 29 | return &r, nil 30 | } 31 | -------------------------------------------------------------------------------- /internal/service/windows/rsrc_windows_386.syso: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/internal/service/windows/rsrc_windows_386.syso -------------------------------------------------------------------------------- /internal/service/windows/rsrc_windows_amd64.syso: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-uem/openuem-console/ff238796196db268ab074886d72948e16bbdeb79/internal/service/windows/rsrc_windows_amd64.syso -------------------------------------------------------------------------------- /internal/views/dashboard_views/chart.templ: -------------------------------------------------------------------------------- 1 | package dashboard_views 2 | 3 | import "github.com/go-echarts/go-echarts/v2/render" 4 | 5 | templ Chart(title, description string, chart render.ChartSnippet) { 6 |