This repository has been archived by the owner. It is now read-only.
Projet tutoré 2015/2016 - IUT Informatique Lyon 1, site de Bourg-en-Bresse
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
api
assets
config
tasks
views
.editorconfig
.gitignore
.htaccess
.sailsrc
Gruntfile.js
LICENSE
README.md
app.js
package.json

README.md

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