|
|
@@ -46,6 +46,109 @@ const { plainTextResponse } = require('../../infrastructure/Response')
|
|
|
const ReferencesHandler = require('../References/ReferencesHandler')
|
|
|
const EditorRealTimeController = require('../Editor/EditorRealTimeController')
|
|
|
|
|
|
+function createLinkedFile(req, res, next) {
|
|
|
+ const { project_id: projectId } = req.params
|
|
|
+ const { name, provider, data, parent_folder_id: parentFolderId } = req.body
|
|
|
+ const userId = SessionManager.getLoggedInUserId(req.session)
|
|
|
+
|
|
|
+ const Agent = LinkedFilesController._getAgent(provider)
|
|
|
+ if (Agent == null) {
|
|
|
+ return res.sendStatus(400)
|
|
|
+ }
|
|
|
+
|
|
|
+ data.provider = provider
|
|
|
+ data.importedAt = new Date().toISOString()
|
|
|
+
|
|
|
+ return Agent.createLinkedFile(
|
|
|
+ projectId,
|
|
|
+ data,
|
|
|
+ name,
|
|
|
+ parentFolderId,
|
|
|
+ userId,
|
|
|
+ function (err, newFileId) {
|
|
|
+ if (err != null) {
|
|
|
+ return LinkedFilesController.handleError(err, req, res, next)
|
|
|
+ }
|
|
|
+ if (name.endsWith('.bib')) {
|
|
|
+ AnalyticsManager.recordEventForUserInBackground(
|
|
|
+ userId,
|
|
|
+ 'linked-bib-file',
|
|
|
+ {
|
|
|
+ integration: provider,
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return res.json({ new_file_id: newFileId })
|
|
|
+ }
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+function refreshLinkedFile(req, res, next) {
|
|
|
+ const { project_id: projectId, file_id: fileId } = req.params
|
|
|
+ const userId = SessionManager.getLoggedInUserId(req.session)
|
|
|
+
|
|
|
+ return LinkedFilesHandler.getFileById(
|
|
|
+ projectId,
|
|
|
+ fileId,
|
|
|
+ function (err, file, path, parentFolder) {
|
|
|
+ if (err != null) {
|
|
|
+ return next(err)
|
|
|
+ }
|
|
|
+ if (file == null) {
|
|
|
+ return res.sendStatus(404)
|
|
|
+ }
|
|
|
+ const { name } = file
|
|
|
+ const { linkedFileData } = file
|
|
|
+ if (
|
|
|
+ linkedFileData == null ||
|
|
|
+ (linkedFileData != null ? linkedFileData.provider : undefined) == null
|
|
|
+ ) {
|
|
|
+ return res.sendStatus(409)
|
|
|
+ }
|
|
|
+ const { provider } = linkedFileData
|
|
|
+ const parentFolderId = parentFolder._id
|
|
|
+ const Agent = LinkedFilesController._getAgent(provider)
|
|
|
+ if (Agent == null) {
|
|
|
+ return res.sendStatus(400)
|
|
|
+ }
|
|
|
+
|
|
|
+ linkedFileData.importedAt = new Date().toISOString()
|
|
|
+
|
|
|
+ Agent.refreshLinkedFile(
|
|
|
+ projectId,
|
|
|
+ linkedFileData,
|
|
|
+ name,
|
|
|
+ parentFolderId,
|
|
|
+ userId,
|
|
|
+ function (err, newFileId) {
|
|
|
+ if (err != null) {
|
|
|
+ return LinkedFilesController.handleError(err, req, res, next)
|
|
|
+ }
|
|
|
+ if (req.body.shouldReindexReferences) {
|
|
|
+ ReferencesHandler.indexAll(projectId, function (error, data) {
|
|
|
+ if (error) {
|
|
|
+ OError.tag(error, 'failed to index references', {
|
|
|
+ projectId,
|
|
|
+ })
|
|
|
+ return next(error)
|
|
|
+ }
|
|
|
+ EditorRealTimeController.emitToRoom(
|
|
|
+ projectId,
|
|
|
+ 'references:keys:updated',
|
|
|
+ data.keys,
|
|
|
+ true
|
|
|
+ )
|
|
|
+ res.json({ new_file_id: newFileId })
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ res.json({ new_file_id: newFileId })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
module.exports = LinkedFilesController = {
|
|
|
Agents: _.extend(
|
|
|
{
|
|
|
@@ -71,108 +174,9 @@ module.exports = LinkedFilesController = {
|
|
|
return LinkedFilesController.Agents[provider]
|
|
|
},
|
|
|
|
|
|
- createLinkedFile(req, res, next) {
|
|
|
- const { project_id: projectId } = req.params
|
|
|
- const { name, provider, data, parent_folder_id: parentFolderId } = req.body
|
|
|
- const userId = SessionManager.getLoggedInUserId(req.session)
|
|
|
-
|
|
|
- const Agent = LinkedFilesController._getAgent(provider)
|
|
|
- if (Agent == null) {
|
|
|
- return res.sendStatus(400)
|
|
|
- }
|
|
|
-
|
|
|
- data.provider = provider
|
|
|
- data.importedAt = new Date().toISOString()
|
|
|
-
|
|
|
- return Agent.createLinkedFile(
|
|
|
- projectId,
|
|
|
- data,
|
|
|
- name,
|
|
|
- parentFolderId,
|
|
|
- userId,
|
|
|
- function (err, newFileId) {
|
|
|
- if (err != null) {
|
|
|
- return LinkedFilesController.handleError(err, req, res, next)
|
|
|
- }
|
|
|
- if (name.endsWith('.bib')) {
|
|
|
- AnalyticsManager.recordEventForUserInBackground(
|
|
|
- userId,
|
|
|
- 'linked-bib-file',
|
|
|
- {
|
|
|
- integration: provider,
|
|
|
- }
|
|
|
- )
|
|
|
- }
|
|
|
- return res.json({ new_file_id: newFileId })
|
|
|
- }
|
|
|
- )
|
|
|
- },
|
|
|
-
|
|
|
- refreshLinkedFile(req, res, next) {
|
|
|
- const { project_id: projectId, file_id: fileId } = req.params
|
|
|
- const userId = SessionManager.getLoggedInUserId(req.session)
|
|
|
-
|
|
|
- return LinkedFilesHandler.getFileById(
|
|
|
- projectId,
|
|
|
- fileId,
|
|
|
- function (err, file, path, parentFolder) {
|
|
|
- if (err != null) {
|
|
|
- return next(err)
|
|
|
- }
|
|
|
- if (file == null) {
|
|
|
- return res.sendStatus(404)
|
|
|
- }
|
|
|
- const { name } = file
|
|
|
- const { linkedFileData } = file
|
|
|
- if (
|
|
|
- linkedFileData == null ||
|
|
|
- (linkedFileData != null ? linkedFileData.provider : undefined) == null
|
|
|
- ) {
|
|
|
- return res.sendStatus(409)
|
|
|
- }
|
|
|
- const { provider } = linkedFileData
|
|
|
- const parentFolderId = parentFolder._id
|
|
|
- const Agent = LinkedFilesController._getAgent(provider)
|
|
|
- if (Agent == null) {
|
|
|
- return res.sendStatus(400)
|
|
|
- }
|
|
|
-
|
|
|
- linkedFileData.importedAt = new Date().toISOString()
|
|
|
+ createLinkedFile,
|
|
|
|
|
|
- Agent.refreshLinkedFile(
|
|
|
- projectId,
|
|
|
- linkedFileData,
|
|
|
- name,
|
|
|
- parentFolderId,
|
|
|
- userId,
|
|
|
- function (err, newFileId) {
|
|
|
- if (err != null) {
|
|
|
- return LinkedFilesController.handleError(err, req, res, next)
|
|
|
- }
|
|
|
- if (req.body.shouldReindexReferences) {
|
|
|
- ReferencesHandler.indexAll(projectId, function (error, data) {
|
|
|
- if (error) {
|
|
|
- OError.tag(error, 'failed to index references', {
|
|
|
- projectId,
|
|
|
- })
|
|
|
- return next(error)
|
|
|
- }
|
|
|
- EditorRealTimeController.emitToRoom(
|
|
|
- projectId,
|
|
|
- 'references:keys:updated',
|
|
|
- data.keys,
|
|
|
- true
|
|
|
- )
|
|
|
- res.json({ new_file_id: newFileId })
|
|
|
- })
|
|
|
- } else {
|
|
|
- res.json({ new_file_id: newFileId })
|
|
|
- }
|
|
|
- }
|
|
|
- )
|
|
|
- }
|
|
|
- )
|
|
|
- },
|
|
|
+ refreshLinkedFile,
|
|
|
|
|
|
handleError(error, req, res, next) {
|
|
|
if (error instanceof AccessDeniedError) {
|