Add YunoHost panel

This commit is contained in:
Kload 2013-10-23 09:21:05 +00:00
parent 098923c980
commit 418ae04571
4 changed files with 153 additions and 9 deletions

View file

@ -130,12 +130,7 @@ end
function set_headers (user) function set_headers (user)
user = user or ngx.var.cookie_SSOwAuthUser user = user or ngx.var.cookie_SSOwAuthUser
if not cache[user] then if not cache[user] or not cache[user]["mail"] then
flash("info", "Please log in to access to this content")
local back_url = ngx.var.scheme .. "://" .. ngx.var.http_host .. ngx.var.uri
return redirect(portal_url.."?r="..ngx.encode_base64(back_url))
end
if not cache[user]["mail"] then
ldap = lualdap.open_simple("localhost") ldap = lualdap.open_simple("localhost")
for dn, attribs in ldap:search { for dn, attribs in ldap:search {
base = "uid=".. user ..",ou=users,dc=yunohost,dc=org", base = "uid=".. user ..",ou=users,dc=yunohost,dc=org",
@ -199,7 +194,7 @@ function serve(uri)
-- Load login.html as index -- Load login.html as index
if rel_path == "/" then if rel_path == "/" then
if is_logged_in() then if is_logged_in() then
rel_path = "/info.html" rel_path = "/panel.ms"
else else
rel_path = "/login.html" rel_path = "/login.html"
end end
@ -222,6 +217,7 @@ function serve(uri)
-- Associate to MIME type -- Associate to MIME type
mime_types = { mime_types = {
html = "text/html", html = "text/html",
ms = "text/html",
js = "text/javascript", js = "text/javascript",
map = "text/javascript", map = "text/javascript",
css = "text/css", css = "text/css",
@ -245,6 +241,8 @@ function serve(uri)
local rendered = hige.render(read_file(script_path.."portal/header.ms"), data) local rendered = hige.render(read_file(script_path.."portal/header.ms"), data)
rendered = rendered..hige.render(content, data) rendered = rendered..hige.render(content, data)
content = rendered..hige.render(read_file(script_path.."portal/footer.ms"), data) content = rendered..hige.render(read_file(script_path.."portal/footer.ms"), data)
elseif ext == "ms" then
content = hige.render(content, {})
end end
-- Reset flash messages -- Reset flash messages
@ -510,6 +508,7 @@ function logout_walkthrough (user)
end end
end end
function redirect (url) function redirect (url)
ngx.header["Set-Cookie"] = cookies ngx.header["Set-Cookie"] = cookies
return ngx.redirect(url) return ngx.redirect(url)

View file

@ -0,0 +1,41 @@
html, body {
margin: 0;
padding: 0;
height: 100%;
}
iframe {
position: absolute;
top: 0; bottom: 0; left: 0; width: 100%; height: 100%;
border: none;
box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;
}
#ynhtopbar {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 110px;
background-color: black;
color: black;
z-index: 1000;
font-family: "helvetica";
}
#ynhtoggle {
cursor: pointer;
position: absolute;
background-color: black;
text-align: center;
padding-top: 10px;
top: 100px;
left: 50px;
width: 80px;
height: 18px;
z-index: 900;
color: white;
font-weight: bold;
font-size: 13px;
border-radius: 3px;
}
#ynhtoggle:hover {
text-decoration: none;
}

View file

@ -1,6 +1,8 @@
<html> <html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<head> <head>
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, width=device-width, height=device-height" />
<title>YunoHost Portal</title> <title>YunoHost Portal</title>
<link rel="stylesheet" href="assets/css/bootstrap.min.css" type="text/css"/> <link rel="stylesheet" href="assets/css/bootstrap.min.css" type="text/css"/>
<script src="assets/js/jquery-1.10.2.min.js"></script> <script src="assets/js/jquery-1.10.2.min.js"></script>

102
portal/panel.ms Normal file
View file

@ -0,0 +1,102 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, width=device-width, height=device-height" />
<title>Yunohost Apps</title>
<link media="all" type="text/css" href="assets/css/panel.css" rel="stylesheet">
<script src="assets/js/jquery-1.10.2.min.js"></script>
</head>
<body class="gradient" style="overflow: hidden">
<!--<body class="gradient" style="">-->
<iframe name="glu" id="glu" width="100%" src="/" style=""></iframe>
<script>
var ynh = {};
ynh.jquery = jQuery.noConflict();
(function( $ ) {
function datScroll(to) {
preventRefire = true;
$("body,html").animate({scrollTop:to}, '100', 'swing', function() {
setTimeout(function() {
if (to == 0) {
$("#ynhtoggle").addClass("ynhopen");
} else {
$("#ynhtoggle").removeClass("ynhopen");
}
preventRefire = false;
}, 300);
});
}
preventRefire = false;
function checkScroll (direction) {
if(preventRefire) return;
if((direction == "top") && ($("body").scrollTop() == 107 || $("html").scrollTop() == 107) && $("#ynhtoggle.ynhopen").length == 0) {
datScroll(0);
} else if((direction == "bottom") && $("#ynhtoggle.ynhopen").length > 0) {
datScroll(h);
}
}
$( document ).ready(function($) {
scroll = $("body").scrollTop();
h = 107;
$('body').children().filter(function() {
return $(this).css("position") === 'absolute' || $(this).css("position") === 'fixed';
}).css({top: function(index, value) {
return parseFloat(value) + h + 3;
}});
if ($(window).height() > $("html").height()) {
alert('moualé');
$("html").css('min-height', $(window).height() + h );
}
$("body").append('<div id="ynhtopbar"><div id="ynhtoggle" class="ynhopen">YunoHost</div></div>');
$("body").css({marginTop: function(index, value) {
return parseFloat(value) + h + 3;
}});
if (scroll == 0) {
$("body,html").animate({scrollTop:h}, '100', 'swing', function() {
setTimeout(function() {
$("#ynhtoggle").removeClass("ynhopen");
}, 300);
//window.scrollTo(0, h);
});
}
$("#ynhtoggle").on("click", function() {
if ($("body").scrollTop() == 0 && $("html").scrollTop() == 0) {
datScroll(h);
} else {
datScroll(0);
}
});
$("#glu").load(function() {
$( $(this)[0].contentWindow ).bind("DOMMouseScroll mousewheel scroll", function(event) {
if (event.currentTarget.scrollY > 0) {
checkScroll("bottom");
} else {
checkScroll("top");
}
});
$(document).bind("keyup keydown",function(event){
if($('input:focus,textarea:focus').length > 0) return; //If an input field is focused
if(event.which == 38 || event.which == 33) {
checkScroll("top");
} else if(event.which == 40 || event.which == 34) {
checkScroll("bottom");
}
});
});
});
})(ynh.jquery);
</script>
</body>
</html>