This commit is contained in:
Ross Trottier 2024-06-25 15:28:39 -06:00
parent d1bd9c37b6
commit e4304ec3f7
25 changed files with 141 additions and 30 deletions

View File

@ -24,21 +24,27 @@ func getStarterLinks(baseUri string) []AppLink {
{ {
Title: "User Management", Title: "User Management",
Description: "Create users and manage their access", Description: "Create users and manage their access",
Image: "/img/panel.jpg", Image: "/static/img/users.png",
Url: "https://panel." + baseUri, Url: "https://panel." + baseUri,
}, },
{ {
Title: "Nextcloud", Title: "Nextcloud",
Description: "Email, Files, Documents", Description: "Email, Files, Documents",
Image: "/img/nextcloud.jpg", Image: "/static/img/nextcloud.png",
Url: "https://nextcloud." + baseUri, Url: "https://nextcloud." + baseUri,
}, },
{ {
Title: "Vaultwarden", Title: "Vaultwarden",
Description: "Password Management", Description: "Password Management",
Image: "/img/vaultwarden.jpg", Image: "/static/img/vaultwarden.png",
Url: "https://vaultwarden." + baseUri, Url: "https://vaultwarden." + baseUri,
}, },
{
Title: "Power DNS",
Description: "DNS Management",
Image: "/static/img/powerdns.png",
Url: "https://powerdns." + baseUri,
},
} }
} }
@ -47,13 +53,13 @@ func getCreatorLinks(baseUri string) []AppLink {
{ {
Title: "Element and Matrix", Title: "Element and Matrix",
Description: "Team Chat", Description: "Team Chat",
Image: "/img/element.jpg", Image: "/static/img/element.png",
Url: "https://element." + baseUri, Url: "https://element." + baseUri,
}, },
{ {
Title: "Wordpress", Title: "Wordpress",
Description: "Your website", Description: "Your website",
Image: "/img/wordpress.jpg", Image: "/static/img/wordpress.png",
Url: "https://" + baseUri, Url: "https://" + baseUri,
}, },
} }
@ -66,13 +72,13 @@ func getTeamsLinks(baseUri string) []AppLink {
{ {
Title: "Espo CRM", Title: "Espo CRM",
Description: "Customer relationship manager", Description: "Customer relationship manager",
Image: "/img/espo.jpg", Image: "/static/img/espo.png",
Url: "https://espocrm." + baseUri, Url: "https://espocrm." + baseUri,
}, },
{ {
Title: "FreeScout", Title: "FreeScout",
Description: "Customer Help Desk", Description: "Customer Help Desk",
Image: "/img/freescout.jpg", Image: "/static/img/freescout.png",
Url: "https://freescout." + baseUri, Url: "https://freescout." + baseUri,
}, },
} }
@ -85,37 +91,37 @@ func getEnterpriseLinks(baseUri string) []AppLink {
{ {
Title: "Jitsi", Title: "Jitsi",
Description: "Video Chat", Description: "Video Chat",
Image: "/img/jitsi.jpg", Image: "/static/img/jitsi.png",
Url: "https://jitsi." + baseUri, Url: "https://jitsi." + baseUri,
}, },
{ {
Title: "Listmonk", Title: "Listmonk",
Description: "Email Marketing", Description: "Email Marketing",
Image: "/img/listmonk.jpg", Image: "/static/img/listmonk.png",
Url: "https://listmonk." + baseUri, Url: "https://listmonk." + baseUri,
}, },
{ {
Title: "Baserow", Title: "Baserow",
Description: "Visual Databases", Description: "Visual Databases",
Image: "/img/baserow.jpg", Image: "/static/img/baserow.png",
Url: "https://baserow." + baseUri, Url: "https://baserow." + baseUri,
}, },
{ {
Title: "Bookstack", Title: "Bookstack",
Description: "Wiki Knowledgebase", Description: "Wiki Knowledgebase",
Image: "/img/bookstack.jpg", Image: "/static/img/bookstack.png",
Url: "https://bookstack." + baseUri, Url: "https://bookstack." + baseUri,
}, },
{ {
Title: "Gitea", Title: "Gitea",
Description: "GIT Source Control", Description: "GIT Source Control",
Image: "/img/gitea.jpg", Image: "/static/img/gitea.png",
Url: "https://gitea." + baseUri, Url: "https://gitea." + baseUri,
}, },
{ {
Title: "Castopod", Title: "Castopod",
Description: "Podcast Distribution", Description: "Podcast Distribution",
Image: "/img/castopod.jpg", Image: "/static/img/castopod.png",
Url: "https://castopod." + baseUri, Url: "https://castopod." + baseUri,
}, },
} }

View File

@ -22,4 +22,12 @@ func (app *application) home(writer http.ResponseWriter, request *http.Request)
} }
app.render(writer, request, http.StatusOK, "home.tmpl.html", data) app.render(writer, request, http.StatusOK, "home.tmpl.html", data)
}
func (app *application) notFound(writer http.ResponseWriter, request *http.Request) {
app.render(writer, request, http.StatusNotFound, "404.tmpl.html", templateData{})
}
func (app *application) vpn(writer http.ResponseWriter, request *http.Request) {
app.render(writer, request, http.StatusOK, "vpn.tmpl.html", templateData{})
} }

View File

