Add web server that is not useful
This commit is contained in:
parent
cf5f2e6598
commit
deb12318b6
|
@ -34,6 +34,9 @@ spec:
|
|||
- image: imartyn/karaokardbot:0.0.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: kardbot
|
||||
ports:
|
||||
- name: web
|
||||
containerPort: 5353
|
||||
resources: {}
|
||||
terminationMessagePath: /dev/termination-log
|
||||
terminationMessagePolicy: File
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
package webserver
|
||||
|
||||
import (
|
||||
"github.com/gorilla/handlers"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/gorilla/sessions"
|
||||
|
||||
"fmt"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
//var store = sessions.NewCookieStore(os.Getenv("SESSION_KEY"))
|
||||
|
||||
var store = sessions.NewCookieStore([]byte("GO_SESS"))
|
||||
|
||||
func HealthHandler(response http.ResponseWriter, request *http.Request) {
|
||||
response.Header().Add("Content-type", "text/plain")
|
||||
fmt.Fprint(response, "I'm okay jack!")
|
||||
}
|
||||
|
||||
func NotFoundHandler(response http.ResponseWriter, request *http.Request) {
|
||||
response.Header().Add("X-Template-File", "html"+request.URL.Path)
|
||||
tmpl := template.Must(template.ParseFiles("web/404.html"))
|
||||
tmpl.Execute(response, nil)
|
||||
}
|
||||
|
||||
func CSSHandler(response http.ResponseWriter, request *http.Request) {
|
||||
response.Header().Add("Content-type", "text/css")
|
||||
tmpl := template.Must(template.ParseFiles("web/cover.css"))
|
||||
tmpl.Execute(response, nil)
|
||||
}
|
||||
|
||||
func RootHandler(response http.ResponseWriter, request *http.Request) {
|
||||
request.URL.Path = "/index.html"
|
||||
TemplateHandler(response, request)
|
||||
}
|
||||
|
||||
func TemplateHandler(response http.ResponseWriter, request *http.Request) {
|
||||
response.Header().Add("X-Template-File", "web"+request.URL.Path)
|
||||
type TemplateData struct {
|
||||
Prompt string
|
||||
AvailCount int
|
||||
}
|
||||
// tmpl, err := template.New("html"+request.URL.Path).Funcs(template.FuncMap{
|
||||
// "ToUpper": strings.ToUpper,
|
||||
// "ToLower": strings.ToLower,
|
||||
// }).ParseFiles("html"+request.URL.Path)
|
||||
_ = strings.ToLower("Hello")
|
||||
if strings.Index(request.URL.Path, "/") < 0 {
|
||||
http.Error(response, "No slashes wat - "+request.URL.Path, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
basenameSlice := strings.Split(request.URL.Path, "/")
|
||||
basename := basenameSlice[len(basenameSlice)-1]
|
||||
//fmt.Fprintf(response, "%q", basenameSlice)
|
||||
tmpl, err := template.New(basename).Funcs(template.FuncMap{
|
||||
"ToUpper": strings.ToUpper,
|
||||
"ToLower": strings.ToLower,
|
||||
}).ParseFiles("web" + request.URL.Path)
|
||||
if err != nil {
|
||||
http.Error(response, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
// NotFoundHandler(response, request)
|
||||
// return
|
||||
}
|
||||
var td = TemplateData{"Hello", 1}
|
||||
err = tmpl.Execute(response, td)
|
||||
if err != nil {
|
||||
http.Error(response, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func HandleHTTP() {
|
||||
r := mux.NewRouter()
|
||||
loggedRouter := handlers.LoggingHandler(os.Stdout, r)
|
||||
r.NotFoundHandler = http.HandlerFunc(NotFoundHandler)
|
||||
r.HandleFunc("/", RootHandler)
|
||||
r.HandleFunc("/healthz", HealthHandler)
|
||||
r.HandleFunc("/example/{.*}", TemplateHandler)
|
||||
r.HandleFunc("/cover.css", CSSHandler)
|
||||
http.Handle("/", r)
|
||||
srv := &http.Server{
|
||||
Handler: loggedRouter,
|
||||
Addr: "0.0.0.0:5353",
|
||||
WriteTimeout: 15 * time.Second,
|
||||
ReadTimeout: 15 * time.Second,
|
||||
}
|
||||
fmt.Println("Listening on 0.0.0.0:5353")
|
||||
srv.ListenAndServe()
|
||||
}
|
7
main.go
7
main.go
|
@ -11,6 +11,7 @@ import (
|
|||
|
||||
builtins "git.martyn.berlin/martyn/karaokards/internal/builtins"
|
||||
irc "git.martyn.berlin/martyn/karaokards/internal/irc"
|
||||
webserver "git.martyn.berlin/martyn/karaokards/internal/webserver"
|
||||
rgb "github.com/foresthoffman/rgblog"
|
||||
)
|
||||
|
||||
|
@ -26,8 +27,8 @@ func readBonusStrings() []string {
|
|||
|
||||
ex, err := os.Executable()
|
||||
if err != nil {
|
||||
return []string{}
|
||||
fmt.Println("Could not read `strings.json`, will only have builtin prompts. File reading error", err)
|
||||
return []string{}
|
||||
}
|
||||
exPath := filepath.Dir(ex)
|
||||
data, err := ioutil.ReadFile(exPath + "/strings.json")
|
||||
|
@ -83,5 +84,9 @@ func main() {
|
|||
Server: "irc.chat.twitch.tv",
|
||||
Prompts: selectablePrompts,
|
||||
}
|
||||
go func() {
|
||||
rgb.YPrintf("[%s] Starting webserver on port %s\n", irc.TimeStamp(), "5353")
|
||||
webserver.HandleHTTP()
|
||||
}()
|
||||
myBot.Start()
|
||||
}
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
<html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Templates files for the workshop">
|
||||
<meta name="author" content="Martyn Ranyard">
|
||||
<title>The k8s zoo</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="/cover.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
li.match-nomatch{
|
||||
background-color: #1e2122;
|
||||
}
|
||||
li.match-matchtrack{
|
||||
background-color: #E9B000;
|
||||
}
|
||||
li.match-fullmatch{
|
||||
background-color: #008F95;
|
||||
}
|
||||
li.match-matchtrackfuzzt{
|
||||
background-color: darkgray;
|
||||
}
|
||||
li.match-fullmatchfuzzy{
|
||||
background-color: darkgray;
|
||||
}
|
||||
a{
|
||||
text-decoration-line: underline;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body class="text-center">
|
||||
<div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
|
||||
<header class="masthead mb-auto">
|
||||
<div class="inner">
|
||||
<h3 class="masthead-brand">k8s-zoo</h3>
|
||||
<nav class="nav nav-masthead justify-content-center">
|
||||
<a class="nav-link active" href="/">Home</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main role="main" class="inner cover">
|
||||
<h1 class="cover-heading">Ooops!</h1>
|
||||
<p>It seems you've gone somewhere you shouldn't! 404 NOT FOUND!</p>
|
||||
<p/>
|
||||
<p>This can happen if you enter the spotify id wrong and search, go back and check it!</p>
|
||||
<p class="lead">Spotify IDs look like this : 37i9dQZF1DX4UtSsGT1Sbe - 22 characters and can be got by clicking share and "Copy (Playlist|Album) Link".</p>
|
||||
<p>Shameless self-promotion : Follow me on twitch - <a href="https://www.twitch.tv/iMartynOnTwitch">iMartynOnTwitch</a>, oddly enough, I do a lot of twitchsings!</p>
|
||||
</main>
|
||||
<footer class="mastfoot mt-auto">
|
||||
<div class="inner">
|
||||
<p>Cover template for <a href="https://getbootstrap.com/">Bootstrap</a>, by <a href="https://twitter.com/mdo">@mdo</a>.</p>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<script>
|
||||
function directToResults() {
|
||||
var url = document.createElement('a');
|
||||
url.setAttribute("href", window.location.href);
|
||||
if ((url.port != 80) && (url.port != 443)) {
|
||||
customPort = ":"+url.port
|
||||
} else {
|
||||
customPort = ""
|
||||
}
|
||||
var destination = url.protocol + "//" + url.hostname + customPort + "/" + document.getElementById("mode").value + "/" + document.getElementById("spotifyid").value
|
||||
window.location.href = destination
|
||||
}
|
||||
|
||||
function toggleUnfound() {
|
||||
var unmatched = document.getElementsByClassName('match-nomatch'), i;
|
||||
if (document.getElementById("showhidebutton").getAttribute("tracksHidden") != "true") {
|
||||
document.getElementById("showhidebutton").setAttribute("tracksHidden","true")
|
||||
for (i = 0; i < unmatched.length; i += 1) {
|
||||
unmatched[i].style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
document.getElementById("showhidebutton").setAttribute("tracksHidden","false")
|
||||
for (i = 0; i < unmatched.length; i += 1) {
|
||||
unmatched[i].style.display = 'list-item';
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Globals
|
||||
*/
|
||||
|
||||
/* Links */
|
||||
a,
|
||||
a:focus,
|
||||
a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Custom default button */
|
||||
.btn-secondary,
|
||||
.btn-secondary:hover,
|
||||
.btn-secondary:focus {
|
||||
color: #333;
|
||||
text-shadow: none; /* Prevent inheritance from body */
|
||||
background-color: #fff;
|
||||
border: .05rem solid #fff;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Base structure
|
||||
*/
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
body {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
color: #fff;
|
||||
text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
|
||||
box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5);
|
||||
}
|
||||
|
||||
.cover-container {
|
||||
max-width: 142em;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Header
|
||||
*/
|
||||
.masthead {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.masthead-brand {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.nav-masthead .nav-link {
|
||||
padding: .25rem 0;
|
||||
font-weight: 700;
|
||||
color: rgba(255, 255, 255, .5);
|
||||
background-color: transparent;
|
||||
border-bottom: .25rem solid transparent;
|
||||
}
|
||||
|
||||
.nav-masthead .nav-link:hover,
|
||||
.nav-masthead .nav-link:focus {
|
||||
border-bottom-color: rgba(255, 255, 255, .25);
|
||||
}
|
||||
|
||||
.nav-masthead .nav-link + .nav-link {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.nav-masthead .active {
|
||||
color: #fff;
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
|
||||
@media (min-width: 48em) {
|
||||
.masthead-brand {
|
||||
float: left;
|
||||
}
|
||||
.nav-masthead {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Cover
|
||||
*/
|
||||
.cover {
|
||||
padding: 0 1.5rem;
|
||||
}
|
||||
.cover .btn-lg {
|
||||
padding: .75rem 1.25rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Footer
|
||||
*/
|
||||
.mastfoot {
|
||||
color: rgba(255, 255, 255, .5);
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
<html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Karaokards bot for twitch chat">
|
||||
<meta name="author" content="Martyn Ranyard">
|
||||
<title>Karaokards</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="/cover.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
li.match-nomatch{
|
||||
background-color: #1e2122;
|
||||
}
|
||||
li.match-matchtrack{
|
||||
background-color: #E9B000;
|
||||
}
|
||||
li.match-fullmatch{
|
||||
background-color: #008F95;
|
||||
}
|
||||
li.match-matchtrackfuzzt{
|
||||
background-color: darkgray;
|
||||
}
|
||||
li.match-fullmatchfuzzy{
|
||||
background-color: darkgray;
|
||||
}
|
||||
a{
|
||||
text-decoration-line: underline;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body class="text-center">
|
||||
<div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
|
||||
<header class="masthead mb-auto">
|
||||
<div class="inner">
|
||||
<h3 class="masthead-brand">k8s-zoo</h3>
|
||||
<nav class="nav nav-masthead justify-content-center">
|
||||
<a class="nav-link active" href="/">Home</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main role="main" class="inner cover">
|
||||
<h1 class="cover-heading">Karaokards!!!</h1>
|
||||
<p>Random prompt for you : {{.Prompt}}</p>
|
||||
<p>There are a total of {{.AvailCount}} prompts available.</p>
|
||||
</main>
|
||||
<footer class="mastfoot mt-auto">
|
||||
<div class="inner">
|
||||
<p>Cover template for <a href="https://getbootstrap.com/">Bootstrap</a>, by <a href="https://twitter.com/mdo">@mdo</a>.</p>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<script>
|
||||
function releaseAnimal() {
|
||||
var url = document.createElement('a');
|
||||
url.setAttribute("href", window.location.href);
|
||||
if ((url.port != 80) && (url.port != 443)) {
|
||||
customPort = ":"+url.port
|
||||
} else {
|
||||
customPort = ""
|
||||
}
|
||||
var destination = url.protocol + "//" + url.hostname + customPort + "/release"
|
||||
window.location.href = destination
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue