├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── css │ └── style.css └── images │ └── error.jpeg ├── server.js ├── server └── routes │ ├── actions.js │ ├── basic.js │ ├── commenting.js │ ├── logreg.js │ ├── tags.js │ └── top.js ├── sql └── READY_SCRIPT.sql └── views ├── FAQ.hbs ├── about.hbs ├── categories.hbs ├── category.hbs ├── error.hbs ├── gif.hbs ├── index.hbs ├── index_gifs.hbs ├── index_stories.hbs ├── login.hbs ├── myaccount.hbs ├── partials ├── _comments.hbs ├── _footer.hbs ├── _generalcss.hbs ├── _generalscripts.hbs ├── _metadesc.hbs ├── _navbar.hbs └── _top.hbs ├── register.hbs ├── stories.hbs └── video.hbs /.gitignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | views/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # streaming-website 2 | 🎬 Streaming website, video tube, upload GIFs too 3 | 4 | ## Installation 5 | 6 | Download and install [NodeJS](https://nodejs.org/en/), [MySQL](https://www.mysql.com/). 7 | 8 | Run 9 | ```bash 10 | npm install 11 | ``` 12 | 13 | ## Usage 14 | 15 | First create database and tables, file "READY_SCRIPT.sql" or 16 | 17 | ```SQL 18 | CREATE DATABASE adult_website; 19 | 20 | CREATE TABLE IF NOT EXISTS videos_data ( 21 | video_id INT NOT NULL PRIMARY KEY, 22 | video_url VARCHAR(255) NOT NULL, 23 | video_title VARCHAR(255) NOT NULL, 24 | video_thumb VARCHAR(255) NOT NULL, 25 | video_desc VARCHAR(255) NOT NULL, 26 | video_tags VARCHAR(255) NOT NULL, 27 | users_id INT NOT NULL 28 | ) ENGINE=INNODB; 29 | 30 | CREATE TABLE IF NOT EXISTS gifs_data ( 31 | gif_id INT NOT NULL PRIMARY KEY, 32 | gif_desc VARCHAR(255), 33 | gif_url VARCHAR(255), 34 | users_id INT NOT NULL 35 | ) ENGINE=INNODB; 36 | 37 | CREATE TABLE IF NOT EXISTS users ( 38 | id INT NOT NULL PRIMARY KEY, 39 | username VARCHAR(255) NOT NULL, 40 | email VARCHAR(100) COLLATE utf8_unicode_ci NOT NULL, 41 | password VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL, 42 | verification_code VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL, 43 | flag VARCHAR(100) NOT NULL 44 | ) ENGINE=INNODB; 45 | 46 | CREATE TABLE IF NOT EXISTS porn_stories ( 47 | id INT NOT NULL PRIMARY KEY, 48 | title LONGTEXT NOT NULL, 49 | story LONGTEXT NOT NULL, 50 | users_id INT NOT NULL 51 | ) ENGINE=INNODB; 52 | 53 | CREATE TABLE IF NOT EXISTS comments ( 54 | post_id INT NOT NULL, 55 | users_id INT NOT NULL, 56 | comment LONGTEXT NOT NULL 57 | ) ENGINE=INNODB; 58 | ``` 59 | 60 | Add to .js files password for root/user MySQL server 61 | ```javascript 62 | let con = mysql.createConnection({ 63 | host: 'localhost', 64 | user: 'root', 65 | password: '', 66 | database: DATABASE 67 | }) 68 | ``` 69 | 70 | ## Comming updates 71 | 72 | * Login system upgrades, 73 | * Implementation CDN API, 74 | * Comming more soon 75 | 76 | ## Contact me for help 77 | 78 | If you need some help, some error catched, add me on Telegram @IvekIvek 79 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "streaming-website", 3 | "version": "1.0.0", 4 | "description": "Porn Streaminig Website", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "deploy": "node dist/server.js", 9 | "start": "node server.js" 10 | }, 11 | "engines": { 12 | "node": "8.x" 13 | }, 14 | "dependencies": { 15 | "axios": "^0.18.1", 16 | "bcrypt": "^5.0.0", 17 | "body-parser": "^1.18.3", 18 | "cheerio": "^1.0.0-rc.3", 19 | "cors": "^2.8.5", 20 | "dotenv": "^6.1.0", 21 | "express": "^4.17.1", 22 | "express-flash": "0.0.2", 23 | "express-session": "^1.17.1", 24 | "express-validator": "^6.6.1", 25 | "handlebars": "^4.0.11", 26 | "hbs": "^4.1.1", 27 | "ip": "^1.1.5", 28 | "lodash": "^4.17.10", 29 | "method-override": "^2.3.10", 30 | "mongodb": "^3.0.10", 31 | "mongoose": "^5.1.4", 32 | "multer": "^1.4.2", 33 | "mysql": "^2.18.1", 34 | "netlify-lambda": "^1.0.3", 35 | "nodemailer": "^6.4.13", 36 | "nodemon": "^2.0.4", 37 | "plyr": "^3.6.2", 38 | "pornhub-api": "0.0.1", 39 | "serverless-http": "^1.8.0" 40 | }, 41 | "devDependencies": { 42 | "gulp": "^4.0.0", 43 | "html-loader": "^0.5.5", 44 | "html-webpack-plugin": "^3.2.0", 45 | "webpack": "^4.25.1", 46 | "webpack-cli": "^3.1.2", 47 | "webpack-node-externals": "^1.7.2" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #121212; 3 | } 4 | .interier { 5 | color: rgb(166, 166, 166); 6 | } 7 | .navbar { 8 | background: #121212; 9 | } 10 | .card { 11 | background-color: #121212; 12 | } 13 | p { 14 | font-family: nexablack, sans-serif; 15 | } 16 | .for_h1 { 17 | clear: both; 18 | color: rgb(153, 51, 255); 19 | font-family: nexablack, sans-serif; 20 | font-size: 36px; 21 | line-height: 1.2; 22 | text-align: left; 23 | background: -webkit-gradient(linear left to right, rgb(153, 51, 255) 0%, rgb(49, 145, 255) 100%) repeat scroll 0% 0% padding-box text; 24 | } 25 | @media (max-width: 400px) { 26 | .btn.filter { 27 | padding-left: 1.1rem; 28 | padding-right: 1.1rem; 29 | } 30 | } 31 | .search { 32 | display: inline-block; 33 | position: relative; 34 | height: 35px; 35 | width: 35px; 36 | box-sizing: border-box; 37 | margin: 0px 8px 7px 0px; 38 | padding: 7px 9px 0px 9px; 39 | border: 3px solid #ffffff; 40 | border-radius: 25px; 41 | -webkit-transition: all 200ms ease; 42 | transition: all 200ms ease; 43 | cursor: text; 44 | } 45 | .search:after { 46 | content: ""; 47 | position: absolute; 48 | width: 3px; 49 | height: 20px; 50 | right: -5px; 51 | top: 21px; 52 | background: #ffffff; 53 | border-radius: 3px; 54 | -webkit-transform: rotate(-45deg); 55 | transform: rotate(-45deg); 56 | -webkit-transition: all 200ms ease; 57 | transition: all 200ms ease; 58 | } 59 | .search.active, 60 | .search:hover { 61 | width: 300px; 62 | margin-right: 0px; 63 | } 64 | .search.active:after, 65 | .search:hover:after { 66 | height: 0px; 67 | } 68 | .search input { 69 | width: 100%; 70 | border: none; 71 | box-sizing: border-box; 72 | font-family: Helvetica; 73 | font-size: 15px; 74 | color: #f1f1f1; 75 | background: transparent; 76 | outline-width: 0px; 77 | } 78 | .modal { 79 | display: none; 80 | position: fixed; 81 | z-index: 1; 82 | left: 0; 83 | top: 0; 84 | width: 100%; 85 | height: 100%; 86 | overflow: auto; 87 | background-color: #121212; 88 | background-color: #121212; 89 | padding-top: 60px; 90 | } 91 | .modal-content { 92 | background-color: #121212; 93 | margin: 5% auto 15% auto; 94 | width: 80%; 95 | } 96 | .close { 97 | position: absolute; 98 | right: 25px; 99 | top: 0; 100 | color: #FFF; 101 | font-size: 35px; 102 | font-weight: bold; 103 | } 104 | .close:hover, 105 | .close:focus { 106 | color: red; 107 | cursor: pointer; 108 | } 109 | @-webkit-keyframes animatezoom { 110 | from {-webkit-transform: scale(0)} 111 | to {-webkit-transform: scale(1)} 112 | } 113 | @keyframes animatezoom { 114 | from {transform: scale(0)} 115 | to {transform: scale(1)} 116 | } 117 | @media screen and (max-width: 300px) { 118 | span.psw { 119 | display: block; 120 | float: none; 121 | } 122 | .cancelbtn { 123 | width: 100%; 124 | } 125 | } 126 | .navbar-toggler{ 127 | height: 34px; 128 | background-color: #007bff; 129 | border:none; 130 | position: relative; 131 | color: #f1f1f1; 132 | } 133 | .navbar-toggler .line{ 134 | width: 100%; 135 | float: left; 136 | height: 2px; 137 | background-color: #007bff; 138 | margin-bottom: 5px; 139 | position: relative; 140 | color: #f1f1f1; 141 | } 142 | .video-js-responsive-container.vjs-hd { 143 | padding-top: 56.25%; 144 | } 145 | .video-js-responsive-container.vjs-sd { 146 | padding-top: 75%; 147 | } 148 | .video-js-responsive-container { 149 | width: 100%; 150 | position: relative; 151 | } 152 | .video-js-responsive-container .video-js { 153 | height: 100% !important; 154 | width: 100% !important; 155 | position: absolute; 156 | top: 0; 157 | left: 0; 158 | } 159 | .navbar-laravel { 160 | box-shadow: 0 2px 4px rgba(0,0,0,.04); 161 | } 162 | .navbar-brand , .nav-link, .my-form, .login-form { 163 | font-family: Raleway, sans-serif; 164 | } 165 | .my-form{ 166 | padding-top: 1.5rem; 167 | padding-bottom: 1.5rem; 168 | } 169 | .my-form .row { 170 | margin-left: 0; 171 | margin-right: 0; 172 | } 173 | .login-form { 174 | padding-top: 1.5rem; 175 | padding-bottom: 1.5rem; 176 | } 177 | .login-form .row { 178 | margin-left: 0; 179 | margin-right: 0; 180 | } 181 | #upvote { width: 0; height: 0; 182 | border-color: orangered; 183 | border-left: 8px solid transparent; 184 | border-right: 8px solid transparent; 185 | border-bottom: 8px solid orangered; 186 | } 187 | #upvote:after { 188 | width: 5px; 189 | height: 6px; 190 | background-color: orangered; 191 | content: ''; 192 | position:absolute; 193 | margin-top: 8px; 194 | margin-left: -3px; 195 | } 196 | #downvote { 197 | width: 0; 198 | height: 0; 199 | border-left: 8px solid transparent; 200 | border-right: 8px solid transparent; 201 | border-top: 8px solid #CCCCFF; 202 | margin-left: -1px; 203 | } 204 | #downvote:after { 205 | width: 5px; 206 | height: 6px; 207 | background-color: #CCCCFF; 208 | content: ''; 209 | position:absolute; 210 | margin-left: -2px; 211 | margin-top: -14px; 212 | } 213 | .user_name { 214 | font-size:14px; 215 | font-weight: bold; 216 | } 217 | .comments-list .media { 218 | border-bottom: 1px dotted #ccc; 219 | } 220 | .pull-right { 221 | float: right; 222 | } 223 | #dialog-window { 224 | height: 200px; 225 | } 226 | #scrollable-content { 227 | height: 180px; 228 | overflow: auto; 229 | } 230 | #footer { 231 | height: 20px; 232 | background-color: green; 233 | } 234 | div::-webkit-scrollbar { 235 | width: 12px; 236 | } 237 | div::-webkit-scrollbar-track { 238 | background: #121212; 239 | } 240 | div::-webkit-scrollbar-thumb { 241 | background-color: #f1f1f1; 242 | border-radius: 20px; 243 | border: 3px solid #353434; 244 | } -------------------------------------------------------------------------------- /public/images/error.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/car-mrazomor/streaming-website/5d7a53b746023a7feb4f6d71759af9f3dde2d7c3/public/images/error.jpeg -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const hbs = require('hbs'); 3 | const bodyParser = require('body-parser'); 4 | const multer = require('multer') 5 | const session = require('express-session') 6 | const flash = require('express-flash') 7 | 8 | const upload = multer() 9 | 10 | const methodOverride = require('method-override'); 11 | const basics = require('./server/routes/basic'); 12 | const actions = require('./server/routes/actions') 13 | const tags = require('./server/routes/tags') 14 | const logreg = require('./server/routes/logreg') 15 | const commenting = require('./server/routes/commenting') 16 | 17 | const app = express(); 18 | const port = process.env.PORT || 3000; 19 | 20 | app.use(bodyParser.json()); 21 | app.use(express.json()); 22 | app.use(bodyParser.urlencoded({ extended: true })); 23 | 24 | app.use(upload.array()); 25 | app.use(express.static('public')); 26 | 27 | app.use(methodOverride('_method')); 28 | 29 | app.set('view engine', 'hbs'); 30 | app.use(express.static(__dirname + '/public')); 31 | hbs.registerPartials(__dirname + '/views/partials'); 32 | 33 | app.use(flash()); 34 | app.use(session({ 35 | secret: '123456cat', 36 | resave: false, 37 | saveUninitialized: true, 38 | cookie: {maxAge: 600000} 39 | })) 40 | 41 | app.use('/', basics); 42 | app.use('/', actions) 43 | app.use('/', tags) 44 | app.use('/', logreg) 45 | app.use('/', commenting) 46 | 47 | app.use((req, res, nex) => { 48 | res.status(404).render('error.hbs', {error_code: '404', error_message: 'Page not found!'}) 49 | }) 50 | 51 | app.listen(port, () => { 52 | console.log(`Server running on ${port}`); 53 | }); -------------------------------------------------------------------------------- /server/routes/actions.js: -------------------------------------------------------------------------------- 1 | const mysql = require('mysql') 2 | const cheerio = require('cheerio') 3 | const axios = require('axios') 4 | 5 | const express = require('express') 6 | let router = express.Router() 7 | 8 | let DATABASE = 'adult_website' 9 | 10 | router.post('/myaccount', (req, res) => { 11 | let userId = req.session.name 12 | 13 | let con = mysql.createConnection({ 14 | host: 'localhost', 15 | user: 'root', 16 | password: '', 17 | database: DATABASE 18 | }) 19 | 20 | if (req.body.select_db == 'videos_data') { 21 | con.query('SELECT * FROM videos_data;', (err, respond) => { if (err) { /* pass */ } 22 | if (respond.length <= 0) { 23 | let latestid = Math.floor(Math.random() * 99999999) 24 | 25 | let sqlQuery = `INSERT INTO videos_data VALUES (${latestid+1}, "${req.body.url_inpt.replace('\\', '')}", "${req.body.title.replace('\\', '')}", "${req.body.thumb.replace('\\', '')}", "${req.body.description.replace('\\', '')}", "${req.body.tags.replace('\\', '')}", ${userId});` 26 | con.query(sqlQuery, (err, respond) => { 27 | if (err) { res.send(err) } 28 | else { res.redirect(`/video/${latestid+1}`) } 29 | }) 30 | } 31 | else { 32 | let latestid = respond[respond.length-1].video_id 33 | 34 | let sqlQuery = `INSERT INTO videos_data VALUES (${latestid+1}, "${req.body.url_inpt.replace('\\', '')}", "${req.body.title.replace('\\', '')}", "${req.body.thumb.replace('\\', '')}", "${req.body.description.replace('\\', '')}", "${req.body.tags.replace('\\', '')}", ${userId});` 35 | con.query(sqlQuery, (err, respond) => { 36 | if (err) { res.send(err) } 37 | else { res.redirect(`/video/${latestid+1}`) } 38 | }) 39 | } 40 | }) 41 | } 42 | if (req.body.select_db == 'gifs_data') { 43 | con.query('SELECT * FROM gifs_data;', (err, respond) => { if (err) { /* pass */ } 44 | if (respond.length <= 0) { 45 | let latestid = Math.floor(Math.random() * 99999999) 46 | 47 | let sqlQuery = `INSERT INTO gifs_data VALUES (${latestid+1}, "${req.body.title.replace('\\', '')}", "${req.body.url_inpt.replace('\\', '')}", ${userId});` 48 | con.query(sqlQuery, (err, respond) => { 49 | if (err) { res.send(err) } 50 | else { res.redirect(`/gif${latestid+1}`) } 51 | }) 52 | } 53 | else { 54 | let latestid = respond[respond.length-1].gif_id 55 | 56 | let sqlQuery = `INSERT INTO gifs_data VALUES (${latestid+1}, "${req.body.title.replace('\\', '')}", "${req.body.url_inpt.replace('\\', '')}", ${userId});` 57 | con.query(sqlQuery, (err, respond) => { 58 | if (err) { res.send(err) } 59 | else { res.redirect(`/gif${latestid+1}`) } 60 | }) 61 | } 62 | }) 63 | } 64 | if (req.body.select_db == 'porn_stories') { 65 | con.query('SELECT * FROM porn_stories;', (err, respond) => { if (err) { /* pass */ } 66 | if (respond.length <= 0) { 67 | let latestid = Math.floor(Math.random() * 99999999) 68 | 69 | let sqlQuery = `INSERT INTO porn_stories VALUES (${latestid+1}, "${req.body.title.replace('\\', '')}", "${req.body.description.replace('\\', '')}", ${userId});` 70 | con.query(sqlQuery, (err, respond) => { 71 | if (err) { res.send(err) } 72 | else { res.redirect(`/stories${latestid+1}`) } 73 | }) 74 | } 75 | else { 76 | let latestid = respond[respond.length-1].id 77 | 78 | let sqlQuery = `INSERT INTO porn_stories VALUES (${latestid+1}, "${req.body.title.replace('\\', '')}", "${req.body.description.replace('\\', '')}", ${userId});` 79 | con.query(sqlQuery, (err, respond) => { 80 | if (err) { res.send(err) } 81 | else { res.redirect(`/stories${latestid+1}`) } 82 | }) 83 | } 84 | }) 85 | } 86 | }) 87 | 88 | module.exports = router; -------------------------------------------------------------------------------- /server/routes/basic.js: -------------------------------------------------------------------------------- 1 | const mysql = require('mysql') 2 | 3 | const express = require('express') 4 | let router = express.Router() 5 | 6 | const DATABASE = 'adult_website' 7 | 8 | router.get('/about', (req, res) => { 9 | res.render('about.hbs') 10 | }) 11 | 12 | router.get('/FAQ', (req, res) => { 13 | res.render('FAQ.hbs') 14 | }) 15 | 16 | router.get('/', (req, respond) => { 17 | let find = req.query.search 18 | let page = req.query.p 19 | if (!page || page===0) page=1 20 | 21 | if (find) { sqlQuery = `SELECT * FROM videos_data WHERE video_tags LIKE "%${find}%" OR video_title LIKE "%${find}%";` } 22 | else { sqlQuery = 'SELECT * FROM videos_data;' } 23 | 24 | let arrayOfData = [] 25 | let arrayTemp = [] 26 | 27 | let con = mysql.createConnection({ 28 | host: 'localhost', 29 | user: 'root', 30 | password: '', 31 | database: DATABASE 32 | }) 33 | 34 | con.query(sqlQuery, (err, res) => { 35 | if (err) { console.log('selection error') } 36 | else { 37 | if (!find) { 38 | for (let i=res.length-1; i>=0; i--) { 39 | arrayOfData.push({ 40 | id: res[i].video_id, 41 | url: res[i].video_url, 42 | thumb: res[i].video_thumb, 43 | desc: res[i].video_desc, 44 | tags: res[i].video_tags, 45 | title: res[i].video_title 46 | }) 47 | } 48 | } else { 49 | for (let i=res.length-1; i>=0; i--) { 50 | arrayOfData.push({ 51 | id: res[i].video_id, 52 | url: res[i].video_url, 53 | thumb: res[i].video_thumb, 54 | desc: res[i].video_desc, 55 | tags: res[i].video_tags, 56 | title: res[i].video_title 57 | }) 58 | } 59 | } 60 | } 61 | let k=0, z=20 62 | for (let i=0; i<=arrayOfData.length/20; i++) { arrayTemp.push(arrayOfData.slice(k,z)), k+=20,z+=20 } 63 | const prev = `?p=${page-1}` 64 | const next = `?p=${parseInt(page)+1}` 65 | respond.render('index.hbs', {arrayOfData: arrayTemp[page-1], prev: prev, next: next}) 66 | }) 67 | 68 | con.commit() 69 | con.end() 70 | }) 71 | 72 | router.get('/video/:id', (req, respond) => { 73 | let id = req.params.id 74 | let con = mysql.createConnection({ 75 | host: 'localhost', 76 | user: 'root', 77 | password: '', 78 | database: DATABASE, 79 | multipleStatements: true 80 | }) 81 | 82 | let arrayOfData = [] 83 | let arrayOfComments = [] 84 | let tagsData = [] 85 | let size = [] 86 | con.query(`SELECT * FROM videos_data WHERE video_id=${id}; SELECT * FROM videos_data WHERE LOCATE((SELECT SUBSTRING_INDEX(video_tags, ",", 1) FROM videos_data WHERE video_id=${id}), video_tags) > 0;`, (err, res) => { 87 | if (err) { console.log('selection error') } 88 | else { 89 | con.query(`SELECT * FROM comments WHERE post_id=${id};`, (err, res) => { 90 | if (err) {console.log(err)} 91 | if (res.length <= 0) { 92 | arrayOfComments.push({ 93 | comment: 'No comments', 94 | }) 95 | } else { 96 | for (let i=res.length-1; i>=0; i--){ 97 | arrayOfComments.push({ 98 | users_id: res[i].users_id, 99 | comment: res[i].comment, 100 | size: res.length 101 | }) 102 | } 103 | } 104 | }) 105 | arrayOfData.push({ 106 | id: res[0][0].video_id, url: res[0][0].video_url, thumb: res[0][0].video_thumb, desc: res[0][0].video_desc, tags: res[0][0].video_tags, title: res[0][0].video_title, user_id: res[0][0].users_id 107 | }) 108 | 109 | for (let i=0; i { 124 | let find = req.query.search 125 | let page = req.query.p 126 | 127 | if (!page || page===0) page=1 128 | 129 | if (find) { sqlQuery = `SELECT * FROM porn_stories WHERE title LIKE "%${find}%";` } 130 | else { sqlQuery = 'SELECT * FROM porn_stories;' } 131 | 132 | let arrayOfData = [] 133 | let arrayTemp = [] 134 | 135 | let con = mysql.createConnection({ 136 | host: 'localhost', 137 | user: 'root', 138 | password: '', 139 | database: DATABASE 140 | }) 141 | 142 | con.query(sqlQuery, (err, res) => { 143 | if (err) { /* pass */ } 144 | else { 145 | for (let i=res.length-1; i>=0; i--) { 146 | let random = Math.floor(Math.random() * res.length) 147 | arrayOfData.push({ 148 | id: res[i].id, 149 | title: res[i].title, 150 | story: res[i].story 151 | }) 152 | } 153 | } 154 | let k=0, z=20 155 | for (let i=0; i<=arrayOfData.length/20; i++) { arrayTemp.push(arrayOfData.slice(k,z)), k+=20,z+=20 } 156 | const prev = `?p=${page-1}` 157 | const next = `?p=${parseInt(page)+1}` 158 | respond.render('index_stories.hbs', {arrayOfData: arrayTemp[page-1], prev: prev, next: next}) 159 | }) 160 | 161 | con.commit() 162 | con.end() 163 | }) 164 | 165 | router.get('/stories:id', (req, respond) => { 166 | let id = req.params.id 167 | let con = mysql.createConnection({ 168 | host: 'localhost', 169 | user: 'root', 170 | password: '', 171 | database: DATABASE 172 | }) 173 | 174 | let arrayOfData = [] 175 | con.query(`SELECT * FROM porn_stories WHERE id LIKE "${id}"`, (err, res) => { 176 | if (err) { console.log('selection error') } 177 | else { 178 | for (let i=0; i { 191 | let find = req.query.search 192 | let page = req.query.p 193 | if (!page || page===0) page=1 194 | 195 | if (find) { sqlQuery = `SELECT * FROM gifs_data WHERE gif_desc LIKE '%${find}%';` } 196 | else { sqlQuery = 'SELECT * FROM gifs_data;' } 197 | 198 | let con = mysql.createConnection({ 199 | host: 'localhost', 200 | user: 'root', 201 | password: '', 202 | database: DATABASE 203 | }) 204 | 205 | let arrayOfData = [] 206 | let arrayTemp = [] 207 | con.query(sqlQuery, (err, res) => { 208 | if (err) { console.log('selection error') } 209 | else { 210 | for (let i=res.length-1; i>=0; i--) { 211 | let random = Math.floor(Math.random() * res.length) 212 | arrayOfData.push({ 213 | id: res[i].gif_id, 214 | url: res[i].gif_url, 215 | desc: res[i].gif_desc 216 | }) 217 | } 218 | } 219 | let k=0, z=20 220 | for (let i=0; i<=arrayOfData.length/20; i++) { arrayTemp.push(arrayOfData.slice(k,z)), k+=20,z+=20 } 221 | const prev = `?p=${page-1}` 222 | const next = `?p=${parseInt(page)+1}` 223 | respond.render('index_gifs.hbs', {arrayOfData: arrayTemp[page-1], prev: prev, next: next}) 224 | }) 225 | 226 | con.commit() 227 | con.end() 228 | }) 229 | 230 | router.get('/gif:id', (req, respond) => { 231 | const id = req.params.id 232 | let con = mysql.createConnection({ 233 | host: 'localhost', 234 | user: 'root', 235 | password: '', 236 | database: DATABASE 237 | }) 238 | 239 | let arrayOfData = [] 240 | con.query(`SELECT * FROM gifs_data WHERE gif_id LIKE "${id}"`, (err, res) => { 241 | if (err) { console.log('selection error') } 242 | else { 243 | for (let i=0; i { 9 | let con = mysql.createConnection({ 10 | host: 'localhost', 11 | user: 'root', 12 | password: '', 13 | database: DATABASE 14 | }) 15 | 16 | let userid = req.query.userid 17 | let postid = req.query.postid 18 | 19 | if (req.session.loggedIn == true) { 20 | con.query(`INSERT INTO comments VALUES (${postid}, ${userid}, "${req.body.comment_box}");`, (err, respond) => { 21 | if (err) { console.log(err) } 22 | else { res.redirect(`/video/${postid}`) } 23 | }) 24 | } else { 25 | res.render('login.hbs', {message: 'Login to be able to comment!'}) 26 | } 27 | }) 28 | 29 | router.get('/comments', (req, res) => { 30 | let con = mysql.createConnection({ 31 | host: 'localhost', 32 | user: 'root', 33 | password: '', 34 | database: DATABASE 35 | }) 36 | 37 | let arrayOfComments = [] 38 | con.query(`SELECT * FROM comments WHERE post_id=${postid};`, (err, respond) => { 39 | if (err) {console.log(err)} 40 | if (respond.length <= 0) { 41 | arrayOfComments.push({ 42 | comment: 'No comments' 43 | }) 44 | } else { 45 | for (let i=respond.length-1; i>=0; i--){ 46 | arrayOfComments.push({ 47 | users_id: respond[i].users_id, 48 | comment: respond[i].comment 49 | }) 50 | } 51 | res.render('video.hbs', {arrayOfComments}) 52 | } 53 | }) 54 | }) 55 | 56 | module.exports = router -------------------------------------------------------------------------------- /server/routes/logreg.js: -------------------------------------------------------------------------------- 1 | const mysql = require('mysql') 2 | const nodemailer = require('nodemailer') 3 | 4 | const express = require('express') 5 | let router = express.Router() 6 | 7 | const DATABASE = 'adult_website' 8 | 9 | function maketoken() { 10 | var res = '' 11 | var char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' 12 | var charLen = char.length 13 | for ( var i = 0; i < 15; i++ ) { res += char.charAt(Math.floor(Math.random() * charLen)) } 14 | return res 15 | } 16 | 17 | router.get('/login', (req, res) => { 18 | res.render('login.hbs') 19 | }) 20 | 21 | router.post('/auth-login', (req, respond) => { 22 | let emailLog = req.body.emailLog 23 | let passwordLog = req.body.passwordLog 24 | 25 | let con = mysql.createConnection({ 26 | host: 'localhost', 27 | user: 'root', 28 | password: '', 29 | database: DATABASE 30 | }) 31 | 32 | let sqlQuery = `SELECT * FROM users WHERE email="${emailLog}" AND password = "${passwordLog}";` 33 | con.query(sqlQuery, (err, res) => { 34 | if (err) { /* pass */ } 35 | if (res.length <= 0) { respond.render('login.hbs', {message: 'You need to create account!'}) } 36 | else { 37 | if (res[0].flag == 'undefined') { respond.render('login.hbs') } 38 | if (res[0].flag == 'unactive') { 39 | respond.render('login.hbs', {message: 'Please verify account so you can use it!'}) 40 | } 41 | if (res[0].flag == 'active') { 42 | req.session.loggedIn = true 43 | req.session.name = res[0].id 44 | let uri = res[0].id 45 | respond.redirect('/myaccount?userId=' + uri) 46 | } 47 | } 48 | }) 49 | }) 50 | 51 | router.get('/register', (req, res) => { 52 | res.render('register.hbs') 53 | }) 54 | 55 | router.post('/post-register', (req, respond) => { 56 | let emailReg = req.body.emailReg 57 | let passwordReg = req.body.passwordReg 58 | 59 | let con = mysql.createConnection({ 60 | host: 'localhost', 61 | user: 'root', 62 | password: '', 63 | database: DATABASE 64 | }) 65 | 66 | let verification_code = maketoken() 67 | let randomNum = Math.floor(Math.random() * 999999999) 68 | 69 | if (!emailReg.includes('@')) { 70 | respond.render('register.hbs', {message: 'Enter valid email!'}) 71 | } else { 72 | let sqlQuery = `INSERT INTO users VALUES (${randomNum}, "${emailReg}", "${emailReg}", "${passwordReg}", "${verification_code}", "unactive");` 73 | con.query(sqlQuery, (err, res) => { 74 | if (err) { /* pass */ } 75 | else { 76 | let tp = nodemailer.createTransport({ 77 | host: '', 78 | auth: { 79 | user: '', 80 | pass: '' 81 | } 82 | }) 83 | 84 | let mailOtp = { 85 | from: '', 86 | to: emailReg, 87 | subject: '', 88 | text: `Thanks for signing up!\nPlease go to link to verify your account localhost:3000/verify?id=${randomNum}&vercode=${verification_code}\nDo not reply to this email!` 89 | } 90 | tp.sendMail(mailOtp, (error, info) => { 91 | if (error) { respond.render('register.hbs', {message: error}) } 92 | else{ respond.render('login.hbs', {message: 'You have successfully signup!'}) } 93 | }) 94 | } 95 | }) 96 | } 97 | }) 98 | 99 | router.get('/verify', (req, res) => { 100 | let id = req.query.id 101 | let vercode = req.query.vercode 102 | 103 | let con = mysql.createConnection({ 104 | host: 'localhost', 105 | user: 'root', 106 | password:'', 107 | database: DATABASE 108 | }) 109 | 110 | let sqlQuery = `UPDATE users SET flag="active" WHERE id=${id} AND verification_code="${vercode}";` 111 | 112 | con.query(sqlQuery, (err, respond) => { 113 | if (err) { /* pass */ } 114 | else { 115 | res.render('login.hbs', {message: 'Verified! Now you can login.'}) 116 | } 117 | }) 118 | }) 119 | 120 | router.get('/myaccount', (req, respond) => { 121 | let id = req.session.name 122 | let page = req.query.p 123 | if (!page || page===0) page=1 124 | 125 | let con = mysql.createConnection({ 126 | host: 'localhost', 127 | user: 'root', 128 | password: '', 129 | database: DATABASE 130 | }) 131 | 132 | let arrayOfData = [] 133 | let arrayTemp = [] 134 | let email = '' 135 | let user_id = '' 136 | 137 | let sqlQuery = `SELECT * FROM users JOIN videos_data ON users.id=videos_data.users_id WHERE videos_data.users_id=${id};` 138 | if (req.session.loggedIn) { 139 | con.query(sqlQuery, (err, res) => { 140 | if (err) { /* pass */ } 141 | if (res.length <= 0) { 142 | user_id = id 143 | } else { 144 | for (let i=0; i { 167 | req.session.destroy() 168 | res.redirect('/') 169 | }) 170 | 171 | module.exports = router -------------------------------------------------------------------------------- /server/routes/tags.js: -------------------------------------------------------------------------------- 1 | const mysql = require('mysql') 2 | const express = require('express') 3 | let router = express.Router() 4 | 5 | const DATABASE = 'adult_website' 6 | 7 | router.get('/categories', (req, res) => { 8 | res.render('categories.hbs') 9 | }) 10 | 11 | router.get('/categories/:tag', (req, respond) => { 12 | let tag = req.params.tag 13 | let page = req.query.p 14 | if (!page || page===0) page=1 15 | 16 | let con = mysql.createConnection({ 17 | host: 'localhost', 18 | user: 'root', 19 | password: '', 20 | database: DATABASE 21 | }) 22 | 23 | let TAG = tag 24 | tag = tag.replace(' ', '%') 25 | 26 | let arrayOfData = [] 27 | let arrayTemp = [] 28 | con.query(`SELECT * FROM videos_data WHERE video_tags LIKE "%${tag}%";`, (err, res) => { 29 | if (err) { console.log(err) } 30 | else { 31 | for (let i=res.length-1; i>=0; i--) { 32 | arrayOfData.push({ 33 | id: res[i].video_id, 34 | url: res[i].video_url, 35 | thumb: res[i].video_thumb, 36 | desc: res[i].video_desc, 37 | tags: res[i].video_tags, 38 | title: res[i].video_title 39 | }) 40 | } 41 | } 42 | let k=0, z=20 43 | for (let i=0; i<=arrayOfData.length/20; i++) { arrayTemp.push(arrayOfData.slice(k,z)), k+=20,z+=20 } 44 | const prev = `?p=${page-1}` 45 | const next = `?p=${parseInt(page)+1}` 46 | respond.render('category.hbs', {arrayOfData: arrayTemp[page-1], prev: prev, next: next, tag: TAG}) 47 | }) 48 | }) 49 | 50 | module.exports = router; -------------------------------------------------------------------------------- /server/routes/top.js: -------------------------------------------------------------------------------- 1 | // Topping -------------------------------------------------------------------------------- /views/FAQ.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | FAQ 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 | {{> _top}} 24 |
25 |
26 |
27 | 28 |