@ -8,6 +8,11 @@ import (
"flag" "flag"
) )
//TODO Get images for each app
//TODO Stylesheet
//TODO VPN Page
//TODO Auth through LDAP for VPN page
type application struct { type application struct {
logger *slog.Logger logger *slog.Logger
templateCache map[string]*template.Template templateCache map[string]*template.Template

View File

@ -9,6 +9,8 @@ func (app *application) routes() *http.ServeMux {
mux.Handle("GET /static/", http.StripPrefix("/static", fileServer)) mux.Handle("GET /static/", http.StripPrefix("/static", fileServer))
//Set up routes //Set up routes
mux.HandleFunc("GET /{$}", app.home) mux.HandleFunc("GET /{$}", app.home)
mux.HandleFunc("GET /", app.notFound)
mux.HandleFunc("GET /vpn/{$}", app.vpn)
return mux return mux
} }

View File

@ -5,17 +5,20 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Federated Core Dashboard</title> <title>Federated Core Dashboard</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/static/css/styles.css" /> <link rel="stylesheet" href="/static/css/styles.css" />
</head> </head>
<body> <body>
<header> <header class="header main-grid">
<h1>Federated Computer</h1> <h1 class="header__title">Federated Core</h1>
</header> </header>
{{template "nav" .}} {{template "nav" .}}
<main> <main class="main main-grid">
{{template "main" .}} {{template "main" .}}
</main> </main>
<footer> <footer class="footer main-grid">
Powered by Federated Computer Powered by Federated Computer
</footer> </footer>
</body> </body>

View File

@ -0,0 +1,5 @@
{{define "title"}}Page Not Found{{end}}
{{define "main"}}
<h2 class="four-oh-four-title">Page Not Found</h2>
{{end}}

View File

@ -5,15 +5,16 @@
<h2 class="app-links-title">Apps for {{.BaseUri}} on the {{.Tier}} tier.</h2> <h2 class="app-links-title">Apps for {{.BaseUri}} on the {{.Tier}} tier.</h2>
<div class="app-links-container"> <div class="app-links-container">
<!-- LOOP HERE --> <!-- LOOP HERE -->
{{range .AppLinks}} {{range .AppLinks}}
<a href="{{.Url}}" class="app-link-card-link"> <a href="{{.Url}}" class="app-link-card-link">
<div class="app-link-card"> <div class="app-link-card">
<h3 class="app-link-card__title">{{.Title}}</h3> <img src="{{.Image}}" alt="" class="app-link-card__image">
<p class="app-link-card__description">{{.Description}}</p> <h3 class="app-link-card__title">{{.Title}}</h3>
<img src="{{.Image}}" alt="" class="app-link-card__image"> <p class="app-link-card__description">{{.Description}}</p>
</div> </div>
</a> </a>
{{end}} {{end}}
</div> </div>
<p>All Logos are Property of Their Respective Project</p>
</section> </section>
{{end}} {{end}}

View File

@ -0,0 +1,5 @@
{{define "title"}}Page Not Found{{end}}
{{define "main"}}
<h2>VPN Info</h2>
{{end}}

View File

@ -1,7 +1,8 @@
{{define "nav"}} {{define "nav"}}
<nav class="nav"> <nav class="nav">
<a href="/" class="nav-link">Home</a> <ul class="nav-list">
<a href="/" class="nav-link">Login</a> <li class="nav-link"><a href="/">Apps</a></li>
<a href="/" class="nav-link">VPN</a> <li class="nav-link"><a href="/vpn">VPN Info</a></li>
</ul>
</nav> </nav>
{{end}} {{end}}

View File

@ -0,0 +1,75 @@
/*
1. Use a more-intuitive box-sizing model.
*/
*, *::before, *::after {
box-sizing: border-box;
}
/*
2. Remove default margin
*/
* {
margin: 0;
font-family: "Open Sans", sans-serif;
}
/*
Typographic tweaks!
3. Add accessible line-height
4. Improve text rendering
*/
body {
line-height: 1.6;
font-size: 1.25rem;
-webkit-font-smoothing: antialiased;
}
/*
5. Improve media defaults
*/
img, picture, video, canvas, svg {
display: block;
max-width: 100%;
}
/*
6. Remove built-in form typography styles
*/
input, button, textarea, select {
font: inherit;
}
/*
7. Avoid text overflows
*/
p, h1, h2, h3, h4, h5, h6 {
overflow-wrap: break-word;
}
/*
8. Create a root stacking context
*/
#root, #__next {
isolation: isolate;
}
/* TYPE */
h1 {
font-size: 3rem;
}
/* GRID */
.main-grid {
display: grid;
grid-template-columns: minmax(1em 1fr) minmax(1em 1fr) minmax(1em 1fr);
}
/* HEADER */
.header {
width: 100%;
text-align: center;
text-transform: uppercase;
}
/* Nav */
.nav {
}

BIN
ui/static/img/baserow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
ui/static/img/bookstack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
ui/static/img/castopod.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
ui/static/img/element.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
ui/static/img/espo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
ui/static/img/freescout.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
ui/static/img/gitea.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
ui/static/img/jitsi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
ui/static/img/listmonk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
ui/static/img/nextcloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
ui/static/img/powerdns.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
ui/static/img/users.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
ui/static/img/wireguard.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
ui/static/img/wordpress.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB