\#5, TODO: Add codes and add sources and versions

This commit is contained in:
José Luis Garrido Labrador
2018-09-29 13:06:59 +02:00
parent 54b7c70adc
commit ea067d8f15
11 changed files with 254 additions and 40 deletions

View File

@@ -132,7 +132,8 @@ class DB
*/
public function loadDiff($id, $lang)
{
$query = "SELECT Lang,Code,Version FROM Sources NATURAL JOIN Codes WHERE IDC=$id AND Lang<>'$lang' AND Version = (SELECT MAX(Version) FROM Sources NATURAL JOIN Codes WHERE IDC=$id AND Lang<>'$lang')";
$lang=dbw_escape_string($this->conn,$lang);
$query = "SELECT Lang,Code,Version FROM Sources WHERE IDC=$id AND Lang<>'$lang' AND Version = (SELECT MAX(Version) FROM Sources WHERE IDC=$id AND Lang='$lang')";
$code = dbw_query($this->conn, $query);
return $code;
}
@@ -459,7 +460,7 @@ class DB
*/
public function updatePass($idu, $pass)
{
$query = "UPDATE Users SET password='" . hash('sha256', $pass) . "' WHERE IDU='$idu'";
$query = "UPDATE Users SET pass='" . hash('sha256', $pass) . "' WHERE IDU='$idu'";
dbw_query($this->conn, $query);
}
}

View File

