Add webserver (using gin) to socialdragon
This commit is contained in:
parent
8a88af39a2
commit
9f03313d60
0
socialdragon/assets/css/app.css
Normal file
0
socialdragon/assets/css/app.css
Normal file
4148
socialdragon/assets/css/foundation.css
vendored
Normal file
4148
socialdragon/assets/css/foundation.css
vendored
Normal file
File diff suppressed because it is too large
Load diff
2
socialdragon/assets/css/foundation.min.css
vendored
Normal file
2
socialdragon/assets/css/foundation.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
socialdragon/assets/img/bg.gif
Normal file
BIN
socialdragon/assets/img/bg.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 221 KiB |
1
socialdragon/assets/js/app.js
Normal file
1
socialdragon/assets/js/app.js
Normal file
|
@ -0,0 +1 @@
|
||||||
|
$(document).foundation()
|
|
@ -1,11 +1,15 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"golang.org/x/net/websocket"
|
||||||
|
|
||||||
"github.com/robfig/cron"
|
"github.com/robfig/cron"
|
||||||
|
"gopkg.in/gin-gonic/gin.v1"
|
||||||
|
|
||||||
"git.1750studios.com/AniNite/SocialDragon/config"
|
"git.1750studios.com/AniNite/SocialDragon/config"
|
||||||
"git.1750studios.com/AniNite/SocialDragon/database"
|
"git.1750studios.com/AniNite/SocialDragon/database"
|
||||||
|
@ -27,7 +31,31 @@ func main() {
|
||||||
|
|
||||||
ch := make(chan os.Signal)
|
ch := make(chan os.Signal)
|
||||||
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
go setupGin()
|
||||||
<-ch
|
<-ch
|
||||||
|
|
||||||
twitter.Stop()
|
twitter.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setupGin() {
|
||||||
|
router := gin.Default()
|
||||||
|
router.GET("/home", renderHomepage)
|
||||||
|
router.GET("/ws", websocketEndpoint)
|
||||||
|
router.LoadHTMLGlob("templates/*")
|
||||||
|
router.Static("/static", "assets")
|
||||||
|
router.Run("127.0.0.1:8000")
|
||||||
|
}
|
||||||
|
|
||||||
|
func renderHomepage(ctx *gin.Context) {
|
||||||
|
ctx.HTML(200, "index.html", gin.H{"title": "Main website"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func websocketEndpoint(ctx *gin.Context) {
|
||||||
|
handler := websocket.Handler(echoHandler)
|
||||||
|
handler.ServeHTTP(ctx.Writer, ctx.Request)
|
||||||
|
}
|
||||||
|
|
||||||
|
func echoHandler(ws *websocket.Conn) {
|
||||||
|
websocket.Message.Send(ws, "Test Message from Server")
|
||||||
|
io.Copy(ws, ws)
|
||||||
|
}
|
||||||
|
|
65
socialdragon/templates/admin.html
Normal file
65
socialdragon/templates/admin.html
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Snapchat Wall Admin</title>
|
||||||
|
<meta http-equiv="refresh" content="30">
|
||||||
|
<link rel="stylesheet" href="/static/css/foundation.css">
|
||||||
|
<link rel="stylesheet" href="/static/css/app.css">
|
||||||
|
<script>
|
||||||
|
function httpGetAsync(theUrl, callback) {
|
||||||
|
var xmlHttp = new XMLHttpRequest();
|
||||||
|
xmlHttp.onreadystatechange = function() {
|
||||||
|
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
|
||||||
|
callback(xmlHttp.responseText);
|
||||||
|
}
|
||||||
|
xmlHttp.open("GET", theUrl, true); // true for asynchronous
|
||||||
|
xmlHttp.send(null);
|
||||||
|
}
|
||||||
|
function approveSnap(myself) {
|
||||||
|
function cb(success) {
|
||||||
|
if (success == "True") {
|
||||||
|
myself.parentNode.removeChild(myself);
|
||||||
|
} else {
|
||||||
|
alert("Failed!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
url = myself.src;
|
||||||
|
filename = url.substring(url.lastIndexOf('/')+1);
|
||||||
|
if (confirm("Approve this snap?")) {
|
||||||
|
httpGetAsync("/admin/snap/approve?filename=" + filename, cb);
|
||||||
|
} else {
|
||||||
|
httpGetAsync("/admin/snap/reject?filename=" + filename, cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h1>Snapchat Wall · Admin</h1>
|
||||||
|
<ul class="menu">
|
||||||
|
<li class="active"><a>Inbox</a></li>
|
||||||
|
<li><a>Approved</a></li>
|
||||||
|
<li><a>Rejected</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<div class="callout">
|
||||||
|
<p>Click on snap to review:</p>
|
||||||
|
<img style="width: 30%; min-width: 15em;" onclick="approveSnap(this)" class="thumbnail" src="/snaps/inbox/IMAGE_HERE" alt="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="/static/js/vendor/jquery.js"></script>
|
||||||
|
<script src="/static/js/vendor/what-input.js"></script>
|
||||||
|
<script src="/static/js/vendor/foundation.js"></script>
|
||||||
|
<script src="/static/js/app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
129
socialdragon/templates/index.html
Executable file
129
socialdragon/templates/index.html
Executable file
|
@ -0,0 +1,129 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Snapchat Wall</title>
|
||||||
|
<style type="text/css">
|
||||||
|
@import 'https://fonts.googleapis.com/css?family=Roboto';
|
||||||
|
html, body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
font-family: Roboto, "Lucida Sans Unicode", "Lucida Grande", sans-serif;
|
||||||
|
color: #FFF;
|
||||||
|
text-transform: uppercase;
|
||||||
|
|
||||||
|
background: url('/static/img/bg.gif') 50% 0 no-repeat fixed;
|
||||||
|
-webkit-background-size: cover;
|
||||||
|
-moz-background-size: cover;
|
||||||
|
-o-background-size: cover;
|
||||||
|
background-size: cover;
|
||||||
|
|
||||||
|
}
|
||||||
|
#left {
|
||||||
|
/*min-width:40%;*/
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
#right {
|
||||||
|
float:right;
|
||||||
|
width:42%;
|
||||||
|
overflow:hidden;
|
||||||
|
height:600px;
|
||||||
|
margin-top:auto;
|
||||||
|
margin-bottom:auto;
|
||||||
|
padding-top:7%;
|
||||||
|
padding-right:4%;
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
#image {
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-top: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 60px;
|
||||||
|
}
|
||||||
|
#infotext {
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
#othertext {
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="left">
|
||||||
|
<div id="image">
|
||||||
|
<center>
|
||||||
|
<img style="max-height: 100%; background: green; display: inline-block; vertical-align: middle;" id="snapwall_image" src="/snaps/approved/IMAGE_HERE" alt="" />
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div><!--
|
||||||
|
<div id="right">
|
||||||
|
<div id="infos">
|
||||||
|
<center><h1>Social Wall</h1></center>
|
||||||
|
<br /><br />
|
||||||
|
<div id="infotext">
|
||||||
|
</div>
|
||||||
|
<div id="othertext">
|
||||||
|
Other text...<br />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>-->
|
||||||
|
<div style="clear:both"></div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var exampleSocket = new WebSocket("ws://127.0.0.1:8000/ws");
|
||||||
|
exampleSocket.onopen = function (event) {
|
||||||
|
console.log("WS: Connection open!");
|
||||||
|
console.log("Proto: " + exampleSocket.protocol);
|
||||||
|
exampleSocket.send("Here's some text that the server is urgently awaiting!");
|
||||||
|
};
|
||||||
|
exampleSocket.onmessage = function (event) {
|
||||||
|
console.log("WS Message:");
|
||||||
|
console.log(event.data);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*
|
||||||
|
var currentImage;
|
||||||
|
|
||||||
|
function HTTPGetRequest() {
|
||||||
|
if (!window.XMLHttpRequest) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
xmlhttp = new XMLHttpRequest();
|
||||||
|
xmlhttp.onreadystatechange = function() {
|
||||||
|
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
|
||||||
|
var parts = xmlhttp.responseText.split(" ");
|
||||||
|
if(parts[0] == "l") { // landscape pic
|
||||||
|
document.getElementById("image").style.marginTop = '-140px';
|
||||||
|
document.getElementById("left").style.paddingLeft = '1%';
|
||||||
|
document.getElementById("left").style.minWidth = '52%';
|
||||||
|
} else if(parts[0] == "p") { // portrait pic
|
||||||
|
document.getElementById("image").style.marginTop = '0px';
|
||||||
|
}
|
||||||
|
if(parts[1] != currentImage) { // if new image different from current image
|
||||||
|
document.getElementById("snapwall_image").src = parts[1];
|
||||||
|
currentImage = xmlhttp.responseText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xmlhttp.open("GET","image.txt",true);
|
||||||
|
xmlhttp.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(function() {
|
||||||
|
HTTPGetRequest();
|
||||||
|
}, 7000); // 7 seconds
|
||||||
|
*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue