Tuesday, September 5, 2017

Back-end (server.js) using Node.js-Express.js



var express = require('express');
var morgan = require('morgan');
var path = require('path');
var Pool= require('pg').Pool;
var crypto=require('crypto');
var bodyParser=require('body-parser');
var session = require('express-session');

var app = express();
app.use(morgan('combined'));
app.use(bodyParser.json());

app.use(session(
    {   resave:true,
        saveUninitialized:false,
        rolling:true,
        secret: 'someRandomSecretValue',
        cookie: { maxAge: 1000 * 60 * 15}//session expires automatically in 15 mins
        
    } 
));        

var config={
    user:'internetadvancedsolutions',
    database:'internetadvancedsolutions',
    host:'db.imad.hasura-app.io',
    port:'5432',
    password:process.env.DB_PASSWORD
};
var pool= new Pool(config);


app.get('/ui/:fileName', function (req, res) {
  res.sendFile(path.join(__dirname, 'ui', req.params.fileName));
});


app.get('/', function (req, res) {
  res.sendFile(path.join(__dirname, 'ui', 'index.html'));
});


var counter=0;
app.get('/counter',function(req,res){
    counter=counter+1;
    res.send("Total visits   "+counter.toString());
});
//defining our hash function
function hash(input,salt){
     salt='random';
    var hashed=crypto.pbkdf2Sync(input,salt,10000,512,'sha512');
   // return ["pbkdf2", "10000", salt, hashed.toString('hex')].join('$');
   return(hashed.toString('hex'));
}


function createArticle(data,idd){
        //var article1=data.topic;
        //var ids =idd;
   // var htmlarticle=`<a href="/aa/archive/${ids}" class="fontcolor1">${article1}</a>`;
   var htmlarticle=`
    <a href="/aa/archive/36" class="fontcolor1">How to make a text blink in webpage</a><br>
     <a href="/aa/archive/23" class="fontcolor1">WAMP stack</a><br>
    <a href="/aa/archive/29" class="fontcolor1">How to program a microcontroller</a><br>
      <a href="/aa/archive/26" class="fontcolor1">Front-end development</a><br>
   <a href="/aa/archive/25" class="fontcolor1">google charts</a><br>
   <a href="/aa/archive/20" class="fontcolor1">Coding Tips</a><br>
   <a href="/aa/archive/19" class="fontcolor1">cyber means?</a><br>
   <a href="/aa/archive/18" class="fontcolor1">what is 404?</a><br>
   <a href="/aa/archive/21" class="fontcolor1">javaScript</a><br>
   <a href="/aa/archive/13" class="fontcolor1">what is html?</a><br>
   <a href="/aa/archive/14" class="fontcolor1">what is xml?</a><br>
   <a href="/aa/archive/15" class="fontcolor1">what is css?</a><br>
   <a href="/aa/archive/16" class="fontcolor1">java is language to program computers</a><br>
   `;
        return htmlarticle;
    }