FAQ

29 | 30 |
31 | 32 |

33 | Q: 34 |

35 |

36 | A: 37 |

38 | 39 |
40 | 41 |
42 |
43 | 44 |
45 | 46 |
47 |
48 |
49 |
50 | 51 | 52 |
53 | {{> _footer}} 54 |
55 | 58 | 68 | 71 | 74 | {{> _generalscripts}} 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /views/about.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | About 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 | {{> _top}} 24 |
25 |
26 |
27 | 28 |

About 🐱‍👤

29 | 30 |

31 | Welcome 32 | 33 |

34 | 35 |
36 |
37 |
38 | 39 |
40 | 41 |
42 |
43 |
44 |
45 | 46 | 47 |
48 | {{> _footer}} 49 |
50 | 53 | 63 | 66 | 69 | {{> _generalscripts}} 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /views/categories.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Categories 8 | 9 | 10 | {{> _metadesc}}> 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 | 120 | 121 | 122 |
123 |
124 |
125 | {{> _footer}} 126 |
127 | 137 | 140 | 143 | 146 | {{> _generalscripts}} 147 | 148 | 149 | -------------------------------------------------------------------------------- /views/category.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Stafty | {{tag}} 9 | 10 | 11 | {{> _metadesc}} 12 | 13 | 14 | 16 | 17 | {{> _generalcss}} 18 | 19 | 20 | 21 | 22 | {{> _navbar}} 23 |
24 | {{> _top}} 25 |
26 |
27 |
28 | 29 |
30 |

