Skip to content

Commit 8b21fe0

Browse files
chore: more redirects for frontends
1 parent 536984c commit 8b21fe0

File tree

4 files changed

+5
-209
lines changed

4 files changed

+5
-209
lines changed

api/controllers/CollaboratorController.js

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -29,75 +29,7 @@ module.exports = {
2929

3030

3131
findByName: function(req, res) {
32-
var name = req.param('name');
33-
Package.findAll({
34-
include: [
35-
{ model: Repository,
36-
as: 'repository'
37-
},
38-
{ model: PackageVersion,
39-
as: 'latest_version',
40-
attributes: ['id', 'package_name', 'version', 'title', 'description', 'release_date', 'license', 'url', 'maintainer_id'],
41-
include: [
42-
{ model: Collaborator, as: 'maintainer' },
43-
{ model: Collaborator, as: 'collaborators'},
44-
]
45-
}
46-
],
47-
where: {
48-
$or: [
49-
sequelize.literal("`latest_version.maintainer`.`name` = '" + name.replace("'", "\\'") + "'"),
50-
sequelize.literal("`latest_version.collaborators`.`name` = '" + name.replace("'", "\\'") + "'"),
51-
]
52-
}
53-
}).then(function(packages) {
54-
if (packages === null) return res.notFound();
55-
var json = {name: name };
56-
var repositories = {
57-
cran: 0,
58-
bioconductor: 0,
59-
github: 0
60-
};
61-
62-
return Percentile.findAll().then(function(percentiles) {
63-
return Promise.map(packages, function(_package) {
64-
var latest = _package.latest_version.toJSON();
65-
if (!latest.maintainer) latest.maintainer = {};
66-
if (latest.maintainer.name === name) {
67-
latest.is_maintainer = true;
68-
}
69-
var collaborators = _.filter(latest.collaborators, function(c) {
70-
return c.name === name;
71-
});
72-
73-
if (collaborators.length > 0) {
74-
latest.is_contributor = true;
75-
}
76-
if (!json.email && latest.is_maintainer && latest.maintainer.email) {
77-
json.email = latest.maintainer.email;
78-
}
79-
if (!json.email && collaborators.length > 0 && collaborators[0].email) {
80-
json.email = collaborators[0].email;
81-
}
82-
repositories[_package.repository.name] = repositories[_package.repository.name]+1 || 1;
83-
return Package.getPackagePercentile(latest.package_name, percentiles).then(function(percentileObject) {
84-
latest.percentile = isNaN(percentileObject.percentile) ? -1 : percentileObject.percentile;
85-
latest.totalDownloads = percentileObject.total;
86-
latest.repoName = _package.repository.name;
87-
return latest;
88-
});
89-
});
90-
}).then(function(packages) {
91-
json.gravatar_url = 'https://www.gravatar.com/avatar/' + md5(_.trim(json.email).toLowerCase());
92-
json.packages = _.orderBy(packages, ['is_maintainer', 'percentile', 'totalDownloads'], ['asc', 'desc', 'desc']);
93-
json.repositories = repositories;
94-
json.pageTitle = name + ' | Collaborator';
95-
return res.ok(json, 'collaborator/show.ejs');
96-
});
97-
})
98-
.catch(function(err) {
99-
return res.negotiate(err);
100-
});
32+
return res.redirect(302, "https://rdocumentation.org" + req.path);
10133
},
10234

10335
/**

api/controllers/HomeController.js

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,7 @@ var numeral = require('numeral');
1010
module.exports = {
1111

1212
index: function(req, res) {
13-
RedisService.getJSONFromCache('home_page_info', res, RedisService.DAILY, function() {
14-
var json = {};
15-
json.description = 'Search current and past R documentation and R manuals from CRAN, GitHub and Bioconductor. Use the Rdocumentation package for easy access inside RStudio.';
16-
17-
var promises = [];
18-
promises.push(sequelize.query('SELECT (SELECT COUNT(*) FROM Packages) as package_count, (SELECT COUNT(*) FROM PackageVersions) as topic_count, (SELECT COUNT(*) FROM (SELECT DISTINCT name from Collaborators) c) as collaborator_count;')
19-
.then(function(counts) {
20-
json.numbers = counts[0].map(function(row) {
21-
return {nbPackages: numeral(row.package_count).format('0,0'), nbPackageVersions: numeral(row.topic_count).format('0,0'), nbCollaborators: numeral(row.collaborator_count).format('0,0')};
22-
})[0];
23-
}));
24-
25-
promises.push(PackageVersion.getNewestPackages(1).then(function(data) {
26-
json.newPackages = data;
27-
}));
28-
promises.push(Collaborator.topCollaborators(1).then(function(data) {
29-
json.topCollaborators = data.results;
30-
}));
31-
promises.push(DownloadStatistic.getMostPopularPerPage(1, 'direct').then(function(data) {
32-
json.mostPopular = data.results;
33-
}));
34-
35-
return Promise.all(promises).then(function(){
36-
json.pageTitle = 'R Documentation and manuals';
37-
return json;
38-
});
39-
}).then(function(json) {
40-
return res.ok(json, 'homepage.ejs');
41-
}).catch(function(err) {
42-
return res.negotiate(err);
43-
});
13+
return res.redirect(302, "https://rdocumentation.org");
4414
},
4515

4616
status: function(req, res) {

api/controllers/PackageController.js

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,7 @@ module.exports = {
6262
_package.type = 'package';
6363
return res.json(_package);
6464
} else {
65-
if (_package.versions.length === 0)
66-
return Package.findOne({
67-
where: {name: packageName},
68-
include: [{ model: PackageVersion, attributes: ['package_name', 'version', 'id'], as: 'reverse_dependencies'}]
69-
}).then(function(packageInstance) {
70-
if (packageInstance === null) return res.notFound();
71-
var _package = packageInstance.toJSON();
72-
_package.pageTitle = packageInstance.name;
73-
return res.ok(_package, 'package/show.ejs');
74-
});
75-
else return res.rstudio_redirect(301, _package.versions.sort(PackageService.compareVersions('desc', 'version'))[0].uri);
65+
return res.redirect(302, "https://rdocumentation.org" + req.path);
7666
}
7767
}).catch(function(err) {
7868
return res.negotiate(err);

api/controllers/TopicController.js

Lines changed: 2 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -111,74 +111,7 @@ module.exports = {
111111
*/
112112

113113
findByName: function(req, res) {
114-
var packageName = req.param('name');
115-
var packageVersion = req.param('version');
116-
var topic = req.param('topic');
117-
var key = 'view_topic_' + packageName + '_' + packageVersion + '_' + topic;
118-
if (topic.endsWith('.html')) topic = topic.replace('.html', '');
119-
120-
121-
RedisService.getJSONFromCache(key, res, RedisService.DAILY, function() {
122-
var canonicalPromise = Topic.findByNameInPackage(packageName, topic).then(function(t) {
123-
if(t === null || t === undefined) return null;
124-
return t.uri;
125-
});
126-
127-
var examplesPromise = Example.findPackageExamples(packageName, topic);
128-
129-
var topicPromise = Topic.findOnePopulated({name: topic}, {
130-
include: [{
131-
model: PackageVersion,
132-
as: 'package_version',
133-
where: { package_name: packageName, version: packageVersion },
134-
include: [{ model: Package, as: 'package', attributes: ['name', 'latest_version_id', 'type_id' ]},
135-
{ model: Collaborator, as: 'maintainer'}]
136-
},]
137-
}).then(function(topicInstance) {
138-
if(topicInstance === null) {
139-
return Topic.findByAliasInPackage(packageName, topic, packageVersion).then(function(topicInstance) {
140-
if(!topicInstance) return null;
141-
else return { redirect_uri: topicInstance.uri };
142-
});
143-
}
144-
else{
145-
return topicInstance;
146-
}
147-
}).then(function(topicInstance) {
148-
if(topicInstance === null) return null;
149-
else if(topicInstance.redirect_uri) return topicInstance;
150-
else return TopicService.processHrefs(topicInstance)
151-
.then(function(topic) {
152-
topic.pageTitle = topic.name + ' function';
153-
topic.type = 'topic';
154-
return topic;
155-
});
156-
});
157-
158-
var dclPromise = PackageService.isDCLSupported(packageName, packageVersion)
159-
160-
return Promise.join(topicPromise, examplesPromise, canonicalPromise, dclPromise, function(topicJSON, examples, canonicalLink, dcl) {
161-
if(topicJSON === null) return null;
162-
topicJSON.canonicalLink = canonicalLink;
163-
var userExamples = examples.sort(function (example1, example2) {
164-
const compare = PackageService.compareVersions('desc');
165-
const compareValue = compare(example1.topic.package_version.version, example2.topic.package_version.version);
166-
if (compareValue === 0) return example2.created_at.getTime() - example1.created_at.getTime();
167-
else return compareValue;
168-
});
169-
topicJSON.dcl = dcl || (topicJSON.package_version && topicJSON.package_version.package.type_id === 4); //in the list or in base r
170-
// We decode html entities again (as some older packages didn't have this fix in place)
171-
topicJSON.examples = htmlEntities.decode(topicJSON.examples)
172-
topicJSON.user_examples = userExamples;
173-
return topicJSON;
174-
});
175-
}).then(function(topicJSON) {
176-
if(topicJSON === null) return res.rstudio_redirect(301, '/packages/' + encodeURIComponent(packageName) + '/versions/' + encodeURIComponent(packageVersion));
177-
else if(topicJSON.redirect_uri) return res.rstudio_redirect(301, topicJSON.redirect_uri);
178-
return res.ok(topicJSON, 'topic/show.ejs');
179-
}).catch(function(err) {
180-
return res.negotiate(err);
181-
});
114+
return res.redirect(302, "https://rdocumentation.org" + req.path);
182115
},
183116

184117
/**
@@ -222,36 +155,7 @@ module.exports = {
222155
*/
223156

224157
findById: function(req, res) {
225-
var id = req.param('id');
226-
var key = 'view_topic_' + id;
227-
228-
229-
RedisService.getJSONFromCache(key, res, RedisService.DAILY, function() {
230-
231-
232-
return Topic.findOnePopulated({id: id}, {
233-
}).then(function(topicInstance) {
234-
if(topicInstance === null) return null;
235-
else {
236-
return Topic.findByNameInPackage(topicInstance.package_version.package_name, topicInstance.name).then(function(t) {
237-
return TopicService.processHrefs(topicInstance)
238-
.then(function(topic) {
239-
topic.pageTitle = topic.name + ' function';
240-
topic.canonicalLink = t.uri;
241-
return topic;
242-
});
243-
});
244-
}
245-
246-
});
247-
248-
}).then(function(topicJSON) {
249-
if(topicJSON === null) return res.notFound();
250-
return res.rstudio_redirect(301, topicJSON.uri);
251-
}).catch(function(err) {
252-
return res.negotiate(err);
253-
});
254-
158+
return res.redirect(302, "https://rdocumentation.org" + req.path);
255159
},
256160

257161
/**

0 commit comments

Comments
 (0)