function createTemplate(data1,data2){
    var title=data1.title;
    var heading=data1.heading;
    var username= data2;
   // var content=data.content;
    
    var htmltemplate=`
    <!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>${title}</title>
        <link href="/ui/style.css" rel="stylesheet" />
        <link rel="icon" href="/ui/SINGH_ASHUTOSH.jpg">
        <!--<meta name="viewport" content="width-device-width, initial-scale-1">-->
    </head>
    <body>
    <div class="container" >  
        <div id="logo" class="center" >
        <table><tr><td>
        <img src="ui/SINGH_ASHUTOSH.jpg" class="img-medium" align="center" ></td>
        <td><h2 id="h1" class="center text-big bold">Internet Advanced Solutions (IAS)</h2>
        <h3 id ="h3" class ="center text-medium bold">${heading}</h3></td></tr>
        </table>
        <hr>
        <pre class="fontcolor1">
        <a class ="hyperlinks" href="/">Home</a> | <span class="fontcolor1" align="right" id="t"></span>
        </pre>
    </div>
      
    <div id="main" class="center text-big bold">
        Learning by Sharing
    </div>
    <p></p>
    <div id="main" class="center bold">
        Knowledge increases by giving...teaching is the best way of learning !
    </div>
    <hr>
    <a class="hyperlinks1" href="/lo/logout" align="right">Logout</a><br>
    <hr>
        <div id="feedback"><br>
         <p id="user" class="fontcolor1">Dear ${username} Welcome to IAS forum !, please  post your article below</p>
        <p class="fontcolor1">Article Heading :<textarea id="topic" cols="100" rows="1" maxlength="100" autofocus required></textarea></p>
            <button id="submit" >Post</button>
            <p id="p1"></p>
            <table>
            <tr>
            <td colspan="3">     </td><td><textarea id="user_post" cols="75" rows="25" maxlength="1000" autofocus required></textarea><br>
            </td><td rowspan="2"><div id="h1" class="blink_me"> PUBLISHED ARTICLES<br>Go to these articles and ask questions/answer to questions/leave your remarks...<br>that's how we learn!</div><br><div id="content"></div><br></td>
            </tr>
            </table>
            </pre>
          </div>
      
    </div>
    <script>
    document.getElementById("t").innerHTML=Date();
    var button=document.getElementById("submit");
    var para=document.getElementById("p1");
            button.onclick=function()
            {
               var request = new XMLHttpRequest();
              
                request.onreadystatechange=function()
                {
                    if(request.readyState===XMLHttpRequest.DONE)
                    {
                        if(request.status===200)
                        {
                          para.innerHTML="Your article posted successfuly !... Will be publised soon... after approval ";

                        }
                        else
                        {
                          para.innerHTML="Oops ! submission failed ";
                        }
                    }
                }
              var topic1=document.getElementById("topic").value;
              var topic = topic1.trim();
              var user_post1=document.getElementById("user_post").value;
              var user_post = user_post1.trim();
              var username_post= "${username}";
              console.log(topic);
              console.log(user_post);
              console.log(username_post);
              request.open('POST','/pa/post',true);
              request.setRequestHeader('Content-Type', 'application/json');
              //request.send(JSON.stringify({user_post:user_post, topic:topic}));
              request.send(JSON.stringify({user_post:user_post, topic:topic, username_post:username_post}));
              para.innerHTML="Posting.............";
            };
           
             window.onload= function()
    {   
      var request1= new XMLHttpRequest();
   
      request1.onreadystatechange=function()
      {
        if(request1.readyState==4 && request1.status==200 )
        {
             var allarticles =request1.responseText;
             var div=document.getElementById("content");
             div.innerHTML=allarticles+'<br>';
           
        }
       
     };
   
    request1.open('GET',"/ga/publish",true);
    request1.send(null);
   };
  
           
    </script>
    </body>
</html>
`;
return htmltemplate;
}


function createTemplate1(data1){
    var title1=data1.title;
    var heading1=data1.subject;
    var content1=data1.duration;
               var content2=data1.start_date;
               var content3=data1.content;
               var price=data1.fees;
              
    var htmltemplate1=`
   
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>${title1}</title>
        <link href="/ui/style.css" rel="stylesheet" />
        <link rel="icon" href="/ui/SINGH_ASHUTOSH.jpg">
        <!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
    </head>
    <body>
    <div class="container" >  
        <div id="logo" class="center" >
        <table>
        <tr>
        <td>
        <img src="/ui/SINGH_ASHUTOSH.jpg" class="img-medium" align="center" ></td>
      
        <td><h2 id="h1" class="center text-big bold" align="center">Internet Advanced Solutions (IAS)</h2><h3 id ="h3" class ="center text-medium bold"> ${heading1}</h3></td>
        </tr>
        </table>
        <hr>
        <pre class="fontcolor1">
        | <a class ="hyperlinks" href="/">Home</a> | <a class ="hyperlinks" href="/db/6">IAS Code Library</a><hr>
        </pre>
       </div>
      
        <div id="main" class="center text-big bold">
        Learning by Sharing
        </div>
        <div id="content">
                              <table border="2">
                              <tr><td>Course & Duration :                 </td><td>
        ${content1}
                                                                          </td></tr>
                              <tr><td>Start Date :                        </td><td>
                              ${content2.toDateString()}
                                                                          </td></tr>
                  <tr><td>Fees Rs :                            </td><td>
                              ${price}
                                                                          </td></tr>
                                </table>
        </div>
        <div>
        <hr>
        ${content3}
        <hr>
        </div>
           <a class ="hyperlinks1" href="/">Home</a><hr>
        <div id="feedback" class="fontcolor1">
            <pre class="text-table">
            <table   colspan="4">
                <tr><td>My IT skills</td></tr>
                <tr><th>Languages            </th><th>Frameworks      </th><th>Front-end              </th><th>Back-end             </th></tr>
                 <tr><td>C/C++</td><td>Android Studio</td><td>HTML</td><td>Node.js</td></tr>
                  <tr><td>Swift</td><td>Xcode 8</td><td>CSS</td><td>Express.js</td></tr>
                   <tr><td>java</td><td>Eclipse IDE</td><td>javaScript</td><td>PHP</td></tr>
                   <tr><td>Python</td><td>Linux</td><td>Angular JS</td><td>SQL</td></tr>
                   <tr><td>Sketch</td><td>Arduino IDE</td><td>Bootstrap</td><td>JSP</td></tr>
                   <tr><td>Embedded C</td><td>XAMPP</td><td>Ajax</td><td>Servlets</td></tr>
            </table>
           </pre>
        </div>
    </body>
</html>
`;
return htmltemplate1;
}

