git-webserver
Version:
Web Server Integrated GIT Version Control System
198 lines (197 loc) • 7.15 kB
JavaScript
/**
* Schema building for gitRepo DB
* @param {JSON} config Master Configuration JSON
*/
exports.gitRepoMongoDB = function (config) {
var mongoose = require("mongoose"),
Schema = mongoose.Schema,
autoIncrement = require("mongoose-auto-increment-fix");
if (mongoose.models && mongoose.models.gitRepo) {
return mongoose.models.gitRepo;
}
mongoose.Promise = global.Promise;
var mongoURI = "mongodb://" + config.dbURL + ":" + config.dbPort + "/" + config.dbName;
if (config.dbUser != "" && config.dbPassword != "") {
mongoURI = "mongodb://" + config.dbUser + ":" + config.dbPassword + "@" + config.dbURL + "/" + config.dbName;
}
mongoose.connect(mongoURI, {
useNewUrlParser: true
});
autoIncrement.initialize(mongoose);
var gitRepo = new Schema({
repo: {
type: String,
required: true
},
logicName: {
type: String,
unique: true,
required: true
},
createdUser: {
type: String,
required: true
},
private: {
type: Boolean,
required: true
},
description: {
type: String,
required: true
},
url: {
type: String,
required: true
},
userList: [{
userName: {
type: String,
require: true
},
readOnly: {
type: Boolean,
default: false
}
}],
readOnly: {
type: Boolean,
default: false
},
timeStamp: {
type: Date,
default: Date.now
}
});
gitRepo.plugin(autoIncrement.plugin, {
model: "gitRepo",
field: "Si",
startAt: 1
});
return mongoose.model("gitRepo", gitRepo, "gitRepo");
};
/**
* Create repository record in DB
* @param {object} req Request Object
* @param {object} res Response Object
* @param {{repo:String,createdUser:String,url:String,private:Boolean,description:String}} data Input data
* @param {JSON} config Master Configuration JSON
* @param {function} next Callback function(req,res,config)
*/
exports.gitRepoCreate = function (req, res, data, config, next) {
var validate = require("../modules/validation");
if (validate(data.repo).isNotEmpty().hasLength(4).boolResult() &&
validate(data.createdUser).isNotEmpty().boolResult() &&
validate(data.url).isNotEmpty().boolResult() &&
validate(data.description).isNotEmpty().boolResult()) {
if (config.database == "Mongo") {
var gitRepo = exports.gitRepoMongoDB(config);
data.logicName = data.repo.toUpperCase();
gitRepo.create(data, function (err, gitRepo) {
if (err) {
if (gLogging) {
if (err.code == 11000) {
var handlebarLayout = "default";
if (req.body.opti) {
handlebarLayout = false;
}
var message = '<div class="alert alert-warning" role="alert" data-test="createRepoMessage">Sorry ! Repository name "<strong>' + data.repo + '</strong>" already taken</div>';
res.render("user/createRepo", {
layout: handlebarLayout,
name: req.session.userData.name,
message: message,
config: config
});
} else {
console.log(err);
res.status(503);
res.send();
}
}
} else {
config.gitRepo = gitRepo;
next(req, res, config);
}
});
}
} else {
if (gLogging) console.log("Git Create Repo Insert operation failed due to missing data");
res.status(403);
res.send();
}
};
/**
* Deletes Git repository recored from DB
* @param {object} req Request Object
* @param {object} res Response Object
* @param {{repo:String,}} data Input data
* @param {JSON} config Master Configuration JSON
* @param {function} next Callback function(req,res,config)
*/
exports.gitRepoDelete = function (req, res, data, config, next) {
var validate = require("../modules/validation");
if (validate(data.repo).isNotEmpty().hasLength(4).boolResult()) {
if (config.database == "Mongo") {
var gitRepo = exports.gitRepoMongoDB(config);
gitRepo.deleteOne({
logicName: data.repo.toUpperCase()
}, function (err) {
if (err) {
if (gLogging) {
console.log(err);
res.status(503);
res.send();
}
} else next(req, res, config);
});
}
} else {
if (gLogging) console.log("Git Delete Repo Insert operation failed due to missing data");
res.status(403);
res.send();
}
};
/**
* findOne mongoose function will return result with top one match
* @param {object} query query object passed to find the results
* @param {object} req Request Object
* @param {object} res Response Object
* @param {JSON} config Master Configuration JSON
* @param {function} next Callback function(req,res,config)
*/
exports.gitRepoFindOne = function (query, req, res, config, next) {
if (config.database == "Mongo") {
var gitRepo = exports.gitRepoMongoDB(config);
gitRepo.findOne(query, function (err, result) {
if (err) {
if (gLogging) {
console.log(err);
res.status(503);
res.send();
}
} else next(req, res, config, result);
});
}
};
/**
* find mongoose function will return result with all match
* @param {object} query query object passed to find the results
* @param {object} req Request Object
* @param {object} res Response Object
* @param {JSON} config Master Configuration JSON
* @param {function} next Callback function(req,res,config)
*/
exports.gitRepoFind = function (query, req, res, config, next) {
if (config.database == "Mongo") {
var gitRepo = exports.gitRepoMongoDB(config);
gitRepo.find(query, function (err, result) {
if (err) {
if (gLogging) {
console.log(err);
res.status(503);
res.send();
}
} else next(req, res, config, result);
});
}
};