Skip to content
This repository has been archived by the owner on Apr 26, 2018. It is now read-only.
/ IUT-PTUT Public archive

Projet tutoré 2015/2016 - IUT Informatique Lyon 1, site de Bourg-en-Bresse

License

Notifications You must be signed in to change notification settings

Embraser01/IUT-PTUT

Repository files navigation

MindMap Collaboratif

Presentation

C'est une plate-forme d'édition collaborative de carte mentale avec une gestion avancée des droits. Le projet s'est déroulé de novembre 2015 à mars 2016. C'est le projet de fin d'étude fait par 3 étudiants de l'IUT Informatique Lyon 1 - Site Bourg-en-Bresse :

  • ALLIAUME Hugo
  • CHAZELLE Benjamin
  • FERNANDES Marc-Antoine

Mise en ligne

Dépendance

  • Node JS V4.4.0 LTS
  • MySQL
  • Navigateur récent
  • Chrome
  • Mozilla
  • Edge

Téléchargement et installation des dépendances

Cloner le repo avec Git :

git clone https://github.com/Embraser01/IUT-PTUT.git

Installer les dépendances

cd IUT-PTUT/
npm install

Configuration

Créer les trois fichiers suivant dans /config:

  • connections.js (gère la connexion à la base de données)
module.exports.connections = {

  mysql: {
    adapter: 'sails-mysql',
    host: 'localhost',
    user: 'XXXXXX',
    password: 'XXXXXX',
    database: 'XXXXXXX'
  },
};
  • local.js (gère le mode du serveur et le port, en production, les fichiers sont minifiés)
module.exports = {
    port: process.env.PORT || 8000, // Changer le port de connexion ici
    
    //environment: 'production'
    environment: 'development'

};
  • passport.js (Gère la connexion depuis l'intérieur et l'extérieur)
var passport = require('passport')
    , LocalStrategy = require('passport-local').Strategy
    , FacebookStrategy = require('passport-facebook').Strategy
    , GoogleStrategy = require('passport-google-oauth').OAuth2Strategy
    , TwitterStrategy = require('passport-twitter').Strategy;
var crypto = require('crypto');


function findByMail(m, fn) {

    User.findOne({
        mail: m
    }).exec(function (err, user) {
        // Error handling
        if (err) {
            return fn(null, null);
            // The User was found successfully!
        } else {
            return fn(null, user);
        }
    });
}

var verifyExtHandler = function (token, tokenSecret, profile, done) {
    process.nextTick(function () {

        User.findOne({ext_id: profile.id}, function (err, user) {
            if (user) {
                return done(null, user);
            } else {

                var data = {
                    provider: profile.provider,
                    ext_id: profile.id
                };

                if (profile.name) {
                    data.display_name = (profile.name.givenName || profile.displayName || '');
                    data.display_name += ' ' + (profile.name.familyName || '');

                } else {
                    data.display_name = profile.displayName || ('Guest from ' + data.provider);
                }

                if(profile.photos && profile.photos[0]) data.img_url = profile.photos[0].value;

                if(profile.provider == 'facebook') data.img_url = 'https://graph.facebook.com/' + profile.id + '/picture';

                User.create(data, function (err, user) {
                    return done(err, user);
                });
            }
        });
    });
};

var verifyHandler = function (mail, password, done) {

    // Find the user by username. If there is no user with the given
    // username, or the password is not correct, set the user to `false` to
    // indicate failure and set a flash message. Otherwise, return the
    // authenticated `user`.
    findByMail(mail, function (err, user) {
        if (err)
            return done(null, err);
        if (!user) {
            return done(null, false, {
                message: 'Unknown mail ' + mail
            });
        }
        // Changer le "N'importeQuoi..." ici et dans /api/models/User.js dans la fonction signup par une autre chaine de caractère
        if (user.password === crypto.createHash('sha256').update("N'importeQuoi..." + crypto.createHash('sha256').update(password).digest('hex')).digest('hex')) {

            return done(null, user, {
                message: 'Logged In Successfully'
            });
        } else {
            return done(null, false, {
                message: 'Invalid Password'
            });
        }
    });

};

// Passport session setup.
// To support persistent login sessions, Passport needs to be able to
// serialize users into and deserialize users out of the session. Typically,
// this will be as simple as storing the user ID when serializing, and finding
// the user by ID when deserializing.
passport.serializeUser(function (user, done) {
    user.password = null;
    done(null, user);
});

passport.deserializeUser(function (user, done) {
    done(null, user);
});

// Use the LocalStrategy within Passport.
// Strategies in passport require a `verify` function, which accept
// credentials (in this case, a username and password), and invoke a callback
// with a user object.
passport.use(new LocalStrategy({
    usernameField: 'mail',
    passwordField: 'password'
}, verifyHandler));

// Remplacer les 'XXXXX' par vos clés et 'yourhost.com' par votre nom de domaine
passport.use(new FacebookStrategy({
    clientID: "XXXXXX",
    clientSecret: "XXXXXX",
    callbackURL: "http://yourhost.com/auth/facebook"
}, verifyExtHandler));

passport.use(new GoogleStrategy({
    clientID: 'XXXXXX',
    clientSecret: 'XXXXXXXXXXXX',
    callbackURL: 'http://yourhost.com/auth/google'
}, verifyExtHandler));

passport.use(new TwitterStrategy({
    consumerKey: 'XXXXXX',
    consumerSecret: 'XXXXXX',
    callbackURL: 'http://yourhost.com/auth/twitter'
}, verifyExtHandler));

Forcer la construction de la base de données (changer la première fois et remettre par défaut ('safe') )

  • /config/model.js
migrate: 'drop'

Lancer le serveur

sails lift

Licence

Copyright (C) 2017 Hugo ALLIAUME Benjamin CHAZELLE Marc-Antoine FERNANDES