<repo_name>juusolonen/project<file_sep>/main.js
const express = require('express');
const app = express();

//oma moduuli
const admin = require('./models/admin');

const bodyParser = require('body-parser');

const session = require('express-session');

const crypto = require('crypto');

//oma moduuli
const mailer = require('./models/mailer');

const portti = 3113;



//sessio asetukset
app.use(session({ 
                secret : 'TamaOnkinTosiHankalaArvata1DLolOnpas111Hauskss7',
                resave :  false,
                saveUninitialized : false }))

//bodyparser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({'extended' : true}));

//ejs
app.set('views', './views');
app.set('view engine', 'ejs');


app.use(express.static('public'));


app.get('/', (req, res) => {

    res.render('index', {'kayttaja' : req.session.kayttaja});
})


app.get('/blogi', (req, res) => {

    admin.haeBlogitekstit((tekstit) => {

        res.render('blogi', {'kayttaja' : req.session.kayttaja, 'tekstit' : tekstit, 'virhe' : null});
    })

})


//tähän ei ole sivustolla suoraa linkkiä koska vain adminin käyttöön
app.get('/yllapito', (req, res) => { //olisi voinut nimetä varmaan myös loginiksi..
    if(!req.session.loggedIn) { //sessiomuuttujalla tarkistetaan onko kirjautuneena kukaan
        res.render('yllapito', {'virhe' : null});
    }else{
        res.redirect('/adminpage');
    }

})


app.post('/login', (req, res) => {
    
    //haetaan kannasta
    admin.haeKayttaja(req.body.tunnus, (tunnus) => {

        //annettu salasana hashiksi
        let hash = crypto.createHash("SHA512").update(req.body.salasana).digest("hex");

        if(tunnus[0]) { //mysql query palauttaa aina arrayn, vaikka tyhjän
                if (hash == tunnus[0].salasana) {
                    console.log("Salasana oikein")
                    req.session.loggedIn = true; //asetetaan kirjautuminen voimaan
                    req.session.kayttaja = req.body.tunnus; //kirjautuneen käyttäjän tunnus talteen
                    res.redirect('/adminpage');
                }else{
                    req.session.loggedIn = false;
                    res.render('yllapito', {'virhe' : 'Virheellinen käyttäjätunnus tai salasana'});
                }
        }else {
            res.render('yllapito', {'virhe' : 'Virheellinen käyttäjätunnus tai salasana'});
        }

    })

})


app.get('/logout', (req, res) => {
    req.session.loggedIn = false;
    req.session.kayttaja = null;

    res.redirect('/');
})


app.get('/lisaauusi', (req, res) => {
    if(!req.session.kayttaja) {
        res.redirect('/');
    } else {
        res.render('lisaauusi', {'kayttaja' : req.session.kayttaja, 'virhe' : null});
    }

})

app.post('/lisaauusi', (req, res) => {

    admin.lisaaBlogiTeksti(req.body, (virhe) => {
        if (virhe) {
            res.render('lisaauusi', {'kayttaja' : req.session.kayttaja, 'virhe' : virhe});
        } else {
            res.redirect('/blogi');
        }
    })

})


app.get('/adminpage', (req, res) => {
    if(!req.session.loggedIn) { //jos kukaan ei ole kirjautuneen, ohjataan login-ruutuun
        res.redirect('/yllapito');
    } else {
        res.render('adminpage', {'kayttaja' : req.session.kayttaja})
    }

})


app.get('/lomake', (req, res) => {
    res.render('lomake', {'kayttaja' : null, 'ilmoitus' : null})
})


app.post('/lomake', (req, res) => {
    mailer.lahetaEmail(req.body, (ilmoitus) => {
        res.render('lomake', {'kayttaja' : null, 'ilmoitus' : ilmoitus})
    })
})

app.listen(portti, () => {
    console.log(`Palvelin käynnissä portissa ${portti}`);
})<file_sep>/README.txt
Kotisivuprojektini vanha/alkuperäinen koodipohja. Nykyinen versio nähtävissä osoitteessa jsolo.net


Näin käynnistät tämän localhostissa:

SQL-dumppi löytyy /models/harkkasivu.sql
Luo kanta ja taulut dumpin avulla.
Avaa komentorivi projektikansioon -> node main -> enter

