Si vous constatez la perte de tickets, de commentaires ou de projets, veuillez consulter la page https://status.framasoft.org/incident/626.

Commit 85234f61 authored by robin banquo's avatar robin banquo

formulaire de crÉATION DE COMPTE SI PREMIÈRE CONNEXION

parent f94a0426
......@@ -6,11 +6,16 @@ GET @main: /=ShowcaseController->showVisitor
;acces au site en mode éditeur
GET @admin: /admin=ShowcaseController->ShowAdmin
; AUTH ROUTES
;page du formulaire de login
GET @login: /login=AdminController->login
;page du formulaire de login
GET @logout: /logout=AdminController->logout
;page de signIn
GET @signIn: /signin=AdminController->signIn
;page de signIn
POST @signIn: /signin=AdminController->postSignIn
;Requeque d'authentification
POST /authenticate=AdminController->authenticate
......
......@@ -4,66 +4,123 @@
* Class AdminController
* Classe gérant l'authentification de l'utilisateur et l'affichage de la page de login
*/
class AdminController extends Controller
{
// affichage de la page login
function login()
{
//si l'utilisateur est connecté comme admin
if ($this->isAdmin()) {
//on le renvoi direct sur la page admin
$this->f3->reroute('/admin');
} else {
//sinon on rends le template de login
$siteOptions = $this->getSiteOptions();
$this->f3->set('siteOptionsJson', json_encode($siteOptions));
$this->f3->set('siteOptions', $siteOptions);
class AdminController extends Controller {
echo (new Template())->render('login.htm');
}
}
// affichage de la page login
function login() {
$this->checkFirstConnexion();
//si l'utilisateur est connecté comme admin
if ($this->isAdmin()) {
//on le renvoi direct sur la page admin
$this->f3->reroute('/admin');
} else {
//sinon on rends le template de login
$siteOptions=$this->getSiteOptions();
$this->f3->set('siteOptionsJson',json_encode($siteOptions));
$this->f3->set('siteOptions',$siteOptions);
// methode de deconnexion
function logout()
{
if ($this->isAdmin()) {
//on vire l'user de la session
$this->f3->set('SESSION.user', "");
}
$this->f3->reroute('/');
}
echo (new Template())->render('login.htm');
}
}
// affichage de la page login
function error()
{
//sinon on rends le template de login
echo (new Template())->render('error.htm');
}
// affichage de la page signIn
function signIn() {
//si l'utilisateur est connecté comme admin
if ($this->isAdmin()) {
//on le renvoi direct sur la page admin
$this->f3->reroute('/admin');
} elseif (count($this->f3->get('admins'))!==0) {
$this->f3->reroute('/login');
} else {
//sinon on rends le template de login
$siteOptions=$this->getSiteOptions();
$this->f3->set('siteOptionsJson',json_encode($siteOptions));
$this->f3->set('siteOptions',$siteOptions);
//méthode d'autentification
function authenticate()
{
//on recupere le login/mot de passe passé en variables post
$username = $this->f3->get('POST.username');
$password = $this->f3->get('POST.password');
$adminNotFound = true;
//si le nom d'utilisateur coreespond a celui rentré en variable globale grace au fichier config( voir le constructeur de controller)
echo (new Template())->render('signIn.htm');
}
}
foreach ($this->f3->get('admins') as $admin) {
if ($username === $admin['user_id'] AND
//et si le passord est correct
password_verify($password, $admin['password'])) {
//on entre le nom d'utilisateur en session
$this->f3->set('SESSION.user', $admin['user_id']);
//et on reroute vers la page d'admin
$this->f3->reroute('/admin');
$adminNotFound = false;
}
}
if ($adminNotFound) {
//sinon, on transmet un message d'erreur et on renvoie vers la page de login
$this->f3->set('SESSION.loginPageMessage', "Nom d'utilisateur ou mot de passe invalide");
$this->f3->reroute('/login');
}
}
function postSignIn() {
if (count($this->f3->get('admins'))!==0) {
$this->f3->reroute('/login');
}
$username=$this->f3->get('POST.username');
$password=$this->f3->get('POST.password');
$repeatPassword=$this->f3->get('POST.repeatPassword');
if ($password!==$repeatPassword) {
$this->f3->set('SESSION.signInPageMessage',
"Les 2 mots de passe fournis ne sont pas identiques");
$this->f3->reroute('/signIn');
}
$siteConfig=json_decode(
file_get_contents($this->f3->get('SitesFolder').$this->siteName.
'/config.json'),
TRUE
);
$newAdmin=[
"user_id"=>$username,
"password"=>password_hash($password,PASSWORD_DEFAULT)
];
array_push($siteConfig['admins'],$newAdmin);
$contenu_json=json_encode($siteConfig);
// Ouverture du fichier
$fichier=fopen($this->f3->get('SitesFolder').$this->siteName.
'/config.json','w+');
// Ecriture dans le fichier
fwrite($fichier,$contenu_json);
// Fermeture du fichier
fclose($fichier);
//on entre le nom d'utilisateur en session
$this->f3->set('SESSION.user',$username);
//et on reroute vers la page d'admin
$this->f3->reroute('/admin');
}
// methode de deconnexion
function logout() {
$this->checkFirstConnexion();
if ($this->isAdmin()) {
//on vire l'user de la session
$this->f3->set('SESSION.user',"");
}
$this->f3->reroute('/');
}
// affichage de la page login
function error() {
//sinon on rends le template de login
echo (new Template())->render('error.htm');
}
//méthode d'autentification
function authenticate() {
$this->checkFirstConnexion();
//on recupere le login/mot de passe passé en variables post
$username=$this->f3->get('POST.username');
$password=$this->f3->get('POST.password');
$adminNotFound=TRUE;
//si le nom d'utilisateur coreespond a celui rentré en variable globale grace au fichier config( voir le constructeur de controller)
foreach ($this->f3->get('admins') as $admin) {
if ($username===$admin['user_id'] AND
//et si le passord est correct
password_verify($password,$admin['password'])) {
//on entre le nom d'utilisateur en session
$this->f3->set('SESSION.user',$admin['user_id']);
//et on reroute vers la page d'admin
$this->f3->reroute('/admin');
$adminNotFound=FALSE;
}
}
if ($adminNotFound) {
//sinon, on transmet un message d'erreur et on renvoie vers la page de login
$this->f3->set('SESSION.loginPageMessage',
"Nom d'utilisateur ou mot de passe invalide");
$this->f3->reroute('/login');
}
}
}
......@@ -220,4 +220,10 @@ class Controller
return '';
}
function checkFirstConnexion(){
if(count($this->f3->get('admins')) === 0){
$this->f3->reroute('/signIn');
}
}
}
......@@ -12,8 +12,10 @@ class ShowCaseController extends Controller
$this->f3->set('SESSION.CSRFTokenCreatedAt', $CSRFTokenCreatetedAt);
$this->f3->set('CSRFToken', $CSRFToken);
}
$this->checkFirstConnexion();
}
//affichage du contenu de la page pour les visiteurs
function showVisitor()
{
......
<form class="col s12 m6 offset-m3" method="POST" action="signIn" >
<div class="row" style="margin-top: 30px">
<div class="input-field col s12">
<input id="username" name="username" type="text" required class="validate grey-text text-darken-2" >
<label class="grey-text text-darken-2" for="username">Nom d'utilisateur</label>
</div>
<div class="input-field col s12">
<input id="password" name="password" type="password" required class="validate grey-text text-darken-2">
<label class="grey-text text-darken-2" for="password">Mot de passe</label>
</div>
<div class="input-field col s12">
<input id="repeatpassword" name="repeatPassword" type="password" required class="validate grey-text text-darken-2">
<label class="grey-text text-darken-2" for="password">Répéter le mot de passe</label>
</div>
</div>
<div class="row">
<div class="col s12 center-align">
<button type="submit" class="white-text btn-large frama-orange hover-frama-purple waves-effect waves-light btn" style="color: white !important;"><i style="color: white !important;" class="material-icons white-text right">verified_user</i>Créer mon Site</button>
</div>
</div>
</form>
\ No newline at end of file
<!DOCTYPE html>
<html lang="fr">
<include href="./base/includes/head.htm" />
<body>
{* ajout des boutons supérieurs si l'utilisateur est connecté en tant qu'admin*}
<include if="{{ @isAdmin }}" href="./base/includes/adminButtons.htm" />
<include href="./base/nav/nav.htm" />
<div class="row" style="min-height: 100vh; padding-top: 50px;">
<h5 class="grey-text text-darken-2 center-align" style="margin-top: 50px">Veuillez renseigner quelques informations pour initialiser votre site web</h5>
<check if="{{ @SESSION.signInPageMessage }}">
<div class="row">
<p class="frama-orange-text center-align">
{{@SESSION.signInPageMessage}}
</p>
</div>
</check>
<div class="col s12 m6 offset-m3">
<include href="./base/includes/signInForm.htm" />
</div>
</div>
<include href="./base/footer/footer.htm" />
<!-- Scripts-->
<include href="./base/includes/scripts.htm" />
</body>
</html>
\ No newline at end of file
{
"siteDomain": "framasite",
"siteLabel": "framasite",
"admins": [
{
"user_id": "admin",
"password": "$2y$10$YdZUMFyqbodXexkIzLB7VuGP6qq2KSMmyFn.IdmDcptRnVYd7PliS"
},
{
"user_id": "admin2",
"password": "$2y$10$YdZUMFyqbodXexkIzLB7VuGP6qq2KSMmyFn.IdmDcptRnVYd7PliS"
}
],
"siteLang": "fr_FR",
"siteDescription": "Site r\u00e9alis\u00e9 avec FramaSite",
"siteKeywords": "site, internet, CMS, framasite"
}
{"siteDomain":"framasite","siteLabel":"framasite","admins":[{"user_id":"Robin","password":"$2y$10$M3LuKKacU7AzqP9p6tIv9e7kzboQpvcnPa7FHsyR3KxWIgGCYVCPm"}],"siteLang":"fr_FR","siteDescription":"Site r\u00e9alis\u00e9 avec FramaSite","siteKeywords":"site, internet, CMS, framasite"}
\ No newline at end of file
{
"siteDomain": "framasite",
"siteLabel": "framasite",
"admins": [
{
"user_id": "admin",
"password": "$2y$10$YdZUMFyqbodXexkIzLB7VuGP6qq2KSMmyFn.IdmDcptRnVYd7PliS"
},
{
"user_id": "admin2",
"password": "$2y$10$YdZUMFyqbodXexkIzLB7VuGP6qq2KSMmyFn.IdmDcptRnVYd7PliS"
}
],
"siteLang": "fr_FR",
"siteDescription": "Site r\u00e9alis\u00e9 avec FramaSite",
"siteKeywords": "site, internet, CMS, framasite"
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment