first commit
This commit is contained in:
		
							
								
								
									
										16
									
								
								app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								app.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
// app.js
 | 
			
		||||
const express = require('express');
 | 
			
		||||
const bodyParser = require('body-parser');
 | 
			
		||||
const apiRoutes = require('./routes/apiRoutes');
 | 
			
		||||
const cors = require('cors');
 | 
			
		||||
 | 
			
		||||
const app = express();
 | 
			
		||||
const PORT = process.env.PORT || 3000;
 | 
			
		||||
 | 
			
		||||
app.use(bodyParser.json());
 | 
			
		||||
app.use(cors());
 | 
			
		||||
app.use('/api', apiRoutes);
 | 
			
		||||
 | 
			
		||||
app.listen(PORT, () => {
 | 
			
		||||
  console.log(`Server is running on port ${PORT}`);
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										24
									
								
								config/dbConfig.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								config/dbConfig.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
// dbConfig.js
 | 
			
		||||
const mysql = require('mysql');
 | 
			
		||||
 | 
			
		||||
const connection = mysql.createConnection({
 | 
			
		||||
  host: 'localhost',
 | 
			
		||||
  user: 'root',
 | 
			
		||||
  password: '',
 | 
			
		||||
  database: 'community_rule',
 | 
			
		||||
});
 | 
			
		||||
// const mysql = require('mysql2');
 | 
			
		||||
 | 
			
		||||
// const connection = mysql.createConnection({
 | 
			
		||||
//   host: 'localhost',
 | 
			
		||||
//   user: 'root',
 | 
			
		||||
//   password: 'your_mysql_password',
 | 
			
		||||
//   database: 'your_database_name',
 | 
			
		||||
// });
 | 
			
		||||
 | 
			
		||||
connection.connect((err) => {
 | 
			
		||||
  if (err) throw err;
 | 
			
		||||
  console.log('Connected to the database');
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = connection;
 | 
			
		||||
							
								
								
									
										52
									
								
								controllers/emailController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								controllers/emailController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
const db = require('../config/dbConfig');
 | 
			
		||||
 | 
			
		||||
exports.sendOtp = (req, res) => {
 | 
			
		||||
    const email = req.body.email;
 | 
			
		||||
    const otp = generateRandom4DigitNumber();
 | 
			
		||||
    try {
 | 
			
		||||
        db.query(
 | 
			
		||||
            'INSERT INTO email_otp (email, otp) VALUES (?, ?) ON DUPLICATE KEY UPDATE otp = ?',
 | 
			
		||||
            [email, otp, otp]
 | 
			
		||||
        );
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
 | 
			
		||||
        const errorMessage = {
 | 
			
		||||
            error: true,
 | 
			
		||||
            message: error.message,
 | 
			
		||||
        };
 | 
			
		||||
        return errorMessage;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // send an email using api
 | 
			
		||||
    res.json({ success: true, message: 'You must have received an email with otp successfully.' });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.validateOtp = async (req, res) => {
 | 
			
		||||
    const otp = req.body.otp;
 | 
			
		||||
    const email = req.body.email;
 | 
			
		||||
    const otpQuery = "SELECT * from email_otp where otp = ? and email = ?";
 | 
			
		||||
    const deleteOtpQuery = "DELETE from email_otp WHERE email = ?";
 | 
			
		||||
    db.query(otpQuery, [otp, email], (err, results) => {
 | 
			
		||||
        if (err) {
 | 
			
		||||
            console.error('Error executing query:', err);
 | 
			
		||||
            res.status(500).json({ success: false, message: 'Internal Server Error' });
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (results.length > 0) {
 | 
			
		||||
            db.query(deleteOtpQuery, [email], (err, results) => {
 | 
			
		||||
                res.status(200).json({ success: true, message: 'Valid OTP' });
 | 
			
		||||
            })
 | 
			
		||||
        } else {
 | 
			
		||||
            // OTP is invalid
 | 
			
		||||
            res.status(400).json({ success: false, message: 'Invalid OTP' });
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function generateRandom4DigitNumber() {
 | 
			
		||||
    // Generate a random number between 1000 and 9999
 | 
			
		||||
    const random4DigitNumber = Math.floor(Math.random() * 9000) + 1000;
 | 
			
		||||
    return random4DigitNumber;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										127
									
								
								controllers/ruleController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								controllers/ruleController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,127 @@
 | 
			
		||||
const db = require('../config/dbConfig');
 | 
			
		||||
const url = require('url');
 | 
			
		||||
const querystring = require('querystring');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
exports.getRules = (req, res) => {
 | 
			
		||||
    const query = 'SELECT * FROM rules WHERE deleted = 0 ORDER BY rule_id DESC';
 | 
			
		||||
 | 
			
		||||
    // Execute the query
 | 
			
		||||
    db.query(query, (error, results) => {
 | 
			
		||||
        if (error) {
 | 
			
		||||
            res.status(500).json({ error: 'Internal Server Error' });
 | 
			
		||||
        } else {
 | 
			
		||||
            // Convert the results to JSON
 | 
			
		||||
            const jsonResult = JSON.stringify(results);
 | 
			
		||||
            // Send the JSON response
 | 
			
		||||
 | 
			
		||||
            res.json({ rules: jsonResult });
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.getRule = (req, res) => {
 | 
			
		||||
    const query = 'SELECT * FROM rules where rule_id = ?';
 | 
			
		||||
 | 
			
		||||
    const parsedUrl = url.parse(req.originalUrl);
 | 
			
		||||
    const queryParams = querystring.parse(parsedUrl.query);
 | 
			
		||||
 | 
			
		||||
    db.query(query, [req.query.ruleId], (error, results) => {
 | 
			
		||||
        if (error) {
 | 
			
		||||
            res.status(500).json({ error: 'Internal Server Error' });
 | 
			
		||||
        } else {
 | 
			
		||||
            // Convert the results to JSON
 | 
			
		||||
 | 
			
		||||
            const jsonResult = JSON.stringify(results);
 | 
			
		||||
 | 
			
		||||
            // Send the JSON response
 | 
			
		||||
            res.json({ rules: jsonResult });
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.deleteRule = (req, res) => {
 | 
			
		||||
    const query = 'UPDATE rules SET deleted = 1 where rule_id = ?';
 | 
			
		||||
 | 
			
		||||
    console.log("ruld to delete" + req.body.ruleID)
 | 
			
		||||
    db.query(query, [req.body.ruleID], (error, results) => {
 | 
			
		||||
        if (error) {
 | 
			
		||||
            res.status(500).json({ error: 'Internal Server Error' });
 | 
			
		||||
        } else {
 | 
			
		||||
            const jsonResult = JSON.stringify(results);
 | 
			
		||||
            res.json({ rules: jsonResult });
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.publishRule = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
    const edit = req.body.edit;
 | 
			
		||||
 | 
			
		||||
    if (!edit) {
 | 
			
		||||
        const publishQuery = "INSERT INTO rules "
 | 
			
		||||
            + "(rule_id, time_stamp, name, lineage, summary, modules, creator_name, creator_url, deleted, list, icon, latest_version, email)"
 | 
			
		||||
            + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 | 
			
		||||
 | 
			
		||||
        db.query(publishQuery, [req.body.ruleID, req.body.timestamp, req.body.name, req.body.lineage, req.body.summary, req.body.modules, req.body.creatorName, req.body.creatorUrl, 0, req.body.list, req.body.icon, req.body.latest_version, req.body.email], (err, results) => {
 | 
			
		||||
            if (err) {
 | 
			
		||||
                console.error('Error executing query:', err);
 | 
			
		||||
                res.status(500).json({ success: false, message: 'OTP Validated but issue while creating entry for rule ' });
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            res.status(200).json({ success: true, message: 'OTP is valid and your rule is now published' });
 | 
			
		||||
        })
 | 
			
		||||
    } else {
 | 
			
		||||
        const publishQueryVersionHistory = "INSERT INTO version_history "
 | 
			
		||||
            + "(rule_id, time_stamp, name, lineage, summary, modules, creator_name, creator_url, list, icon, rule_version)"
 | 
			
		||||
            + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 | 
			
		||||
        const selectVersionHistory = "SELECT * FROM rules WHERE rule_id = ?"
 | 
			
		||||
 | 
			
		||||
        db.query(selectVersionHistory, [req.body.ruleID], (err, results) => {
 | 
			
		||||
            if (err) {
 | 
			
		||||
                console.error('Error executing query:', err);
 | 
			
		||||
                res.status(500).json({ success: false, message: 'Internal Server Error' });
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            console.log("rule    =>" + req.body.ruleID)
 | 
			
		||||
            if (results.length > 0) {
 | 
			
		||||
 | 
			
		||||
                const versionHistoryData = results[0];
 | 
			
		||||
                // Execute the second query to insert data
 | 
			
		||||
                db.query(
 | 
			
		||||
                    publishQueryVersionHistory,
 | 
			
		||||
                    [
 | 
			
		||||
                        versionHistoryData.rule_id,
 | 
			
		||||
                        versionHistoryData.time_stamp,
 | 
			
		||||
                        versionHistoryData.name,
 | 
			
		||||
                        versionHistoryData.lineage,
 | 
			
		||||
                        versionHistoryData.summary,
 | 
			
		||||
                        versionHistoryData.modules,
 | 
			
		||||
                        versionHistoryData.creator_name,
 | 
			
		||||
                        versionHistoryData.creator_url,
 | 
			
		||||
                        versionHistoryData.list,
 | 
			
		||||
                        versionHistoryData.icon,
 | 
			
		||||
                        req.body.latest_version - 1
 | 
			
		||||
                    ],
 | 
			
		||||
                    (err, insertResults) => {
 | 
			
		||||
 | 
			
		||||
                        if (err) {
 | 
			
		||||
                            console.log(err)
 | 
			
		||||
                            console.error('Error executing insert query:', err);
 | 
			
		||||
                            res.status(500).json({ success: false, message: 'Internal Server Error' });
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
                        const updateQuery = "UPDATE rules SET time_stamp = ?, name = ?, lineage = ?, summary = ?, modules = ?, creator_name = ?, creator_url = ?, version = ?, list = ?, icon = ?, latest_version = ? WHERE rule_id = ?;"
 | 
			
		||||
                        db.query(updateQuery, [req.body.timestamp, req.body.name, req.body.lineage, req.body.summary, req.body.modules, req.body.creatorName, req.body.creatorUrl, req.body.version, req.body.list, req.body.icon, req.body.latest_version, req.body.ruleID], (err, results) => {
 | 
			
		||||
                            if (err) {
 | 
			
		||||
                                console.error('Error executing query:', err);
 | 
			
		||||
                                res.status(500).json({ success: false, message: 'OTP Validated but issue while creating entry for rule ' });
 | 
			
		||||
                                return;
 | 
			
		||||
                            }
 | 
			
		||||
                            res.status(200).json({ success: true, message: 'OTP is valid and your rule is now published' });
 | 
			
		||||
                        });
 | 
			
		||||
                    });
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								controllers/userController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								controllers/userController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
// userController.js
 | 
			
		||||
const userModel = require('../models/userModel');
 | 
			
		||||
 | 
			
		||||
exports.getAllUsers = (req, res) => {
 | 
			
		||||
  userModel.getAllUsers((err, results) => {
 | 
			
		||||
    // if (err) throw err;
 | 
			
		||||
    res.json({});
 | 
			
		||||
    // console.log("asdfasdf");
 | 
			
		||||
    // res.json({});
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								models/userModel.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								models/userModel.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
// userModel.js
 | 
			
		||||
const db = require('../config/dbConfig');
 | 
			
		||||
 | 
			
		||||
class User {
 | 
			
		||||
  getAllUsers(callback) {
 | 
			
		||||
    //db.query('SELECT * FROM users', callback);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = new User();
 | 
			
		||||
							
								
								
									
										1473
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1473
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										85
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "community_rule_backend",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "main": "app.js",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "accepts": "^1.3.8",
 | 
			
		||||
    "array-flatten": "^1.1.1",
 | 
			
		||||
    "body-parser": "^1.20.2",
 | 
			
		||||
    "bytes": "^3.1.2",
 | 
			
		||||
    "call-bind": "^1.0.5",
 | 
			
		||||
    "content-disposition": "^0.5.4",
 | 
			
		||||
    "content-type": "^1.0.5",
 | 
			
		||||
    "cookie": "^0.5.0",
 | 
			
		||||
    "cookie-signature": "^1.0.6",
 | 
			
		||||
    "cors": "^2.8.5",
 | 
			
		||||
    "debug": "^2.6.9",
 | 
			
		||||
    "define-data-property": "^1.1.1",
 | 
			
		||||
    "denque": "^2.1.0",
 | 
			
		||||
    "depd": "^2.0.0",
 | 
			
		||||
    "destroy": "^1.2.0",
 | 
			
		||||
    "ee-first": "^1.1.1",
 | 
			
		||||
    "encodeurl": "^1.0.2",
 | 
			
		||||
    "escape-html": "^1.0.3",
 | 
			
		||||
    "etag": "^1.8.1",
 | 
			
		||||
    "express": "^4.18.2",
 | 
			
		||||
    "finalhandler": "^1.2.0",
 | 
			
		||||
    "forwarded": "^0.2.0",
 | 
			
		||||
    "fresh": "^0.5.2",
 | 
			
		||||
    "function-bind": "^1.1.2",
 | 
			
		||||
    "generate-function": "^2.3.1",
 | 
			
		||||
    "get-intrinsic": "^1.2.2",
 | 
			
		||||
    "gopd": "^1.0.1",
 | 
			
		||||
    "has-property-descriptors": "^1.0.1",
 | 
			
		||||
    "has-proto": "^1.0.1",
 | 
			
		||||
    "has-symbols": "^1.0.3",
 | 
			
		||||
    "hasown": "^2.0.0",
 | 
			
		||||
    "http-errors": "^2.0.0",
 | 
			
		||||
    "iconv-lite": "^0.4.24",
 | 
			
		||||
    "inherits": "^2.0.4",
 | 
			
		||||
    "ipaddr.js": "^1.9.1",
 | 
			
		||||
    "is-property": "^1.0.2",
 | 
			
		||||
    "long": "^5.2.3",
 | 
			
		||||
    "lru-cache": "^8.0.5",
 | 
			
		||||
    "media-typer": "^0.3.0",
 | 
			
		||||
    "merge-descriptors": "^1.0.1",
 | 
			
		||||
    "methods": "^1.1.2",
 | 
			
		||||
    "mime": "^1.6.0",
 | 
			
		||||
    "mime-db": "^1.52.0",
 | 
			
		||||
    "mime-types": "^2.1.35",
 | 
			
		||||
    "ms": "^2.0.0",
 | 
			
		||||
    "mysql2": "^3.6.5",
 | 
			
		||||
    "named-placeholders": "^1.1.3",
 | 
			
		||||
    "negotiator": "^0.6.3",
 | 
			
		||||
    "object-inspect": "^1.13.1",
 | 
			
		||||
    "on-finished": "^2.4.1",
 | 
			
		||||
    "parseurl": "^1.3.3",
 | 
			
		||||
    "path-to-regexp": "^0.1.7",
 | 
			
		||||
    "proxy-addr": "^2.0.7",
 | 
			
		||||
    "qs": "^6.11.0",
 | 
			
		||||
    "range-parser": "^1.2.1",
 | 
			
		||||
    "raw-body": "^2.5.2",
 | 
			
		||||
    "safe-buffer": "^5.2.1",
 | 
			
		||||
    "safer-buffer": "^2.1.2",
 | 
			
		||||
    "send": "^0.18.0",
 | 
			
		||||
    "seq-queue": "^0.0.5",
 | 
			
		||||
    "serve-static": "^1.15.0",
 | 
			
		||||
    "set-function-length": "^1.1.1",
 | 
			
		||||
    "setprototypeof": "^1.2.0",
 | 
			
		||||
    "side-channel": "^1.0.4",
 | 
			
		||||
    "sqlstring": "^2.3.3",
 | 
			
		||||
    "statuses": "^2.0.1",
 | 
			
		||||
    "toidentifier": "^1.0.1",
 | 
			
		||||
    "type-is": "^1.6.18",
 | 
			
		||||
    "unpipe": "^1.0.0",
 | 
			
		||||
    "utils-merge": "^1.0.1",
 | 
			
		||||
    "vary": "^1.1.2"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "",
 | 
			
		||||
  "license": "ISC"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								routes/apiRoutes.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								routes/apiRoutes.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
// apiRoutes.js
 | 
			
		||||
const express = require('express');
 | 
			
		||||
const router = express.Router();
 | 
			
		||||
const ruleController = require('../controllers/ruleController');
 | 
			
		||||
const emailController = require('../controllers/emailController');
 | 
			
		||||
// router.get('/users', userController.getAllUsers);
 | 
			
		||||
router.post('/send_otp', emailController.sendOtp);
 | 
			
		||||
router.post('/validate_otp', emailController.validateOtp);
 | 
			
		||||
router.post('/publish_rule', ruleController.publishRule);
 | 
			
		||||
router.get('/get_rules', ruleController.getRules);
 | 
			
		||||
router.delete('/delete_rule', ruleController.deleteRule);
 | 
			
		||||
router.get('/get_rule', ruleController.getRule);
 | 
			
		||||
// router.post('/publish_rule', ruleController.)
 | 
			
		||||
module.exports = router;
 | 
			
		||||
		Reference in New Issue
	
	Block a user