Toimii localhostissa portissa 3113

<file_sep>/models/mailer.js
const nodemailer = require('nodemailer');



let transporter = nodemailer.createTransport({
                        host        :   'smtp.office365.com',
                        port        :    587,
                        secure      :    false,
                        auth        :   {
                            user: "oma sähköposti", //muuta
                            pass: "<PASSWORD>" //muuta
                            },
                        tls         : {
                            rejectUnauthorized : false
                        },
                        requireTLS : true                   
                        },
                        {
                            from: "lähettäjä = oma sähköposti", //muuta
                            to: "vastaanottaja", //muuta
                            subject: "Yhteydenotto verkkosivulta",
                        })

module.exports = {
    'lahetaEmail' : (lomaketiedot, callback) => {

        let viesti = `
                ${lomaketiedot.nimi} </br>
                ${lomaketiedot.organisaatio} </br>
                ${lomaketiedot.email} </br>
                ${lomaketiedot.puh} </br> </br> </br>
                ${lomaketiedot.viesti}
                    `;


        var message = {
            text: viesti,
            html: viesti,
            replyTo: lomaketiedot.email,
            headers : {date: new Date()}
          };

        transporter.sendMail(message, (err) => {
            if (err) {
                console.log(err)
                callback('Viestiä ei saatu lähetettyä!')
            } else {
                callback('Viesti lähetetty onnistuneesti!')
            }
        });
         

    }
}<file_sep>/models/harkkasivu.sql
-- phpMyAdmin SQL Dump
-- version 4.8.4
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: 08.01.2020 klo 16:25
-- Palvelimen versio: 10.1.37-MariaDB
-- PHP Version: 7.3.1

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `harkkasivu`
--
CREATE DATABASE IF NOT EXISTS `harkkasivu` DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci;
USE `harkkasivu`;

-- --------------------------------------------------------

--
-- Rakenne taululle `blogi`
--

CREATE TABLE `blogi` (
  `id` int(11) NOT NULL,
  `otsikko` text COLLATE utf8_swedish_ci NOT NULL,
  `sisalto` text COLLATE utf8_swedish_ci NOT NULL,
  `pvm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci;

--
-- Vedos taulusta `blogi`
--

INSERT INTO `blogi` (`id`, `otsikko`, `sisalto`, `pvm`) VALUES
(1, 'Tämä onkin testipostaus!', 'Tähän vaikka Lorem ipsumia:\r\n\r\n\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum\r\nLorem ipsum', '2020-01-04 13:39:55'),
(2, 'Tämäpä onkin toinen samanmoinen', '\r\nHiiohoi ja hopsikopsis \r\nHiiohoi ja hopsikopsis \r\nHiiohoi ja hopsikopsis ', '2020-01-07 19:35:24'),
(19, 'asffasafsfas', '<p>asafafsfasfas</p>', '2020-01-07 20:50:48'),
(22, 'Juuso lähtee nukkumaan', '<ol><li><strong>Voihan&nbsp;</strong><em>Perjantai</em></li><li><em>Tai&nbsp;</em><strong>Torstai</strong></li><li><strong><em>KESKIVIIKKO</em></strong></li></ol>', '2020-01-07 20:55:43'),
;

-- --------------------------------------------------------

--
-- Rakenne taululle `tunnukset`
--

CREATE TABLE `tunnukset` (
  `id` int(11) NOT NULL,
  `tunnus` varchar(12) COLLATE utf8_swedish_ci NOT NULL,
  `salasana` text COLLATE utf8_swedish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci;

--
-- Vedos taulusta `tunnukset`
--

INSERT INTO `tunnukset` (`id`, `tunnus`, `salasana`) VALUES
(2, 'testitunnus', '0b006251c563ea80622891f5ba2a4cd90d3fcb40bd9937541876a1effbc49293fb36e742e27365b21026afcf66<KEY>');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `blogi`
--
ALTER TABLE `blogi`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `tunnukset`
--
ALTER TABLE `tunnukset`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `blogi`
--
ALTER TABLE `blogi`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27;

--
-- AUTO_INCREMENT for table `tunnukset`
--
ALTER TABLE `tunnukset`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