function createPost(data1,data2,data3,data4,data5){
    var title1='IAS Forum';
    var heading1=data3;
    var content1=data1;
    var poster=data2;
    var commenter = data4;
               var post_id = data5;
              
    var htmltemplatePost=`
   
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>${title1}</title>
        <link href="/ui/style.css" rel="stylesheet" />
        <link rel="icon" href="/ui/SINGH_ASHUTOSH.jpg">
        <!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
    </head>
    <body>
    <div class="container" >  
        <div id="logo" class="center" >
        <table>
        <tr>
        <td>
        <img src="/ui/SINGH_ASHUTOSH.jpg" class="img-medium" align="center" ></td>
      
        <td><h2 id="h1" class="center text-big bold" align="center">Internet Advanced Solutions (IAS)</h2><h3 id ="h3" class ="center text-medium bold">Article: ${heading1}</h3></h6></td>
        </tr>
        </table>
        <hr>
        <pre class="fontcolor1">
        | <a class ="hyperlinks" href="/">Home</a> | <a class ="hyperlinks" href="/db/6">IAS Code Library</a> | <a class="hyperlinks" href="/lo/logout" align="right">Logout</a><hr>
        </pre>
       </div>
      
        <div id="main" class="center text-big bold">
        Learning by Sharing
        </div>
         <h2>This article is contributed by <span id="blue">${poster}</apan></h2>
                              <h4>
        ${content1}
                              </h4>
        </div>
        <hr>
        <div id="comments"><br>
       
        <p>Dear ${commenter} add your comments/remarks/queries to this article here</p>
           
            <table>
            <tr>
            <td colspan="3">     </td>
           
            <td><textarea id="user_comments" cols="75" rows="10" maxlength="1000"></textarea></td>
            </tr>
            </table>
           
            <button id="submit" >Submit</button>
            <div id="n">
            <p id="c"></p>
            <h3>Message Board</h3>
            <span id="d"></span>
            <hr>
            <div id="feedback" class="fontcolor1">
            <pre class="text-table">
            <table   colspan="4">
                <tr><td>My IT skills</td></tr>
                <tr><th>Languages            </th><th>Frameworks      </th><th>Front-end              </th><th>Back-end             </th></tr>
                 <tr><td>C/C++</td><td>Android Studio</td><td>HTML</td><td>Node.js</td></tr>
                  <tr><td>Swift</td><td>Xcode 8</td><td>CSS</td><td>Express.js</td></tr>
                   <tr><td>java</td><td>Eclipse IDE</td><td>javaScript</td><td>PHP</td></tr>
                   <tr><td>Python</td><td>Linux</td><td>Angular JS</td><td>SQL</td></tr>
                   <tr><td>Sketch</td><td>Arduino IDE</td><td>Bootstrap</td><td>JSP</td></tr>
                   <tr><td>Embedded C</td><td>XAMPP</td><td>Ajax</td><td>Servlets</td></tr>
            </table>
           </pre>
        </div>
       
        <script>
        var button=document.getElementById("submit");
        var para2=document.getElementById("c");
       
button.onclick=function(){

            
     var request = new XMLHttpRequest();
              
     request.onreadystatechange=function()
        {
                    if(request.readyState===XMLHttpRequest.DONE)
                    {
                        if(request.status===200)
                        {
                          var user_comment = document.getElementById("user_comments");
                         para2.innerHTML ='<span id="blue">'+ " ${commenter}"+'</span>'+'<br>' + user_comment.value;
                        }
                        else
                        {
                          para2.innerHTML="Oops ! submission failed ";
                        }
                    }
        }
              var user_comment1 = document.getElementById("user_comments").value;
              var user_comment = user_comment1.trim();
              var commenter_name= "${commenter}";
              var post_id_ = ${post_id};
              console.log(user_comment);
              console.log(commenter_name);
              console.log(post_id_);
              request.open('POST','/com/submit-comments',true);
              request.setRequestHeader('Content-Type', 'application/json');
              request.send(JSON.stringify({user_comment:user_comment, commenter_name:commenter_name, post_id_:post_id_}));
              para2.innerHTML="submitting your comments.............thanks" +"  ${commenter}";
};
      
        window.onload= function()
    {   
      var request1= new XMLHttpRequest();
   
      request1.onreadystatechange=function()
      {
        if(request1.readyState==4 && request1.status==200 )
        {
             var allarticles =JSON.parse(request1.responseText);
             var commentsList='<hr>';
             for(i=allarticles.length-1;i>=0;i--)
             {
                 commentsList += '<p id ="blue">'+ allarticles[i].user_name +'<br>'+ '<span id ="black">' + allarticles[i].user_comment+'</span>'+'</p>';
             }
             var para3=document.getElementById("d");
             para3.innerHTML=commentsList;
           // para3.innerHTML=allarticles;
           
        }
       
     };
     var post_id_ = ${post_id};
    request1.open('POST',"/co/get-comments",true);
    request1.setRequestHeader('Content-Type', 'application/json');
    request1.send(JSON.stringify({ post_id_:post_id_}));
   
   };
           
    </script>
   
       
    </body>
</html>
`;
return htmltemplatePost;
}


