mirror of
https://gitlab.com/CodeSolutionsProject/CodeShare.git
synced 2026-03-13 22:02:04 +01:00
@@ -497,9 +497,12 @@ class DB
|
||||
$libV = "";
|
||||
}
|
||||
|
||||
$save = false;
|
||||
$version = $this->getLastVersion($IDC, $lang);
|
||||
if ($version == null)
|
||||
if ($version == null){
|
||||
$save = true;
|
||||
$version = 0;
|
||||
}
|
||||
$version++;
|
||||
$modification = time();
|
||||
$queryBuilder = $this->newQueryBuilder();
|
||||
@@ -519,6 +522,9 @@ class DB
|
||||
)
|
||||
->setParameters(array($IDC,$lang,$version,$modification,$code,$lib,$libV,$IDU));
|
||||
$this->execute($queryBuilder);
|
||||
if($save){
|
||||
$this->save($IDU, $IDC, $lang);
|
||||
}
|
||||
return $version;
|
||||
}
|
||||
|
||||
@@ -705,6 +711,7 @@ class DB
|
||||
*/
|
||||
public function register($email, $pass, $nick)
|
||||
{
|
||||
$token = RandomString(50);
|
||||
if ($this->loadIDU($email))
|
||||
return 'MAIL_IN_USE';
|
||||
else if ($this->loadIDU($nick,'nick'))
|
||||
@@ -717,10 +724,12 @@ class DB
|
||||
->values(array(
|
||||
'email' => '?',
|
||||
'pass' => '?',
|
||||
'nick' => '?'
|
||||
'nick' => '?',
|
||||
'token' => '?'
|
||||
))
|
||||
->setParameters(array($email,$password,$nick));
|
||||
->setParameters(array($email,$password,$nick,hash('sha256',$token)));
|
||||
$this->execute($queryBuilder);
|
||||
newUser($email, $nick, $token);
|
||||
return 'CORRECT';
|
||||
}
|
||||
}
|
||||
@@ -743,6 +752,24 @@ class DB
|
||||
$this->execute($queryBuilder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set role
|
||||
*
|
||||
* @param $IDU user's identifier
|
||||
* @param $role Role
|
||||
*/
|
||||
public function setRole($IDU, $role=1)
|
||||
{
|
||||
$queryBuilder = $this->newQueryBuilder();
|
||||
$queryBuilder
|
||||
->update('Users')
|
||||
->set('ROLE','?')
|
||||
->where($queryBuilder->expr()->eq('IDU','?'))
|
||||
->setParameter(0,$role)
|
||||
->setParameter(1,$IDU);
|
||||
$this->execute($queryBuilder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change password
|
||||
*
|
||||
@@ -764,9 +791,9 @@ class DB
|
||||
/**
|
||||
* Check if token to restore password is correct
|
||||
*
|
||||
* @param string $nick string nick to restore password
|
||||
* @param string $token random string generate
|
||||
* @param int $timestamp moment when restore activate
|
||||
* @param $nick string $nick string nick to restore password
|
||||
* @param $token string $token random string generate
|
||||
* @param $timestamp int $timestamp moment when restore activate
|
||||
* @return bool true is are similar
|
||||
*/
|
||||
public function checkRestoreToken($nick,$token,$timestamp){
|
||||
@@ -780,6 +807,24 @@ class DB
|
||||
return $tk == hash('sha256',"$token-$timestamp");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if token to confirm is correct
|
||||
*
|
||||
* @param $token string $token random string generate
|
||||
* @param $idu int user identifier
|
||||
* @return bool true is are similar
|
||||
*/
|
||||
public function checkConfirmToken($idu,$token){
|
||||
$queryBuilder = $this->newQueryBuilder();
|
||||
$queryBuilder
|
||||
->select('token')
|
||||
->from('Users')
|
||||
->where($queryBuilder->expr()->eq('idu','?'))
|
||||
->setParameter(0,$idu);
|
||||
$tk = $this->getData($queryBuilder)[0]['token'];
|
||||
return $tk == hash('sha256',"$token");
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a random token to restore password
|
||||
*
|
||||
@@ -841,7 +886,7 @@ class DB
|
||||
* @return int 0 if correct, 1 if error
|
||||
*/
|
||||
public function vote($idu,$idc,$lang){
|
||||
return $this->voteOrSave($idu,$idc,$lang,"Votes");
|
||||
return $this->voteOrSave($idu,$idc,$lang,"Likes");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -892,7 +937,7 @@ class DB
|
||||
* @return int 0 if correct, 1 if error
|
||||
*/
|
||||
public function unvote($idu,$idc,$lang){
|
||||
return $this->unvoteOrUnsave($idu,$idc,$lang,"Votes");
|
||||
return $this->unvoteOrUnsave($idu,$idc,$lang,"Likes");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -917,18 +962,20 @@ class DB
|
||||
$queryBuilder = $this->newQueryBuilder();
|
||||
$subQuery = $this->newQueryBuilder();
|
||||
$queryBuilder
|
||||
->select(array('s.IDC','s.Lang','s.Version'))
|
||||
->select(array('s.IDC','s.Lang','s.Version','c.Name'))
|
||||
->from('Saves','sa')
|
||||
->join('sa','Sources','s',
|
||||
$queryBuilder->expr()->andX(
|
||||
$queryBuilder->expr()->eq("sa.IDC","s.IDC"),
|
||||
$queryBuilder->expr()->eq("sa.Lang","s.Lang")
|
||||
))
|
||||
->join('s','Codes','c',
|
||||
$queryBuilder->expr()->eq("s.IDC",'c.IDC'))
|
||||
->where(
|
||||
$queryBuilder->expr()->andX(
|
||||
$queryBuilder->expr()->eq("IDU",'?'),
|
||||
$queryBuilder->expr()->eq("sa.IDU",'?'),
|
||||
$queryBuilder->expr()->eq(
|
||||
'so.Version','('.
|
||||
's.Version','('.
|
||||
$subQuery
|
||||
->select('MAX(Version)')
|
||||
->from('Sources')
|
||||
@@ -993,7 +1040,7 @@ class DB
|
||||
* @return int 0 or 1
|
||||
*/
|
||||
public function iVote($idu,$idc,$lang){
|
||||
return $this->iVoteSave($idu,$idc,$lang,"Votes");
|
||||
return $this->iVoteSave($idu,$idc,$lang,"Likes");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,11 +7,13 @@ require_once __DIR__ .'/../vendor/autoload.php';
|
||||
|
||||
require_once __DIR__ . '/Config.php';
|
||||
require 'functions.php';
|
||||
require 'domails.php';
|
||||
require 'DB.php';
|
||||
require 'dbToTable.php';
|
||||
require 'users.php';
|
||||
|
||||
|
||||
|
||||
$app = new Silex\Application();
|
||||
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@@ -54,6 +56,11 @@ $app->boot();
|
||||
$app->get('/', function (Request $request) use($app) {
|
||||
|
||||
$user = getUser($app);
|
||||
$idu=0;
|
||||
if($user != null){
|
||||
$idu=$app['data']->loadIDU($user['nick'],'nick');
|
||||
}
|
||||
|
||||
$ajax=false;
|
||||
if($request->getMethod()=="POST"){
|
||||
if($request->get('globalSearch')!=null){
|
||||
@@ -65,10 +72,10 @@ $app->get('/', function (Request $request) use($app) {
|
||||
$ajax=true;
|
||||
}
|
||||
$last = $app['data']->loadFilter($data,$type);
|
||||
$last = lastToArray($last,$app['supported']);
|
||||
$last = lastToArray($last,$app['supported'],$app['data'],$idu);
|
||||
}else{
|
||||
$query = $app['data']->loadLast();
|
||||
$last = lastToArray($query,$app['supported']);
|
||||
$last = lastToArray($query,$app['supported'],$app['data'],$idu);
|
||||
}
|
||||
$page = array( 'title' => "CodeShare",
|
||||
"description" => "Sharing your solutions with all",
|
||||
@@ -177,8 +184,11 @@ function loginOrRegister($state,$request){
|
||||
case 3:
|
||||
return loginRegister('login','BAD_CREDENTIAL');
|
||||
case 1:
|
||||
if(checklogin($request->get('email'),$request->get('pwd'),$app['data'])==''){
|
||||
$result = checklogin($request->get('email'),$request->get('pwd'),$app['data']);
|
||||
if($result==''){
|
||||
return 'redirect';
|
||||
}else if($result=='VALIDATE'){
|
||||
return loginRegister('login','CONFIRM_MAIL');
|
||||
}else{
|
||||
return loginRegister("login",'BAD_CREDENTIAL');
|
||||
}
|
||||
@@ -221,7 +231,8 @@ $app->get('/user', function(Request $request) use ($app){
|
||||
"description" => "NOT RELEVANT",
|
||||
"status" => $status
|
||||
);
|
||||
return $app['twig']->render($app['fronthtml']."/user.twig",array("page"=>$page,"user"=>$user));
|
||||
$saved = $app['data']->allSaves($app['data']->loadIDU($user['nick'],'nick'));
|
||||
return $app['twig']->render($app['fronthtml']."/user.twig",array("page"=>$page,"user"=>$user,"saved"=>savedToArray($saved,$app['supported'])));
|
||||
|
||||
})->bind('user')->method('GET|POST');
|
||||
|
||||
@@ -300,7 +311,11 @@ $app->get('/code/{lang}-{idc}-{version}', function (Request $request, $lang, $id
|
||||
"existedLangs" => $app['data']->loadLangs($idc),
|
||||
"original" => $app['data']->loadOriginalAuthor($idc),
|
||||
);
|
||||
$code = allCodeToArray($array,$app['supported']);
|
||||
$idu=0;
|
||||
if($user != null){
|
||||
$idu=$app['data']->loadIDU($user['nick'],'nick');
|
||||
}
|
||||
$code = allCodeToArray($array,$app['supported'],$app['data'],$idu);
|
||||
if($array['Version']!=1)
|
||||
$page['otherV'] = true;
|
||||
$diff = $app['data']->loadDiff($idc,$lang);
|
||||
@@ -418,7 +433,17 @@ $app->get('/add', function(Request $request) use($app){
|
||||
$app->get('/restore', function(Request $request) use($app){
|
||||
|
||||
if($request->getMethod()=="POST"){
|
||||
return $app['data']->createRestoreToken($request->get('emailre'));
|
||||
$parts = $app['data']->createRestoreToken($request->get('emailre'));
|
||||
$parts = explode("-", $parts);
|
||||
$token = $parts[0];
|
||||
$timestamp = $parts[1];
|
||||
restorePassword(
|
||||
$request->get('emailre'),
|
||||
$app['data']->loadProfile($app['data']->loadIDU($request->get('emailre')))['nick'],
|
||||
$token,
|
||||
$timestamp
|
||||
);
|
||||
return "UPDATE";
|
||||
}
|
||||
$page = array("title"=>"Restore your password",
|
||||
"description"=>"None",
|
||||
@@ -464,6 +489,16 @@ $app->get('/restore/{nick}/{token}-{timestamp}', function(Request $request, $nic
|
||||
}
|
||||
})->bind('restorePass')->method('GET|POST');
|
||||
|
||||
$app->get('/confirm/{nick}-{token}', function(Request $request, $nick, $token) use($app){
|
||||
$idu=$app['data']->loadIDU($nick,'nick');
|
||||
$res = $app['data']->checkConfirmToken($idu,$token);
|
||||
if($res)
|
||||
$app['data']->setRole($idu);
|
||||
else
|
||||
$app->abort(401);
|
||||
return $app->redirect($app['url_generator']->generate('login'));
|
||||
})->bind('confirm');
|
||||
|
||||
/* Votes and saves */
|
||||
|
||||
$app->post('/vote-save',function(Request $request) use($app){
|
||||
@@ -474,15 +509,16 @@ $app->post('/vote-save',function(Request $request) use($app){
|
||||
|
||||
$data = str_replace('"','"',$request->getContent());
|
||||
$data = json_decode($data,true);
|
||||
$idu = $app['data']->loadIDU($user['nick'],'nick');
|
||||
switch($data['mode']){
|
||||
case "vote":
|
||||
return $app['data']->vote($user['idu'],$data['idc'],$data['lang']);
|
||||
return $app['data']->vote($idu,$data['idc'],$data['lang']);
|
||||
case "unvote":
|
||||
return $app['data']->unvote($user['idu'],$data['idc'],$data['lang']);
|
||||
return $app['data']->unvote($idu,$data['idc'],$data['lang']);
|
||||
case "save":
|
||||
return $app['data']->save($user['idu'],$data['idc'],$data['lang']);
|
||||
return $app['data']->save($idu,$data['idc'],$data['lang']);
|
||||
case "unsave":
|
||||
return $app['data']->unsave($user['idu'],$data['idc'],$data['lang']);
|
||||
return $app['data']->unsave($idu,$data['idc'],$data['lang']);
|
||||
}
|
||||
return 1;
|
||||
|
||||
|
||||
@@ -11,10 +11,16 @@
|
||||
* Methods to get an array to send to twig
|
||||
*/
|
||||
|
||||
function lastToArray(&$query,$supported){
|
||||
function lastToArray(&$query,$supported,$db,$idu=0){
|
||||
$last = array();
|
||||
$list = $query->fetchAll();
|
||||
foreach($list as $var){
|
||||
$like=0;
|
||||
$save=0;
|
||||
if($idu!=0){
|
||||
$like = $db->iVote($idu,$var['IDC'],$var['Lang']);
|
||||
$save = $db->iSave($idu,$var['IDC'],$var['Lang']);
|
||||
}
|
||||
$array = array
|
||||
( "idc" => $var["IDC"],
|
||||
"lang" => $var["Lang"],
|
||||
@@ -24,13 +30,21 @@ function lastToArray(&$query,$supported){
|
||||
"lLang" => $supported[$var["Lang"]][0],
|
||||
"description" => $var["Description"],
|
||||
"code" => html_entity_decode($var["Code"]),
|
||||
"like" => $like,
|
||||
"save" => $save
|
||||
);
|
||||
array_push($last,$array);
|
||||
}
|
||||
return $last;
|
||||
}
|
||||
|
||||
function allCodeToArray(&$query,$supported){
|
||||
function allCodeToArray(&$query,$supported,$db,$idu=0){
|
||||
$like=0;
|
||||
$save=0;
|
||||
if($idu!=0){
|
||||
$like = $db->iVote($idu,$query['IDC'],$query['Lang']);
|
||||
$save = $db->iSave($idu,$query['IDC'],$query['Lang']);
|
||||
}
|
||||
$code = array(
|
||||
"idc" => $query['IDC'],
|
||||
"lang" => $query['Lang'],
|
||||
@@ -46,6 +60,8 @@ function allCodeToArray(&$query,$supported){
|
||||
"rows" => substr_count($query['Code'],"\n"),
|
||||
"extlib" => $query['UseExtLib'],
|
||||
"extlibver" => $query['UseExtLibVer'],
|
||||
"like" => $like,
|
||||
"save" => $save
|
||||
);
|
||||
return $code;
|
||||
|
||||
@@ -65,6 +81,22 @@ function otherImplementationToArray(&$query,$supported){
|
||||
return $other;
|
||||
}
|
||||
|
||||
function savedToArray($query,$supported){
|
||||
$saved = array();
|
||||
foreach($query as $var){
|
||||
$array = array
|
||||
(
|
||||
"idc" => $var['IDC'],
|
||||
"lang" => $var['Lang'],
|
||||
"version" => $var['Version'],
|
||||
"lLang" => $supported[$var["Lang"]][0],
|
||||
"name" => $var['Name']
|
||||
);
|
||||
array_push($saved,$array);
|
||||
}
|
||||
return $saved;
|
||||
}
|
||||
|
||||
function otherVersionToArray(&$query,$supported){
|
||||
return lastToArray($query,$supported);
|
||||
}
|
||||
29
Source/src/domails.php
Normal file
29
Source/src/domails.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
function newUser($email,$nick,$token){
|
||||
global $app;
|
||||
|
||||
$header = 'From: CodeShare ' . "contacto@jkanetwork.com\r\n";
|
||||
$header .= "MIME-Version: 1.0\r\n";
|
||||
$header .= "Content-Type: text/html; charset=UTF-8";
|
||||
$to = $email;
|
||||
$url = $app['url_generator']->generate('confirm',array('nick'=>$nick,'token'=>$token));
|
||||
$correo = "<p>Wellcome to CodeShare $nick, the distribution platform for code fragments</p>
|
||||
<p>To confirm your account please, click in the next link: <a href='https://codeshare.jkanetwork.com/$url'>https://codeshare.jkanetwork.com/$url</a></p>";
|
||||
mail($to,"Confirm account to $nick",$correo,$header);
|
||||
}
|
||||
|
||||
function restorePassword($email,$nick,$token,$timestamp){
|
||||
global $app;
|
||||
|
||||
$header = 'From: CodeShare ' . "contacto@jkanetwork.com\r\n";
|
||||
$header .= "MIME-Version: 1.0\r\n";
|
||||
$header .= "Content-Type: text/html; charset=UTF-8";
|
||||
$to = $email;
|
||||
$url = $app['url_generator']->generate('restorePass',array('nick'=>$nick,'token'=>$token,'timestamp' => $timestamp));
|
||||
$correo = "<p>Someone requested that the password be reset for you</p>
|
||||
<p>If this was a mistake, just ignore this email and nothing will happen.</p>
|
||||
<p>To restore your password please, click in the next link: <a href='https://codeshare.jkanetwork.com/$url'>https://codeshare.jkanetwork.com/$url</a></p>";
|
||||
mail($to,"Restore password to $nick",$correo,$header);
|
||||
|
||||
}
|
||||
@@ -24,11 +24,13 @@ function checkInfo($request){
|
||||
* @param $pass user's input password
|
||||
* @return bool true if email-password combination is correct, false if not
|
||||
*/
|
||||
function checklogin($email,$pass,$db){
|
||||
function checklogin($email,$pass,DB $db){
|
||||
$bool = $db->checkPass($email,$pass);
|
||||
|
||||
if($bool){
|
||||
$idu = $db->loadIDU($email);
|
||||
$ROLE = $db->loadProfile($idu)['ROLE'];
|
||||
if($ROLE==0)
|
||||
return 'VALIDATE';
|
||||
$token = RandomString(50);
|
||||
$db->setToken($idu,$token);
|
||||
$_SESSION['token'] = $token;
|
||||
|
||||
Reference in New Issue
Block a user