The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/server/startup/migrations/v015.coffee

76 lines
3.0 KiB

RocketChat.Migrations.add
version: 15
up: ->
console.log 'Starting file migration'
oldFilesCollection = new Meteor.Collection 'cfs.Files.filerecord'
oldGridFSCollection = new Meteor.Collection 'cfs_gridfs.files.files'
oldChunkCollection = new Meteor.Collection 'cfs_gridfs.files.chunks'
newFilesCollection = RocketChat.models.Uploads
newGridFSCollection = new Meteor.Collection 'rocketchat_uploads.files'
newChunkCollection = new Meteor.Collection 'rocketchat_uploads.chunks'
oldFilesCollection.find({'copies.files.key': {$exists: true}}).forEach (cfsRecord) ->
nameParts = cfsRecord.original.name?.split('.')
extension = ''
url = "ufs/rocketchat_uploads/#{cfsRecord._id}"
console.log 'migrating file', url
if nameParts?.length > 1
extension = nameParts.pop()
url = url + '.' + extension
record =
_id: cfsRecord._id
name: cfsRecord.original.name or ''
size: cfsRecord.original.size
type: cfsRecord.original.type
complete: true
uploading: false
store: "rocketchat_uploads"
extension: extension
userId: cfsRecord.userId
uploadedAt: cfsRecord.updatedAt
url: Meteor.absoluteUrl() + url
newFilesCollection.insert record
oldGridFsFile = oldGridFSCollection.findOne({_id: new Meteor.Collection.ObjectID(cfsRecord.copies.files.key)})
newGridFSCollection.insert
_id: cfsRecord._id
filename: cfsRecord._id
contentType: oldGridFsFile.contentType
length: oldGridFsFile.length
chunkSize: oldGridFsFile.chunkSize
uploadDate: oldGridFsFile.uploadDate
aliases: null
metadata: null
md5: oldGridFsFile.md5
oldChunkCollection.find({files_id: new Meteor.Collection.ObjectID(cfsRecord.copies.files.key)}).forEach (oldChunk) ->
newChunkCollection.insert
_id: oldChunk._id
files_id: cfsRecord._id
n: oldChunk.n
data: oldChunk.data
RocketChat.models.Messages.find({$or: [{ 'urls.url': "https://demo.rocket.chat/cfs/files/Files/#{cfsRecord._id}" }, { 'urls.url': "https://rocket.chat/cfs/files/Files/#{cfsRecord._id}" }]}).forEach (message) ->
for urlsItem in message.urls
if urlsItem.url is "https://demo.rocket.chat/cfs/files/Files/#{cfsRecord._id}" or urlsItem.url is "https://rocket.chat/cfs/files/Files/#{cfsRecord._id}"
urlsItem.url = Meteor.absoluteUrl() + url
if urlsItem.parsedUrl?.pathname?
urlsItem.parsedUrl.pathname = "/#{url}"
message.msg = message.msg.replace "https://demo.rocket.chat/cfs/files/Files/#{cfsRecord._id}", Meteor.absoluteUrl() + url
message.msg = message.msg.replace "https://rocket.chat/cfs/files/Files/#{cfsRecord._id}", Meteor.absoluteUrl() + url
RocketChat.models.Messages.update {_id: message._id}, {$set: {urls: message.urls, msg: message.msg}}
oldFilesCollection.remove _id: cfsRecord._id
oldGridFSCollection.remove _id: oldGridFsFile._id
oldChunkCollection.remove files_id: new Meteor.Collection.ObjectID(cfsRecord.copies.files.key)
console.log 'End of file migration'