Merge branch 'master' of ssh://git.nemunai.re:6224/fic2014-server
This commit is contained in:
commit
edd8eb45a5
@ -3,7 +3,7 @@
|
|||||||
-- http://www.phpmyadmin.net
|
-- http://www.phpmyadmin.net
|
||||||
--
|
--
|
||||||
-- Client: localhost
|
-- Client: localhost
|
||||||
-- Généré le: Mer 09 Octobre 2013 à 18:26
|
-- Généré le: Mer 09 Octobre 2013 à 23:12
|
||||||
-- Version du serveur: 5.5.32-log
|
-- Version du serveur: 5.5.32-log
|
||||||
-- Version de PHP: 5.5.0-pl0-gentoo
|
-- Version de PHP: 5.5.0-pl0-gentoo
|
||||||
|
|
||||||
@ -21,24 +21,40 @@ SET time_zone = "+00:00";
|
|||||||
--
|
--
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `exercices` (
|
CREATE TABLE IF NOT EXISTS `exercices` (
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
`id` varchar(100) COLLATE utf16_unicode_ci NOT NULL,
|
||||||
`id_theme` int(10) unsigned NOT NULL,
|
`id_theme` int(10) unsigned NOT NULL,
|
||||||
|
`require` varchar(100) COLLATE utf16_unicode_ci NOT NULL,
|
||||||
|
`level` tinyint(4) NOT NULL,
|
||||||
`points` smallint(6) NOT NULL,
|
`points` smallint(6) NOT NULL,
|
||||||
|
`statement` text COLLATE utf16_unicode_ci NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Structure de la table `exercice_dependancies`
|
-- Structure de la table `exercice_files`
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `exercice_dependancies` (
|
CREATE TABLE IF NOT EXISTS `exercice_files` (
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
`id_exercice` int(10) unsigned NOT NULL,
|
`path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||||
`id_dependence` int(10) unsigned NOT NULL,
|
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Structure de la table `exercice_keys`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `exercice_keys` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`format` enum('raw','md5','sha1','sha256','sha512','whirlpool') COLLATE utf8_unicode_ci NOT NULL,
|
||||||
|
`value` varbinary(100) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
@ -51,11 +67,11 @@ CREATE TABLE IF NOT EXISTS `sessions` (
|
|||||||
`uid` binary(16) NOT NULL,
|
`uid` binary(16) NOT NULL,
|
||||||
`time` int(11) NOT NULL,
|
`time` int(11) NOT NULL,
|
||||||
`ip` varbinary(16) NOT NULL,
|
`ip` varbinary(16) NOT NULL,
|
||||||
`var` varchar(9999) COLLATE utf16_unicode_ci NOT NULL,
|
`var` varchar(9999) COLLATE utf8_unicode_ci NOT NULL,
|
||||||
`level` tinyint(2) NOT NULL,
|
`level` tinyint(2) NOT NULL,
|
||||||
`active` enum('1','0') COLLATE utf16_unicode_ci NOT NULL,
|
`active` enum('1','0') COLLATE utf8_unicode_ci NOT NULL,
|
||||||
PRIMARY KEY (`session`)
|
PRIMARY KEY (`session`)
|
||||||
) ENGINE=MEMORY DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci;
|
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
@ -98,4 +114,9 @@ CREATE TABLE IF NOT EXISTS `users` (
|
|||||||
`lastname` varchar(255) COLLATE utf16_unicode_ci NOT NULL,
|
`lastname` varchar(255) COLLATE utf16_unicode_ci NOT NULL,
|
||||||
`company` varchar(255) COLLATE utf16_unicode_ci NOT NULL,
|
`company` varchar(255) COLLATE utf16_unicode_ci NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=2 ;
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO users (username, password, auth_level)
|
||||||
|
VALUES
|
||||||
|
("nemunaire", UNHEX('c1d050d16d8c90dae6fef376460299aa8d1cce7c5b299720a8e38952a77212f1019e2cd44ba58e0433c01cb4c81ab9a789c07df218b0b9f05af8d1198a3bd239'), 2);
|
||||||
|
3
htdocs/css/errors.css
Normal file
3
htdocs/css/errors.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
body {
|
||||||
|
padding: 30px;
|
||||||
|
}
|
3
htdocs/css/home.css
Normal file
3
htdocs/css/home.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
body {
|
||||||
|
padding: 30px;
|
||||||
|
}
|
37
htdocs/css/login.css
Normal file
37
htdocs/css/login.css
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
body {
|
||||||
|
padding-top: 40px;
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-signin {
|
||||||
|
max-width: 330px;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.form-signin .form-signin-heading,
|
||||||
|
|
||||||
|
.form-signin .checkbox {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.form-signin .form-control {
|
||||||
|
position: relative;
|
||||||
|
font-size: 16px;
|
||||||
|
height: auto;
|
||||||
|
padding: 10px;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.form-signin .form-control:focus {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.form-signin input[type="text"] {
|
||||||
|
margin-bottom: -1px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
.form-signin input[type="password"] {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<!ELEMENT title (#PCDATA)>
|
<!ELEMENT title (#PCDATA)>
|
||||||
|
|
||||||
<!ELEMENT exercice (title,points,(statement|key|file*))>
|
<!ELEMENT exercice (title,points,statement,key+,file*)>
|
||||||
<!ATTLIST exercice id ID #REQUIRED>
|
<!ATTLIST exercice id ID #REQUIRED>
|
||||||
<!ATTLIST exercice level (sandbox|easy|simple|medium|hard|extrem) #REQUIRED>
|
<!ATTLIST exercice level (sandbox|easy|simple|medium|hard|extrem) #REQUIRED>
|
||||||
<!ATTLIST exercice depends IDREFS #IMPLIED>
|
<!ATTLIST exercice depends IDREFS #IMPLIED>
|
||||||
@ -14,5 +14,7 @@
|
|||||||
<!ELEMENT statement (#PCDATA)>
|
<!ELEMENT statement (#PCDATA)>
|
||||||
|
|
||||||
<!ELEMENT key (#PCDATA)>
|
<!ELEMENT key (#PCDATA)>
|
||||||
|
<!ATTLIST key format (raw|md5|sha1|sha256|sha512|whirlpool) "sha512">
|
||||||
|
|
||||||
<!ELEMENT file (#PCDATA)>
|
<!ELEMENT file (#PCDATA)>
|
||||||
|
<!ATTLIST file path CDATA #REQUIRED>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
require_once(trim(file_get_contents('./.onyx')));
|
require_once(trim(file_get_contents('./.onyx')));
|
||||||
|
|
||||||
//On active le débogage si l'on est sur le domaine de debug
|
//On active le débogage si l'on est sur le domaine de debug
|
||||||
if ($_SERVER["SERVER_NAME"] == "localhost" || $_SERVER["SERVER_NAME"] == "fic.nemunai.re")
|
if ($_SERVER["SERVER_NAME"] == "localhost" || $_SERVER["SERVER_NAME"] == "fic" || $_SERVER["SERVER_NAME"] == "atlantis.chen.li")
|
||||||
define("DEBUG", true);
|
define("DEBUG", true);
|
||||||
|
|
||||||
//Chargement de tout le nécessaire pour le site
|
//Chargement de tout le nécessaire pour le site
|
||||||
@ -119,7 +119,7 @@ if (empty($page)) // Public pages
|
|||||||
{
|
{
|
||||||
case "":
|
case "":
|
||||||
$_GET["p"] = "";
|
$_GET["p"] = "";
|
||||||
case "login":
|
case "home":
|
||||||
include("public/home.php");
|
include("public/home.php");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -127,6 +127,10 @@ if (empty($page)) // Public pages
|
|||||||
include("public/login.php");
|
include("public/login.php");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "score":
|
||||||
|
include("public/score.php");
|
||||||
|
break;
|
||||||
|
|
||||||
case "forgotpasswd":
|
case "forgotpasswd":
|
||||||
include("public/forgotpasswd.php");
|
include("public/forgotpasswd.php");
|
||||||
break;
|
break;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
function mdp($username, $mdp)
|
function mdp($username, $mdp)
|
||||||
{
|
{
|
||||||
return hash('whirlpool', strtoupper($username).':'.$mdp);
|
return hash('whirlpool', strtoupper($username).'#'.$mdp);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ip()
|
function ip()
|
||||||
@ -93,4 +93,4 @@ function eregmenu($pattern, $string)
|
|||||||
return preg_match("#".$pattern."#ui", $string);
|
return preg_match("#".$pattern."#ui", $string);
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
34
onyx/include/public/login.php
Normal file
34
onyx/include/public/login.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('ONYX')) exit;
|
||||||
|
|
||||||
|
if ($SESS->level < 1)
|
||||||
|
{
|
||||||
|
if (isset($_POST['username']) && isset($_POST['password']))
|
||||||
|
{
|
||||||
|
$username = $_POST['username'];
|
||||||
|
$password = $_POST['password'];
|
||||||
|
|
||||||
|
$bdd = new BDD();
|
||||||
|
|
||||||
|
// TODO: use function
|
||||||
|
$hash = mdp($bdd->escape($username), $bdd->escape($password));
|
||||||
|
$result = $bdd->unique_query("SELECT username, auth_level FROM users
|
||||||
|
WHERE username='$username'
|
||||||
|
AND password=unhex('$hash')");
|
||||||
|
|
||||||
|
if (!empty($result) && $result['auth_level'] != 0)
|
||||||
|
{
|
||||||
|
$SESS->level = $result['auth_level'];
|
||||||
|
$SESS->values = $result;
|
||||||
|
$SESS->put($username);
|
||||||
|
header("Location: /home");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$page = "public/login";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Show some page ?
|
||||||
|
header("Location: /home");
|
||||||
|
}
|
6
onyx/lang/fr/login.json
Normal file
6
onyx/lang/fr/login.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"title":"Veuillez vous connecter",
|
||||||
|
"login":"Login",
|
||||||
|
"password":"Mot de passe",
|
||||||
|
"connect":"Se connecter"
|
||||||
|
}
|
@ -85,6 +85,10 @@ function decode_ip($int_ip)
|
|||||||
|
|
||||||
function encode_ip($ip=FALSE)
|
function encode_ip($ip=FALSE)
|
||||||
{
|
{
|
||||||
|
if(!$ip && !empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
|
||||||
|
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
|
||||||
|
if(!$ip && !empty($_SERVER["HTTP_X_REAL_IP"]))
|
||||||
|
$ip = $_SERVER["HTTP_X_REAL_IP"];
|
||||||
if(!$ip)
|
if(!$ip)
|
||||||
$ip = $_SERVER['REMOTE_ADDR'];
|
$ip = $_SERVER['REMOTE_ADDR'];
|
||||||
|
|
||||||
|
34
onyx/tpl/bootstrap/layout-nav.tpl
Normal file
34
onyx/tpl/bootstrap/layout-nav.tpl
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{extends file="layout.tpl"}
|
||||||
|
{block name=body}
|
||||||
|
<!-- TODO: message dans lang-->
|
||||||
|
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href="/home">FIC</a>
|
||||||
|
</div>
|
||||||
|
<div class="collapse navbar-collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li><a href="/home">Home</a></li>
|
||||||
|
<li><a href="#about">About</a></li>
|
||||||
|
<li><a href="#contact">Contact</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li><a href="/login">Login</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!--/.nav-collapse -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{if $ERRmessage}
|
||||||
|
<div class="alert alert-{$ERRcolor}">
|
||||||
|
<button class="close" data-dismiss="alert">×</button>
|
||||||
|
<i class="icon-warning-sign"></i> {$ERRmessage}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
{block name=content}{/block}
|
||||||
|
{/block}
|
18
onyx/tpl/bootstrap/public/login.tpl
Normal file
18
onyx/tpl/bootstrap/public/login.tpl
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{extends file="layout-nav.tpl"}
|
||||||
|
|
||||||
|
{block name=head}
|
||||||
|
<link href="css/login.css" rel="stylesheet">
|
||||||
|
{/block}
|
||||||
|
|
||||||
|
{block name=content}
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<form class="form-signin" method="post" action="login">
|
||||||
|
<h3 class="form-signin-heading">{text file="login" path=title}</h3>
|
||||||
|
<input name="username" type="text" class="form-control" placeholder="{text file="login" path=login}" autofocus>
|
||||||
|
<input name="password" type="password" class="form-control" placeholder="{text file="login" path=password}">
|
||||||
|
<button class="btn btn-lg btn-primary btn-block" type="submit">{text file="login" path=connect}</button>
|
||||||
|
</form>
|
||||||
|
</div> <!-- /container -->
|
||||||
|
|
||||||
|
{/block}
|
11
onyx/tpl/bootstrap/users/home.tpl
Normal file
11
onyx/tpl/bootstrap/users/home.tpl
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{extends file="layout-nav.tpl"}
|
||||||
|
|
||||||
|
{block name=head}
|
||||||
|
<link href="css/home.css" rel="stylesheet">
|
||||||
|
{/block}
|
||||||
|
|
||||||
|
{block name=content}
|
||||||
|
<h1>
|
||||||
|
YOUPIII !!!
|
||||||
|
</h1>
|
||||||
|
{/block}
|
Loading…
Reference in New Issue
Block a user