{{tag}}

31 | {{#each arrayOfData}} 32 |
33 | {{this.desc}} 34 |
35 |
36 |
37 | {{/each}} 38 |
39 |
40 | 41 |
42 | 43 |
44 |
45 |
46 |
47 | 48 | 49 |
50 |
51 |
52 | 53 | 54 |
55 |
56 | {{> _footer}} 57 |
58 | 68 | 71 | 74 | 77 | {{> _generalscripts}} 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /views/error.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 404 Not Found 7 | 8 | 9 | 10 | 11 | 13 | {{> _generalcss}} 14 | 15 | 16 | {{> _navbar}} 17 |
18 |
19 |

{{error_code}}

20 |

{{error_message}}

21 | 22 |
23 | 24 | 25 | 26 | {{> _generalscripts}} 27 | 28 | -------------------------------------------------------------------------------- /views/gif.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{desc}} 7 | 8 | 9 | {{> _metadesc}}> 10 | 11 | 12 | 13 | 14 | {{> _generalcss}} 15 | 16 | 17 | {{> _navbar}} 18 |
19 |
20 | {{> _top}} 21 |
22 |
23 |
24 | 25 |
26 |

{{desc}}

27 |
28 | {{desc}} 29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | 40 |
41 |
42 |
43 | {{> _footer}} 44 |
45 | 55 | 56 | 57 | 58 | {{> _generalscripts}} 59 | 60 | -------------------------------------------------------------------------------- /views/index.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Home 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 | {{> _top}} 24 |
25 |
26 |
27 | 28 |
29 |

Trending now 💋

30 | {{#each arrayOfData}} 31 |
32 | {{this.desc}} 33 |
34 |
35 |
36 | {{/each}} 37 |
38 | 39 |
40 | 41 |
42 |
43 |
44 |
45 | 46 | 47 |
48 |
49 |
50 | 51 | 52 |
53 |
54 | {{> _footer}} 55 |
56 | 59 | 69 | 72 | 75 | {{> _generalscripts}} 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /views/index_gifs.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Home 7 | 8 | 9 | {{> _metadesc}} 10 | 11 | 12 | 13 | 14 | {{> _generalcss}} 15 | 16 | 17 | 18 | {{> _navbar}} 19 |
20 | {{> _top}} 21 |
22 |
23 |
24 | 25 |
26 |

Trending now 💖

27 | {{#each arrayOfData}} 28 | 29 |
30 | {{this.desc}} 31 |
32 |
33 | {{/each}} 34 |
35 | 36 |
37 | 38 |
39 |
40 |
41 | 42 | 43 |
44 |
45 |
46 | 47 | 48 |
49 |
50 | {{> _footer}} 51 |
52 | 62 | 63 | 64 | 65 | {{> _generalscripts}} 66 | 67 | 68 | -------------------------------------------------------------------------------- /views/index_stories.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Home 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 | {{> _top}} 24 |
25 |
26 |
27 | 28 |
29 |

Trending now 📕

30 |
31 |
32 | {{#each arrayOfData}} 33 |

{{this.title}}

34 |
35 | {{/each}} 36 |
37 | 38 |
39 | 40 |
41 |
42 |
43 | 44 | 45 |
46 |
47 |
48 | 49 | 50 |
51 |
52 | {{> _footer}} 53 |
54 | 57 | 60 | 63 | {{> _generalscripts}} 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /views/login.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Login 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 |
24 |
25 |
26 |
27 |
28 |

Login

29 |
30 |
31 | 32 |
33 | 34 |
35 |
36 | 37 |
38 | 39 |
40 | 41 |
42 |
43 | 44 |
45 | 50 |
51 |

52 | {{message}} 53 |

54 |

55 | This is something I dont like. 56 |

57 |
58 |
59 | 60 |
61 | 64 |
65 |
66 |
67 |
68 | 69 |
70 |
71 |
72 |
73 | 74 |
75 |
76 |
77 | {{> _footer}} 78 |
79 | 89 | 92 | 95 | 98 | {{> _generalscripts}} 99 | 100 | 101 | -------------------------------------------------------------------------------- /views/myaccount.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Myaccount 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 |
24 |
25 | 26 |

Welcome 🥵! Your ID = {{user_id}}

27 |
28 | 29 |
30 | 31 | 32 |
33 |
34 | 35 |
36 | {{#each arrayOfData}} 37 |
38 | {{this.video_desc}} 39 |
40 |
41 |
42 | {{/each}} 43 |
44 |
45 | 46 |
47 |
48 | 49 | 50 | 97 |
98 |
99 | 100 |
101 | 102 |
103 |
104 |
105 | 106 | 107 |
108 |
109 | {{> _footer}} 110 |
111 | 112 | 134 | 142 | 145 | 148 | 151 | {{> _generalscripts}} 152 | 153 | 154 | -------------------------------------------------------------------------------- /views/partials/_comments.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 7 |
8 |
9 | 10 |
11 | 12 |
13 |
14 |
15 |
16 |
17 |
18 | {{#each arrayOfComments}} 19 |
20 |
21 |

{{this.users_id}}

22 |

{{this.comment}}

23 |
24 |
25 |
26 | {{/each}} 27 |
28 |
29 |
-------------------------------------------------------------------------------- /views/partials/_footer.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Streaming Website 5 |
6 |
7 |
8 |
9 |
10 | streaming-website 11 |
12 |
13 |
14 |
-------------------------------------------------------------------------------- /views/partials/_generalcss.hbs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/partials/_generalscripts.hbs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/partials/_metadesc.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /views/partials/_navbar.hbs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/partials/_top.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |
8 |
9 |
-------------------------------------------------------------------------------- /views/register.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Register 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | 21 | {{> _navbar}} 22 |
23 |
24 |
25 |
26 |
27 |
28 |

Register

29 |
30 |
31 | 32 |
33 | 34 |
35 |
36 | 37 |
38 | 39 |
40 | 41 |
42 |
43 | 44 |
45 | 50 |
51 |

52 | {{message}} 53 |

54 |

55 | This is something I dont like. 56 |

57 |
58 |
59 | 60 |
61 | 64 |
65 |
66 |
67 |
68 | 69 |
70 |
71 |
72 |
73 | 74 |
75 |
76 |
77 | {{> _footer}} 78 |
79 | 89 | 92 | 95 | 98 | {{> _generalscripts}} 99 | 100 | 101 | -------------------------------------------------------------------------------- /views/stories.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{title}} 8 | 9 | 10 | {{> _metadesc}} 11 | 12 | 13 | 15 | 16 | {{> _generalcss}} 17 | 18 | 19 | 20 | {{> _navbar}} 21 |
22 |
23 | {{> _top}} 24 |
25 |
26 |
27 | 28 |
29 |

{{title}}

30 |

31 | {{story}} 32 |

33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | 43 |
44 |
45 |
46 | {{> _footer}} 47 |
48 | 58 | 61 | 64 | 67 | {{> _generalscripts}} 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /views/video.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{title}} 7 | 8 | 9 | {{> _metadesc}}> 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {{> _generalcss}} 23 | 24 | 25 | {{> _navbar}} 26 |
27 |
28 | {{> _top}} 29 |
30 |
31 |
32 | 33 |
34 |

{{title}}

35 |
36 |
37 | 40 |
41 |
42 |
43 |
44 |
45 |

46 | {{desc}} 47 |

48 |

{{tags}}

49 | 50 | 51 | {{> _comments}} 52 | 53 |
54 |
55 |
56 |
57 |
58 |
59 | 60 |
61 |
62 |
63 | {{> _footer}} 64 |
65 | 75 | 76 | 77 | 78 | 79 | {{> _generalscripts}} 80 | 81 | 82 | --------------------------------------------------------------------------------