//function to create a new user

app.post('/rg/create-user',function(req,res){
   var usern1=req.body.username;
   var usern= usern1.trim();
    console.log(usern);
   var passw=req.body.password;
   console.log(passw);
   var salt=crypto.randomBytes(128).toString('hex');
   var dbString=hash(passw,salt);
   console.log(dbString);
 pool.query('INSERT INTO "users" (username, password) VALUES ($1, $2)',[usern,dbString] ,function (err, result) {
      if (err) {
          res.status(500).send(err.toString());
      } else {
          res.send('User successfully created: ' + usern);
      }
   });
}); 

app.post('/lg/login', function (req, res) {
   var username = req.body.username;
   var password = req.body.password;
  
   console.log(username);
   console.log(password);
   pool.query('SELECT * FROM "users" WHERE username = $1', [username], function (err, result) {
      if (err) {
          res.status(500).send(err.toString());
      } else {
          if (result.rows.length === 0) {
              res.status(403).send('username/password is invalid');
          } else {
              // Match the password
              console.log("username inputed ="+username);
             var dbString = result.rows[0].password;
             console.log("stored hashed password ="+dbString);
              //var salt = dbString.split('$')[2];
               var salt ='random';
              var hashedPassword = hash(password, salt);
              console.log(" hashed password ="+hashedPassword);
              if (hashedPassword === dbString) {
               
                // Set the session
               //req.session.auth = {userId: result.rows[0].id};
                req.session.auth = {userId: result.rows[0].username};
                // set cookie with a session id
                // internally, on the server side, it maps the session id to an //object
                 //{ auth: {userId }}
               
               res.send('credentials correct!');
               
              }
             else {
                res.status(403).send('username/password is invalid');
              }
          }
      }
   });
});

app.get('/:articleName',function(req,res){
   
        if (req.session && req.session.auth && req.session.auth.userId ) {
       // Load the user object
     
       pool.query('SELECT * FROM "article" WHERE id= $1', [req.params.articleName], function(err,result){
           if (err) {
              res.status(500).send(err.toString());
           } else {
                var username = req.session.auth.userId;
                console.log("session in username is" + username);
                var articleData=result.rows[0];
               // res.send(createTemplate(articleData));
                res.send(createTemplate(articleData,username));
             // res.send(result.rows[0].username);   
           }
       });
   } else {
       res.status(400).send('You are not logged in....Please go to Login page and sign-in');
   }
});

   
  
app.get('/db/:n', function(req,res){pool.query("SELECT * FROM course WHERE id=$1", [req.params.n],  function(err,result)
 {
    if(err)
    {
                 res.status(500).send(err.toString());
    }
     else
    {
           
                if(result.rows.length===0)
               { 
               res.status(404).send('Could not access database');
               }
               else
               {  
                var ta=result.rows[0];
                res.send(createTemplate1(ta));
               }
           
    }


});  
   
});


