-
Notifications
You must be signed in to change notification settings - Fork 3
/
routes.js
119 lines (108 loc) · 3.18 KB
/
routes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
module.exports = function Routes(app, db){
console.log("init routes");
var mw = require('./lib/middleware'),
Settings = require('settings'),
config = new Settings(require('./config')),
_ = require('underscore'),
path = require('path');
var XTagElement = db.import(__dirname + '/models/xtagelement');
var XTagRepo = db.import(__dirname + '/models/xtagrepo');
var XTagImportLog = db.import(__dirname + '/models/xtagimportlog');
app.post('/customtag', mw.validateGitHubData, function(req, res){
req.emit('log','======================================================');
req.emit('log','=== Github post-commit hook data passed validation ===');
req.emit('log','======================================================');
res.send(200); // respond early to github
req.emit('log','Processing webhook data from:', req.data.github.repository.url);
console.log("Processing webhook data from:", req.data.github.repository.url);
XTagRepo.addUpdateRepo(req, function(err, repo){
if (err) {
console.log("addUpdateRepo error:", err);
} else {
req.data.github.repoId = repo.id;
req.data.github.repository.forked_from = repo.forked_from;
req.data.github.branchUrl = req.data.github.repository.url + "/" + path.join("tree", req.data.github.ref.split('/')[2]);
XTagElement.findElements(req);
}
});
});
app.get('/', function(req, res){
res.render('search', {});
});
app.get('/search', function(req, res){
var query = {
index: config.es.index,
type: 'element',
filter: { 'and' : []}
};
if (req.query.query){
query.query = {
"bool":{
"should":[
{
"text": { "name": { "query": req.query.query, "boost": 3.0 }}
},
{
"text": { "description": { "query": req.query.query, "boost": 2.0 }}
},
{
"text": { "all": { "query": req.query.query, "boost": 1.0 }}
},
]
}
}
}
if (req.query.category){
query.filter.and.push({
"terms": { "categories": req.query.category.split(',') }
});
}
if (req.query.compatibility){
_.each(req.query.compatibility, function(item, key){
var range = { "range" : {} };
range["range"]["compatibility." + key] = {
"lte": Number(item),
}
query.filter.and.push(range);
});
}
if (req.query.forked && req.query.forked == 'true'){
// no filter?
} else {
query.filter.and.push({
"term": { "forked": "false" }
});
}
if (req.query.author){
query.filter.and.push({
"term": { "author": req.query.author }
});
}
if (!req.query.query){
query.size = 100;
query.sort = [
{ "created_at": { "order": "desc" } }
]
}
if (!req.query.showDisabled){
query.filter.and.push({
"term": { "visible": "true" }
});
}
require('./lib/search').findTags(query, function(err, tags){
if (err){
console.log("[/search/]"+err);
req.emit('log', JSON.stringify(err));
res.json({ data: [], error: err }, 500);
} else {
res.json({ data: tags}, 200);
}
});
});
app.get('/logs/:user', function(req, res){
XTagImportLog.findAll({where: { user: req.param('user') }, order: 'createdAt DESC', limit: 500})
.success(function(logs){
res.render('userlog', {logs: logs});
});
});
}