@@ -35,17 +35,29 @@ $string = file_get_contents(__DIR__."/../data/supported.json");
$app["supported"] = json_decode($string, true);
$app['db']=null;
try {
$app['db'] = new DB();
}catch (Exception $ex){
exit();
function connectDB(){
global $app;
try {
$app['db'] = new DB();
}catch (Exception $ex){
$app->abort('503','ERROR en la Base de Datos');
}
}
/* Security */
$app['security.role_hierarchy'] = array(
'ROLE_DELETE' => array('ROLE_COMMON'),
'ROLE_COMMON' => array('ROLE_USER'),
);
/* End Security */
$app->boot();
/* Basics */
$app->get('/', function (Request $request) use($app) {
connectDB();
$user = getUser($app);
$query = $app['db']->loadLast();
$last = lastToArray($app["db"],$query,$app['supported']);
@@ -55,32 +67,42 @@ $app->get('/', function (Request $request) use($app) {
"last" => $last,
"supported" => $app["supported"],
"page" => "home",
"grouped" => groupByCategory($app["supported"]))
"grouped" => groupByCategory($app["supported"])),
'user' => $user
));
})->bind('home');
$app->get('/doc', function (Request $request) use($app){
connectDB();
$user = getUser($app);
$page = array(
"title" => "Documentation",
"description" => "All documentation about how to upload code in CodeShare",
"page" => "doc"
"page" => "doc",
);
return $app['twig']->render($app['fronthtml'].'/doc.twig', array("page" => $page));
return $app['twig']->render($app['fronthtml'].'/doc.twig', array("page" => $page, "user" => $user));
})->bind('doc');
$app->get('/about', function (Request $request) use($app){
connectDB();
$user = getUser($app);
$page = array(
"title" => "About CodeShare",
"description" => "Developed by JKA Network's Team",
"page" => "about",
);
return $app['twig']->render($app['fronthtml'].'/about.twig', array("page" => $page));
return $app['twig']->render($app['fronthtml'].'/about.twig', array("page" => $page,'user'=>$user));
})->bind('about');
/* Codes */
$app->get('/code/{idc}/{lang}/{version}', function (Request $request, $idc, $lang, $version) use($app){
$app->get('/code/{lang}-{idc}-{version}', function (Request $request, $lang, $idc, $version) use($app){
connectDB();
$user = getUser($app);
$array = $app['db']->loadAll($idc,$lang,$version);
if(!$array){
$app->abort('404');
}
$page = array(
"page" => 'code',
"title" => "$array[Name] by $array[nick]",
@@ -104,5 +126,186 @@ $app->get('/code/{idc}/{lang}/{version}', function (Request $request, $idc, $lan
"code" => $code,
"otherImplementation" => $otherImplementation,
"supported" => $app['supported'],
"user" => $user
));
})->bind('code');
})->bind('code');
$app->get('/code/{lang}-{idc}', function(Request $request, $lang, $idc) use($app){
connectDB();
$user = getUser($app);
$array = $app['db']->loadOtherVersion($idc,$lang);
$other = otherVersionToArray($app['db'],$array,$app['supported']);
$name = $other[0]['name'];
$page = array(
"title" => "Other versions of $name",
"description" => "All differents version of $name uploaded in CodeShare",
"last" => $other,
"page" => ""
);
return $app['twig']->render($app['fronthtml'].'/otherVersion.twig', array(
"page" => $page, "user" => $user
));
})->bind('codeVer');
/* User */
$app->get('/tos',function(Request $request) use($app){
connectDB();
$user = getUser($app);
$page = array(
"title" => "Terms of service",
"description" => "Terms of services and privacy policies",
"page" => ""
);
return $app['twig']->render($app['fronthtml'].'/TOS.twig', array("page" => $page, "user" => $user));
})->bind('tos');
$app->get('/login', function(Request $request) use ($app){
connectDB();
$user = getUser($app);
if($user != null){
return $app->redirect($app["url_generator"]->generate('home'));
}
if ($request->getMethod() == 'GET'){
return loginRegister('login');
}
else{
$state = checkInfo($request);
return loginOrRegister($state,$request);
}
})->bind('login')->method('GET|POST');
$app->get('/signup', function(Request $request) use ($app){
connectDB();
$user = getUser($app);
if($user != null){
return $app->redirect($app["url_generator"]->generate('home'));
}
if ($request->getMethod() == 'GET'){
return loginRegister('sign-up');
}else{
$state = checkInfo($request);
return loginOrRegister($state,$request);
}
})->bind('register')->method('GET|POST');
function loginRegister($default,$state=0){
global $app;
$page = array(
"title" => ucfirst($default),
"description" => "Start now in CodeShare",
"page" => "$default",
"state" => $state, //0=no logged, 1 login fail, 2 register fail, 3 all correct (render home)
);
return $app['twig']->render($app['fronthtml']."/loginregister.twig", array("page" => $page));
}
function loginOrRegister($state,$request){
global $app;
switch ($state){
case 3:
return loginRegister('login',1);
case 1:
if(checklogin($request->get('email'),$request->get('pwd'))){
return $app->redirect($app["url_generator"]->generate('home'));
}else{
return loginRegister("login",1);
}
case 2:
if(register($request->get('emailre'),$request->get('emailre-re'),
$request->get('pwdre'), $request->get('pwdre-re'),$request->get('nick'))){
return $app->redirect($app["url_generator"]->generate('home'));
}else{
return loginRegister("sing-up",2);
}
}
}
$app->get('logout',function(Request $request) use ($app){
logout();
return $app->redirect($app['url_generator']->generate('home'));
})->bind('logout');
$app->get('/user', function(Request $request) use ($app){
connectDB();
$user = getUser($app);
if($user == null)
$app->abort('403');
$status = 0;
if($request->getMethod() == 'POST'){
$passact = $request->get("passact");
$newpass = $request->get("newpass");
$newpassre = $request->get("newpass-re");
if($app['db']->checkPass($user['email'],$passact) && $newpass == $newpassre){
$status=1;
$app['db']->updatePass($user['IDU'],$newpass);
}else
$status=2;
$app['db']->close();
}
$page = array(
"page" => "user",
"title" => "$user[nick]",
"description" => "NOT RELEVANT",
"status" => $status
);
return $app['twig']->render($app['fronthtml']."/user.twig",array("page"=>$page,"user"=>$user));
})->bind('user')->method('GET|POST');
/* Error Codes */
function HTTPError($code){
switch($code){
case 401:
$text = "Unauthorized user";
break;
case 403:
$text = "Forbidden page";
break;
case 404:
$text = "Page not found";
break;
case 503:
$text = "Database unavailable";
break;
case 500:
$text = "Internal server error";
break;
default:
$text = "Please, return to home page";
$code = "Internal error";
break;
}
return array("text"=>$text,"number"=>$code);
}
$app->error(function (\Exception $e,$request, $code) use ($app) {
$user = null;
try{
$user = getUser($app);
}catch(Throwable $ex){
//Nothing
}
if ($app['debug']) {
return;
}else{
$error = HTTPError($code);
return $app['twig']->render($app['fronthtml'].'/error.twig', Array(
'page' => array("title"=>$code),
'error' => $error,
'user' => $user,
));
}
});

View File

@@ -64,6 +64,6 @@ function otherImplementationToArray($db,&$query,$supported){
return $other;
}
function otherVersionToArray($db,&$query,&$supported){
function otherVersionToArray($db,$query,$supported){
return lastToArray($db,$query,$supported);
}

View File

@@ -6,6 +6,17 @@
* Time: 19:06
*/
function checkInfo($request){
$email = $request->get('email');
$emailre = $request->get('emailre');
if ($email != null)
return 1;
else if ($emailre != null)
return 2;
else
return 3;
}
/**
* Check if login is correct
*
@@ -37,8 +48,10 @@ function checklogin($email,$pass){
* @param $nick new user's nickname
* @return bool true if email never exists before, else false
*/
function register($email,$pass,$nick){
function register($email,$emailre,$pass,$passre,$nick){
$db = new DB();
if($emailre != $email || $pass != $passre)
return false;
$bool = $db->register($email,$pass,$nick);
if($bool) {
$db->close();
@@ -61,7 +74,7 @@ function getUser($app){
$user=null;
if(isset($_SESSION['sessionID'])){
if($app['db']->checkCookie($_SESSION['sessionID'],$_SESSION['token'])){
$user = $db->loadProfile($_SESSION['sessionID']);
$user = $app['db']->loadProfile($_SESSION['sessionID']);
}
}
return $user;