app.post('/pa/post',function(req,res){
   var text=req.body.user_post;
   var topic=req.body.topic;
   var posters_name= req.body.username_post;
    console.log(text);
    console.log(topic);
    console.log(posters_name);
   pool.query('INSERT INTO "posts" (user_post,topic,posters_name) VALUES ($1,$2,$3)',[text,topic,posters_name],function (err, result) {
      if (err) {
          res.status(500).send(err.toString());
      } else {
          res.send("posted");
      }
   });
}); 

app.get('/ga/publish', function(req,res){
   
   
           pool.query('SELECT topic FROM "posts" ', function (err, result)
           {
                if (err) {
                           res.status(500).send(err.toString());
                }
                else
                {
                   // console.log(result.rows.length);
                  var ar = result.rows[1];
                    var n =1;
                     res.send(createArticle(ar,n));
          
               /*  
                 for(var i=result.rows.length; i>=0;i--)
                  {  
                  var ar = result.rows[i];
                    var id = i;
                   res.send(createArticle(ar,id));
                    }
                   */ 
                 }
});
});


app.get('/aa/archive/:ids', function(req,res){
  if (req.session && req.session.auth && req.session.auth.userId )
{  
    var match_id= req.params.ids;
     pool.query('SELECT * FROM "posts" WHERE id=$1',[match_id], function (err, result) {
      if (err) {
          res.status(500).send(err.toString());
      }else{
     //  var ida = req.params.ids;
       //var art = result.rows[ida].user_post;
       //var art = JSON.stringify(result.rows[0].user_post);
       var art = result.rows[0].user_post;
       //var user= result.rows[ida].posters_name;
       var user= result.rows[0].posters_name;
       //var topic=result.rows[ida].topic;
       var topic=result.rows[0].topic;
       var commenter = req.session.auth.userId;
       //var post_id = result.rows[ida].id;
       var post_id = result.rows[0].id;
       res.send(createPost(art,user,topic,commenter,post_id));
       }
       });
}
else {
       res.status(400).send('You are not logged in....Please go to Login page and sign-in');
   }

});
var lout= `
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Thanks for Visiting</title>
        <link href="/ui/style.css" rel="stylesheet" />
        <link rel="icon" href="/ui/SINGH_ASHUTOSH.jpg">
        <!--<meta name="viewport" content="width-device-width, initial-scale-1">-->
    </head>
    <body>
    <div class="container" >  
        <div id="logo" class="center" >
        <table><tr><td>
        <img src="/ui/SINGH_ASHUTOSH.jpg" class="img-medium" align="center" ></td>
        <td><h2 id="h1" class="center text-big bold">Internet Advanced Solutions (IAS)</h2>
        <h3 id ="h3" class ="center text-medium bold"><pre>Logged out!  Thanks for visiting</pre></h3></td></tr>
        </table>
        <hr>
        <pre class="fontcolor1">
        <a class ="hyperlinks" href="/">Back to Home</a>           <a class ="hyperlinks" href="/db/9" align="center">Login again</a><hr>
        </pre>
    </div>
      
    <div id="main" class="center text-big bold">
        Learning by Sharing
    </div>
    <p></p>
    <div id="main" class="center bold">
        Knowledge increases by giving...teaching is the best way of learning !
    </div>
    <hr>
     </body>
</html>
`;
app.get('/lo/logout', function (req, res) {
   delete req.session.auth;
   res.send(lout);
 
});

app.post('/com/submit-comments',function(req,res){
   var comment=req.body.user_comment;
   var commenter=req.body.commenter_name;
   var post_id= req.body.post_id_;
    console.log(comment);
    console.log(commenter);
    console.log(post_id);
   pool.query('INSERT INTO "comments" (user_comment,user_name,post_id) VALUES ($1,$2,$3)',[comment,commenter,post_id],function (err, result) {
      if (err) {
          res.status(500).send(err.toString());
      } else {
          res.send("posted");
      }
   });
}); 

app.post('/co/get-comments', function (req, res) {
   // make a select request
   // return a response with the results
  // pool.query('SELECT * FROM comments', function (err, result) {
        var post_id= req.body.post_id_;
        //var post_id =25;
         console.log(post_id);
  pool.query("select * from comments where post_id = $1",[post_id], function (err, result) {
      if (err) {
          res.status(500).send(err.toString());
      } else {
                    res.send(JSON.stringify(result.rows));
      }
   });
});

var port = 8080;
app.listen(8080, function () {
  console.log(`IAS app listening on port ${port}!`);
});

No comments:

Post a Comment

Sacred Thought

5 May 2024 Hari Om Verse 50-51, chapter two:  In this chapter two Shree krishna explains a simple way of living. Free from desires and void ...