├── .gitignore ├── .vscode └── tasks.json ├── LICENSE ├── README.md ├── hothost-agent ├── Dockerfile ├── build.sh ├── debug.sh └── getinfo.sh └── server ├── .dockerignore ├── .gitignore ├── Dockerfile ├── build.sh ├── debug.sh ├── frontend ├── .gitignore ├── FetchApi.js ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── public │ └── assets │ │ ├── arch.svg │ │ ├── centos.svg │ │ ├── debian.svg │ │ ├── deepin.svg │ │ ├── favicon.ico │ │ ├── flags │ │ ├── ad.svg │ │ ├── ae.svg │ │ ├── af.svg │ │ ├── ag.svg │ │ ├── ai.svg │ │ ├── al.svg │ │ ├── am.svg │ │ ├── ao.svg │ │ ├── aq.svg │ │ ├── ar.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 │ │ ├── cf.svg │ │ ├── cg.svg │ │ ├── ch.svg │ │ ├── ci.svg │ │ ├── ck.svg │ │ ├── cl.svg │ │ ├── cm.svg │ │ ├── cn.svg │ │ ├── co.svg │ │ ├── cr.svg │ │ ├── cu.svg │ │ ├── cv.svg │ │ ├── cw.svg │ │ ├── cx.svg │ │ ├── cy.svg │ │ ├── cz.svg │ │ ├── de.svg │ │ ├── dj.svg │ │ ├── dk.svg │ │ ├── dm.svg │ │ ├── do.svg │ │ ├── dz.svg │ │ ├── ec.svg │ │ ├── ee.svg │ │ ├── eg.svg │ │ ├── eh.svg │ │ ├── er.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 │ │ ├── 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 │ │ ├── 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.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 │ │ ├── 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 │ │ ├── ye.svg │ │ ├── yt.svg │ │ ├── za.svg │ │ ├── zm.svg │ │ └── zw.svg │ │ ├── logo.svg │ │ ├── openwrt.svg │ │ ├── slack_ico.png │ │ ├── ubuntu.svg │ │ └── unknown.svg ├── src │ ├── App.jsx │ ├── Components │ │ ├── AddHostBtn │ │ │ └── AddHostBtn.jsx │ │ ├── AddHostDlg │ │ │ ├── AddHostDlg.jsx │ │ │ └── PresentationButton.jsx │ │ ├── AgentConfigurator │ │ │ └── AgentConfigurator.jsx │ │ ├── Header │ │ │ ├── Header.jsx │ │ │ ├── Header.module.css │ │ │ ├── Settings.jsx │ │ │ └── ThemeButton.jsx │ │ ├── Home │ │ │ ├── Home.jsx │ │ │ └── Home.module.css │ │ ├── HttpMonitor │ │ │ └── HttpMonitor.jsx │ │ ├── HttpMonitoringTable │ │ │ ├── HostNotificationModal.jsx │ │ │ ├── HttpMonitoringTable.jsx │ │ │ ├── HttpTableRow.jsx │ │ │ ├── ModalAddLabel.jsx │ │ │ ├── ModalDelete.jsx │ │ │ ├── ModalRssFilters.jsx │ │ │ └── SSLinfo.jsx │ │ ├── Login │ │ │ └── Login.jsx │ │ ├── MonitoringTable │ │ │ ├── DonutChart.jsx │ │ │ ├── DonutChartInput.jsx │ │ │ ├── DonutChartModal.jsx │ │ │ ├── DonutChartTable.jsx │ │ │ ├── MonitoringModal │ │ │ │ ├── MonitoringModal.jsx │ │ │ │ └── NotificationModal.jsx │ │ │ ├── MonitoringRow.jsx │ │ │ ├── MonitoringTable.jsx │ │ │ └── RestartTime.jsx │ │ ├── OutsideAlert │ │ │ └── OutsideAlert.jsx │ │ ├── Plugin │ │ │ └── Plugin.jsx │ │ ├── Plugins │ │ │ └── Plugins.jsx │ │ ├── Settings │ │ │ ├── InputExplanation.jsx │ │ │ └── Settings.jsx │ │ ├── ToggleButton │ │ │ └── ToggleButton.jsx │ │ ├── Users │ │ │ └── Users.jsx │ │ └── Utils │ │ │ ├── Components │ │ │ └── Sceleton.jsx │ │ │ └── Hooks │ │ │ ├── getCookie.js │ │ │ └── useDebounce.js │ ├── assets │ │ ├── Close.svg │ │ ├── arch.svg │ │ ├── centos.svg │ │ ├── debian.svg │ │ ├── deepin.svg │ │ ├── favicon.ico │ │ ├── flags │ │ │ ├── ad.svg │ │ │ ├── ae.svg │ │ │ ├── af.svg │ │ │ ├── ag.svg │ │ │ ├── ai.svg │ │ │ ├── al.svg │ │ │ ├── am.svg │ │ │ ├── ao.svg │ │ │ ├── aq.svg │ │ │ ├── ar.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 │ │ │ ├── cf.svg │ │ │ ├── cg.svg │ │ │ ├── ch.svg │ │ │ ├── ci.svg │ │ │ ├── ck.svg │ │ │ ├── cl.svg │ │ │ ├── cm.svg │ │ │ ├── cn.svg │ │ │ ├── co.svg │ │ │ ├── cr.svg │ │ │ ├── cu.svg │ │ │ ├── cv.svg │ │ │ ├── cw.svg │ │ │ ├── cx.svg │ │ │ ├── cy.svg │ │ │ ├── cz.svg │ │ │ ├── de.svg │ │ │ ├── dj.svg │ │ │ ├── dk.svg │ │ │ ├── dm.svg │ │ │ ├── do.svg │ │ │ ├── dz.svg │ │ │ ├── ec.svg │ │ │ ├── ee.svg │ │ │ ├── eg.svg │ │ │ ├── eh.svg │ │ │ ├── er.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 │ │ │ ├── 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 │ │ │ ├── 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.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 │ │ │ ├── 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 │ │ │ ├── ye.svg │ │ │ ├── yt.svg │ │ │ ├── za.svg │ │ │ ├── zm.svg │ │ │ └── zw.svg │ │ ├── logo.svg │ │ ├── openwrt.svg │ │ ├── slack_ico.png │ │ ├── ubuntu.svg │ │ └── unknown.svg │ ├── index.css │ ├── main.jsx │ └── tailwind.config.js ├── tailwind.config.cjs └── vite.config.js ├── nodemon.json ├── package-lock.json ├── package.json └── src ├── api.js ├── apinext.js ├── database.js ├── env.js ├── helpers └── helpers.js ├── index.js ├── levelDB.js ├── middleware.js ├── pluginManager.js ├── plugins ├── email.js ├── email.src │ ├── email.src.js │ ├── package-lock.json │ ├── package.json │ └── webpack.config.js ├── gmail.js ├── gmail.src │ ├── gmail.src.js │ ├── package-lock.json │ ├── package.json │ └── webpack.config.js ├── slack.js └── telegram.js ├── rssParser.js └── utils.js /.gitignore: -------------------------------------------------------------------------------- 1 | hothost.json 2 | .hothost.json-tmp 3 | .idea/ -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | // { 5 | // "label": "Tilewind", 6 | // "type": "shell", 7 | // "command": "cd server && npm run watch-tailwindcss", 8 | // "presentation": { 9 | // "reveal": "always", 10 | // "panel": "new", 11 | // "group": "develop", 12 | // }, 13 | // "runOptions": { "runOn": "folderOpen" } 14 | // }, 15 | { 16 | "label": "Server", 17 | "type": "shell", 18 | "command": "cd server ; npx kill-port 8007 ; npm run start", 19 | "presentation": { 20 | "reveal": "always", 21 | "panel": "new", 22 | "group": "develop", 23 | }, 24 | "runOptions": { "runOn": "folderOpen" } 25 | }, 26 | { 27 | "label": "Frontend", 28 | "type": "shell", 29 | "command": "cd server/frontend ; npx kill-port 5173 ; xdg-open http://localhost:5173/ ; npm run dev ; ", 30 | "presentation": { 31 | "reveal": "always", 32 | "panel": "new", 33 | "group": "develop", 34 | }, 35 | "runOptions": { "runOn": "folderOpen" } 36 | } 37 | 38 | 39 | 40 | ] 41 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Devforth.io 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /hothost-agent/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu as psbuilder 2 | RUN apt-get update -y && apt-get -y install build-essential gettext autoconf pkg-config \ 3 | gcc make git autopoint libtool libtool-bin 4 | RUN git clone https://gitlab.com/procps-ng/procps.git 5 | WORKDIR /procps 6 | RUN git checkout v3.3.17 && find . \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's|"/proc|"/host/proc|g' &&\ 7 | find . \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's|void look_up_our_self(proc_t \*p) {|void look_up_our_self(proc_t *p) {return 1; }; int a12(proc_t *p) { |g' &&\ 8 | ./autogen.sh &&\ 9 | LDFLAGS=-static ./configure --without-ncurses 10 | 11 | RUN make 12 | 13 | FROM ubuntu 14 | COPY --from=psbuilder /procps/ps/pscommand /pscommand 15 | 16 | RUN apt-get update -y && apt-get -y install curl && apt-get -y install moreutils 17 | ADD getinfo.sh . 18 | 19 | # run getinfo.sh with nice 19 20 | CMD ["nice", "-n", "15", "bash", "./getinfo.sh"] 21 | -------------------------------------------------------------------------------- /hothost-agent/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | version=1.0.3 3 | docker build . -t devforth/hothost-agent:$version 4 | docker push devforth/hothost-agent:$version 5 | 6 | docker build . -t devforth/hothost-agent 7 | docker push devforth/hothost-agent -------------------------------------------------------------------------------- /hothost-agent/debug.sh: -------------------------------------------------------------------------------- 1 | docker run -it \ 2 | --env HOTHOST_SERVER_BASE=http://127.0.0.1:8007 \ 3 | --env HOTHOST_AGENT_SECRET=123 \ 4 | -v /proc:/host/proc:ro \ 5 | -v /sys:/host/sys:ro \ 6 | -v /etc/os-release:/host/etc/os-release:ro \ 7 | -v /etc/hostname:/host/etc/hostname:ro \ 8 | --restart unless-stopped \ 9 | --cap-add SYS_PTRACE \ 10 | --security-opt apparmor=unconfined \ 11 | --security-opt seccomp=unconfined \ 12 | $(docker build -q .) bash getinfo.sh 13 | 14 | -------------------------------------------------------------------------------- /server/.dockerignore: -------------------------------------------------------------------------------- 1 | dev.db 2 | node_modules/ 3 | frontend/node_modules/ 4 | data/* 5 | frontend/dist -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | data/ 3 | -------------------------------------------------------------------------------- /server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16-alpine as builder 2 | WORKDIR /code/ 3 | ADD frontend/package-lock.json . 4 | ADD frontend/package.json . 5 | RUN npm ci 6 | ADD frontend . 7 | RUN npm run build 8 | 9 | FROM node:18-alpine 10 | WORKDIR /code/ 11 | ADD package.json . 12 | ADD package-lock.json . 13 | RUN npm ci 14 | 15 | ADD . . 16 | COPY --from=builder /code/dist/ frontend/dist/ 17 | 18 | CMD ["node", "src/index.js" ] 19 | ENTRYPOINT [] -------------------------------------------------------------------------------- /server/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | version=1.2.37 3 | docker build . -t devforth/hothost-web:$version 4 | docker push devforth/hothost-web:$version 5 | 6 | docker build . -t devforth/hothost-web 7 | docker push devforth/hothost-web -------------------------------------------------------------------------------- /server/debug.sh: -------------------------------------------------------------------------------- 1 | 2 | docker rm -f hothost-web-debug 3 | docker run -d --name=hothost-web-debug \ 4 | -v ~/hothostdata:/var/lib/hothost/data/ \ 5 | --env HOTHOST_WEB_ADMIN_USERNAME=admin \ 6 | --env HOTHOST_WEB_ADMIN_PASSWORD=123456 \ 7 | --restart=always \ 8 | --env HOTHOST_WEB_PORT=8009 \ 9 | -p 8009:8009 \ 10 | $(docker build -q .) 11 | 12 | xdg-open http://dockerized-hothost.localhost:8009 13 | -------------------------------------------------------------------------------- /server/frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /server/frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HotHost 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "choices.js": "^10.2.0", 13 | "flowbite": "^1.5.3", 14 | "flowbite-react": "^0.1.11", 15 | "react": "^18.2.0", 16 | "react-detect-click-outside": "^1.1.7", 17 | "react-dom": "^18.2.0", 18 | "react-donut-chart": "^1.3.3", 19 | "react-loading-skeleton": "^3.1.0", 20 | "react-query": "^3.39.2", 21 | "react-router-dom": "^6.4.2", 22 | "validator": "^13.7.0" 23 | }, 24 | "devDependencies": { 25 | "@tailwindcss/forms": "^0.5.3", 26 | "@tailwindcss/typography": "^0.5.7", 27 | "@types/react": "^18.0.17", 28 | "@types/react-dom": "^18.0.6", 29 | "@vitejs/plugin-react": "^2.1.0", 30 | "autoprefixer": "^10.4.12", 31 | "postcss": "^8.4.17", 32 | "tailwindcss": "^3.1.8", 33 | "vite": "^3.1.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /server/frontend/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/arch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devforth/hothost/200d5c7abaebc188f3289ad2d3466265b15584d2/server/frontend/public/assets/favicon.ico -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ae.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/am.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/at.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/au.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/aw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ax.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/az.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ba.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bb.svg: -------------------------------------------------------------------------------- 1 | 2 | Flag of Barbados 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/be.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bj.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bq.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/by.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ca.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ci.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ck.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/co.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/cz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/de.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/dj.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/dk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/dz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ee.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/eh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/et.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/eu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/fm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/fo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/fr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gb-nir.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gb-sct.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ge.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gm.svg: -------------------------------------------------------------------------------- 1 | 2 | Flag of The Gambia 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/gy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/hk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/hm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/hn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/hu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ie.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/il.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/is.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/it.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/jm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/jo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/jp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ke.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/km.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/kn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/kp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/kr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/kw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/la.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/lc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/lr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/lt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/lu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/lv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ma.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mq.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/mw.svg: -------------------------------------------------------------------------------- 1 | 2 | Flag of Malawi 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/my.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/na.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/nc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/nl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/no.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/nr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/nu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/pa.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ph.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/pk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/pl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/pm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/pr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ps.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/pw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/qa.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/re.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ro.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ru.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/rw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/se.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sj.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/so.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ss.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/st.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/sy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/td.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/th.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/to.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/tz.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ua.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/um.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/us.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/uz.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/vc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ve.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/vn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/wf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ws.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/ye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/yt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/flags/za.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/public/assets/slack_ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devforth/hothost/200d5c7abaebc188f3289ad2d3466265b15584d2/server/frontend/public/assets/slack_ico.png -------------------------------------------------------------------------------- /server/frontend/public/assets/ubuntu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/Components/AddHostBtn/AddHostBtn.jsx: -------------------------------------------------------------------------------- 1 | 2 | const AddHostBtn = (props) => { 3 | const { handleAdd } = props 4 | return ( 5 | 29 | ) 30 | } 31 | 32 | export default AddHostBtn -------------------------------------------------------------------------------- /server/frontend/src/Components/AddHostDlg/PresentationButton.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const PresintationButton = ({ name, active, setState, id }) => { 4 | return ( 5 | 19 | ); 20 | }; 21 | 22 | export default PresintationButton; 23 | -------------------------------------------------------------------------------- /server/frontend/src/Components/Header/Header.module.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devforth/hothost/200d5c7abaebc188f3289ad2d3466265b15584d2/server/frontend/src/Components/Header/Header.module.css -------------------------------------------------------------------------------- /server/frontend/src/Components/Home/Home.module.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devforth/hothost/200d5c7abaebc188f3289ad2d3466265b15584d2/server/frontend/src/Components/Home/Home.module.css -------------------------------------------------------------------------------- /server/frontend/src/Components/OutsideAlert/OutsideAlert.jsx: -------------------------------------------------------------------------------- 1 | import React, { useRef, useEffect } from "react"; 2 | 3 | /** 4 | * Hook that alerts clicks outside of the passed ref 5 | */ 6 | function useOutsideHider(ref, state, setstate) { 7 | useEffect(() => { 8 | 9 | /** 10 | * 11 | * Alert if clicked on outside of element 12 | */ 13 | function handleClickOutside(event) { 14 | if (ref.current && !ref.current.contains(event.target) && state) { 15 | setstate(!state); 16 | } 17 | } 18 | // Bind the event listener 19 | document.addEventListener("mousedown", handleClickOutside); 20 | return () => { 21 | // Unbind the event listener on clean up 22 | document.removeEventListener("mousedown", handleClickOutside); 23 | }; 24 | }, [ref, state]); 25 | } 26 | 27 | /** 28 | * Component that alerts if you click outside of it 29 | */ 30 | export default function OutsideHider(props) { 31 | const wrapperRef = useRef(null); 32 | useOutsideHider(wrapperRef, props.state, props.setstate); 33 | 34 | return
{props.children}
; 35 | } 36 | -------------------------------------------------------------------------------- /server/frontend/src/Components/Settings/InputExplanation.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const InputExplanation = ({ text }) => { 4 | return text.map((t) => { 5 | return

{t}

; 6 | }); 7 | }; 8 | 9 | export default InputExplanation; 10 | -------------------------------------------------------------------------------- /server/frontend/src/Components/Utils/Hooks/getCookie.js: -------------------------------------------------------------------------------- 1 | export const getCookie = (cookieName) => { 2 | const cookies = document.cookie.split("; "); 3 | for (const cookie of cookies) { 4 | const [name, value] = cookie.split("="); 5 | if (name === cookieName) { 6 | return decodeURIComponent(value); 7 | } 8 | } 9 | return undefined; 10 | } -------------------------------------------------------------------------------- /server/frontend/src/Components/Utils/Hooks/useDebounce.js: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | function useDebounce(value, delay) { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const timer = setTimeout(() => setDebouncedValue(value), delay || 500); 8 | 9 | return () => { 10 | clearTimeout(timer); 11 | }; 12 | }, [value, delay]); 13 | 14 | return debouncedValue; 15 | } 16 | 17 | export default useDebounce; 18 | -------------------------------------------------------------------------------- /server/frontend/src/assets/Close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /server/frontend/src/assets/arch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devforth/hothost/200d5c7abaebc188f3289ad2d3466265b15584d2/server/frontend/src/assets/favicon.ico -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ae.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/am.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/at.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/au.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/aw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ax.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/az.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ba.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bb.svg: -------------------------------------------------------------------------------- 1 | 2 | Flag of Barbados 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/be.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bj.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bq.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/by.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ca.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ci.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ck.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/co.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/cz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/de.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/dj.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/dk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/dz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ee.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/eh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/et.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/eu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/fm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/fo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/fr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gb-nir.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gb-sct.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ge.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gm.svg: -------------------------------------------------------------------------------- 1 | 2 | Flag of The Gambia 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/gy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/hk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/hm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/hn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/hu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ie.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/il.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/is.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/it.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/jm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/jo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/jp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ke.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/km.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/kn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/kp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/kr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/kw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/la.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/lc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/lr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/lt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/lu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/lv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ma.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mq.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/mw.svg: -------------------------------------------------------------------------------- 1 | 2 | Flag of Malawi 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/my.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/na.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/nc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/nl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/no.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/nr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/nu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/pa.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ph.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/pk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/pl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/pm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/pr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ps.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/pw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/qa.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/re.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ro.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ru.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/rw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/se.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sj.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/so.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ss.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/st.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/sy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/td.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/th.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/to.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/tz.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ua.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/um.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/us.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/uz.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/vc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ve.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/vn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/wf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ws.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/ye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/yt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/flags/za.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/frontend/src/assets/slack_ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devforth/hothost/200d5c7abaebc188f3289ad2d3466265b15584d2/server/frontend/src/assets/slack_ico.png -------------------------------------------------------------------------------- /server/frontend/src/assets/ubuntu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/frontend/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import { BrowserRouter } from "react-router-dom"; 4 | import App from "./App"; 5 | import "./index.css"; 6 | 7 | 8 | import "flowbite/dist/flowbite.min.css"; 9 | ReactDOM.createRoot(document.getElementById("root")).render( 10 | 11 | 12 | 13 | 14 | 15 | ); 16 | -------------------------------------------------------------------------------- /server/frontend/src/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 3 | content: ["./**/*.{html,js}"], 4 | theme: { 5 | extend: {}, 6 | screens: { 7 | 'mobile': {'max': '640px'}, 8 | }, 9 | }, 10 | darkMode: 'class', 11 | plugins: [ 12 | require('@tailwindcss/forms'), 13 | require('flowbite/plugin'), 14 | require('@tailwindcss/typography'), 15 | ], 16 | } -------------------------------------------------------------------------------- /server/frontend/tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | const plugin = require("tailwindcss/plugin"); 2 | 3 | module.exports = { 4 | content: [ 5 | "./index.html", 6 | "./src/**/*.{js,ts,jsx,tsx}", 7 | "node_modules/flowbite-react/**/*.{js,jsx,ts,tsx}", 8 | ], 9 | theme: { 10 | extend: {}, 11 | screens: { 12 | mobile: { max: "640px" }, 13 | }, 14 | }, 15 | darkMode: "class", 16 | plugins: [ 17 | require("@tailwindcss/forms"), 18 | require("flowbite/plugin"), 19 | require("@tailwindcss/typography"), 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /server/frontend/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()] 7 | }) 8 | -------------------------------------------------------------------------------- /server/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "events": { 3 | "crash": "sh -c 'lsof -i :${PORT:-8007} -t | xargs kill'" 4 | } 5 | } -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hothost-server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/index.js", 6 | "type": "module", 7 | "scripts": { 8 | "start": "cross-env ENV=local nodemon --ignore data/ src/index.js", 9 | "watch-tailwindcss": "cd html && npm run watch-tailwindcss", 10 | "test": " cross-env ENV=local nodemon --ignore data/ --inspect src/index.js" 11 | }, 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "cookie-parser": "^1.4.6", 16 | "cors": "^2.8.5", 17 | "express": "^4.18.1", 18 | "express-formidable": "^1.2.0", 19 | "express-handlebars": "^6.0.5", 20 | "html-to-text": "^9.0.3", 21 | "https": "^1.0.0", 22 | "humanize-duration": "^3.27.1", 23 | "jsonwebtoken": "^8.5.1", 24 | "level": "^8.0.0", 25 | "lowdb": "^3.0.0", 26 | "markdown-it": "^13.0.1", 27 | "md5": "^2.3.0", 28 | "rss-parser": "^3.12.0", 29 | "ssl-checker": "^2.0.7", 30 | "uuid": "^8.3.2" 31 | }, 32 | "devDependencies": { 33 | "cross-env": "^7.0.3", 34 | "nodemon": "^2.0.20" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /server/src/database.js: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import { JSONFile, Low } from 'lowdb'; 3 | 4 | import env from './env.js'; 5 | 6 | const filePath = path.join(env.DATA_PATH, 'hothost.json'); 7 | const adapter = new JSONFile(filePath); 8 | const db = new Low(adapter); 9 | 10 | const _read = db.read.bind(db); 11 | 12 | db.read = async function () { 13 | await _read(); 14 | if (!db.data) { 15 | db.data = {}; 16 | } 17 | 18 | db.data.users ||= []; 19 | db.data.monitoringData ||= []; 20 | db.data.httpMonitoringData ||= []; 21 | db.data.settings ||= { 22 | RAM_THRESHOLD: 90, 23 | RAM_STABILIZATION_LEVEL: 3, 24 | DISK_THRESHOLD: 90, 25 | DISK_STABILIZATION_LEVEL: 1, 26 | HOST_IS_DOWN_CONFIRMATIONS: 1, 27 | HTTP_ISSUE_CONFIRMATION: 1, 28 | DAYS_FOR_SSL_EXPIRED: 14, 29 | HOURS_FOR_NEXT_ALERT: 12, 30 | 31 | 32 | }; 33 | db.data.pluginSettings ||= []; 34 | }; 35 | 36 | export default db; -------------------------------------------------------------------------------- /server/src/helpers/helpers.js: -------------------------------------------------------------------------------- 1 | import humanizeDuration from "humanize-duration"; 2 | import { 3 | calculateAsyncEvents, 4 | DATE_HUMANIZER_CONFIG, 5 | // startScheduler, 6 | // dbClearScheduler, 7 | } from "../utils.js"; 8 | import env from "../env.js"; 9 | 10 | const helpers = { 11 | or(a, b) { 12 | return a || b; 13 | }, 14 | not(a) { 15 | return !a; 16 | }, 17 | and(a, b) { 18 | return a && b; 19 | }, 20 | eq(a, b) { 21 | return a?.toString() === b?.toString(); 22 | }, 23 | isNotAdmin(a) { 24 | return a.toString() !== env.WEB_ADMIN_USERNAME.toString(); 25 | }, 26 | getFlag(country) { 27 | return !country ? null : `${country.toLowerCase()}.svg`; 28 | }, 29 | getCountryName(country) { 30 | if (!country) { 31 | return null; 32 | } 33 | const regionNames = new Intl.DisplayNames(["en"], { type: "region" }); 34 | return regionNames.of(country); 35 | }, 36 | getDuration(eventLastTs) { 37 | const now = new Date().getTime(); 38 | 39 | const duration = now - eventLastTs; 40 | return humanizeDuration(duration, DATE_HUMANIZER_CONFIG); 41 | }, 42 | json: function (obj) { 43 | return JSON.stringify(obj); 44 | }, 45 | }; 46 | 47 | export const { getDuration, getFlag, getCountryName, isNotAdmin } = helpers; 48 | -------------------------------------------------------------------------------- /server/src/levelDB.js: -------------------------------------------------------------------------------- 1 | import { Level } from 'level'; 2 | import path from 'path'; 3 | import env from './env.js'; 4 | 5 | const filePath = path.join(env.DATA_PATH, 'process'); 6 | 7 | const database = new Level(filePath, { valueEncoding: 'json' }); 8 | 9 | export default database; -------------------------------------------------------------------------------- /server/src/middleware.js: -------------------------------------------------------------------------------- 1 | import jwt from "jsonwebtoken"; 2 | import env from "./env.js"; 3 | 4 | export const authMiddleware = (req, res, next) => { 5 | const jwtToken = req.cookies["__hhjwt"]; 6 | try { 7 | req.user = jwt.decode(jwtToken, env.WEB_JWT_SECRET); 8 | } catch (e) { 9 | req.user = null; 10 | 11 | } 12 | 13 | res.locals.authorized = !!req.user; 14 | if (env.ENV === "local") res.locals.local = true; 15 | next(); 16 | }; 17 | -------------------------------------------------------------------------------- /server/src/plugins/email.src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmail", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src.js", 6 | "type": "module", 7 | "scripts": { 8 | "build": "webpack --mode production", 9 | "watch": "webpack --mode production --watch" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "nodemailer": "^6.7.5", 15 | "webpack": "^5.72.0" 16 | }, 17 | "devDependencies": { 18 | "webpack-cli": "^4.9.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /server/src/plugins/email.src/webpack.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | entry: './email.src.js', 3 | target: 'node16', 4 | output: { 5 | filename: '../../email.js', 6 | chunkFormat: 'module', // for ESM 7 | libraryTarget: 'module', 8 | module: true, 9 | }, 10 | experiments: { 11 | outputModule: true, 12 | }, 13 | }; -------------------------------------------------------------------------------- /server/src/plugins/gmail.src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmail", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src.js", 6 | "type": "module", 7 | "scripts": { 8 | "build": "webpack --mode production", 9 | "watch": "webpack --mode production --watch" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "nodemailer": "^6.7.5", 15 | "webpack": "^5.72.0" 16 | }, 17 | "devDependencies": { 18 | "webpack-cli": "^4.9.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /server/src/plugins/gmail.src/webpack.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | entry: './gmail.src.js', 3 | target: 'node16', 4 | output: { 5 | filename: '../../gmail.js', 6 | chunkFormat: 'module', // for ESM 7 | libraryTarget: 'module', 8 | module: true, 9 | }, 10 | experiments: { 11 | outputModule: true, 12 | }, 13 | }; --------------------------------------------------------------------------------