parent
e92e59bf52
commit
b81b3668e0
@ -0,0 +1,28 @@ |
||||
/* globals alerts */ |
||||
|
||||
Meteor.startup(function() { |
||||
Tracker.autorun(() => { |
||||
const user = Meteor.user(); |
||||
|
||||
if (user && Object.keys(user.banners || {}).length > 0) { |
||||
const firstBanner = Object.values(user.banners).sort((a, b) => b.priority - a.priority)[0]; |
||||
firstBanner.textArguments = firstBanner.textArguments || []; |
||||
|
||||
alerts.open({ |
||||
title: TAPi18n.__(firstBanner.title), |
||||
text: TAPi18n.__(firstBanner.text, ...firstBanner.textArguments), |
||||
modifiers: firstBanner.modifiers, |
||||
action() { |
||||
if (firstBanner.link) { |
||||
window.open(firstBanner.link, '_system'); |
||||
} |
||||
}, |
||||
onClose() { |
||||
Meteor.call('banner/dismiss', { |
||||
id: firstBanner.id |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
}); |
@ -0,0 +1,19 @@ |
||||
Package.describe({ |
||||
name: 'rocketchat:version-check', |
||||
version: '0.0.1', |
||||
summary: 'Check for new avaiable versions', |
||||
git: '' |
||||
}); |
||||
|
||||
Package.onUse(function(api) { |
||||
api.use([ |
||||
'mongo', |
||||
'ecmascript', |
||||
'rocketchat:lib', |
||||
'rocketchat:logger', |
||||
'percolate:synced-cron' |
||||
]); |
||||
|
||||
api.mainModule('client/client.js', 'client'); |
||||
api.mainModule('server/server.js', 'server'); |
||||
}); |
@ -0,0 +1,8 @@ |
||||
RocketChat.settings.addGroup('General', function() { |
||||
this.section('Update', function() { |
||||
this.add('Update_LatestAvailableVersion', '0.0.0', { |
||||
type: 'string', |
||||
readonly: true |
||||
}); |
||||
}); |
||||
}); |
@ -0,0 +1,14 @@ |
||||
export default { |
||||
versions: [{ |
||||
version: '0.61.2', |
||||
security: true, |
||||
infoUrl: 'https://rocket.chat' |
||||
}], |
||||
alerts: [{ |
||||
timestamp: '2018-02-19T22:56:23.290Z', |
||||
title: 'Alert title', |
||||
description: 'Alert description', |
||||
infoUrl: 'https://rocket.chat', |
||||
infoTitle: 'More information' |
||||
}] |
||||
}; |
@ -0,0 +1,54 @@ |
||||
import semver from 'semver'; |
||||
import getNewUpdates from './getNewUpdates'; |
||||
import logger from '../logger'; |
||||
|
||||
export default () => { |
||||
logger.info('Checking for version updates'); |
||||
|
||||
const { versions } = getNewUpdates(); |
||||
|
||||
const update = { |
||||
exists: false, |
||||
lastestVersion: null, |
||||
security: false |
||||
}; |
||||
|
||||
const lastCheckedVersion = RocketChat.settings.get('Update_LatestAvailableVersion'); |
||||
versions.forEach(version => { |
||||
if (semver.lte(version.version, lastCheckedVersion)) { |
||||
return; |
||||
} |
||||
|
||||
if (semver.lte(version.version, RocketChat.Info.version)) { |
||||
return; |
||||
} |
||||
|
||||
update.exists = true; |
||||
update.lastestVersion = version; |
||||
|
||||
if (version.security === true) { |
||||
update.security = true; |
||||
} |
||||
}); |
||||
|
||||
if (update.exists) { |
||||
RocketChat.settings.updateById('Update_LatestAvailableVersion', update.lastestVersion.version); |
||||
RocketChat.models.Roles.findUsersInRole('admin').forEach(adminUser => { |
||||
const msg = { |
||||
msg: `*${ TAPi18n.__('Update_your_RocketChat', adminUser.language) }*\n${ TAPi18n.__('New_version_available_(s)', update.lastestVersion.version, adminUser.language) }\n${ update.lastestVersion.infoUrl }`, |
||||
rid: [adminUser._id, 'rocket.cat'].sort().join('') |
||||
}; |
||||
|
||||
Meteor.runAsUser('rocket.cat', () => Meteor.call('sendMessage', msg)); |
||||
|
||||
RocketChat.models.Users.addBannerById(adminUser._id, { |
||||
id: 'versionUpdate', |
||||
priority: 10, |
||||
title: 'Update_your_RocketChat', |
||||
text: 'New_version_available_(s)', |
||||
textArguments: [update.lastestVersion.version], |
||||
link: update.lastestVersion.infoUrl |
||||
}); |
||||
}); |
||||
} |
||||
}; |
@ -0,0 +1,47 @@ |
||||
/* global MongoInternals */ |
||||
import os from 'os'; |
||||
import { HTTP } from 'meteor/http'; |
||||
import logger from '../logger'; |
||||
// import checkUpdate from '../checkUpdate';
|
||||
|
||||
export default () => { |
||||
try { |
||||
const uniqueID = RocketChat.models.Settings.findOne('uniqueID'); |
||||
const _oplogHandle = MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle; |
||||
const oplogEnabled = _oplogHandle && _oplogHandle.onOplogEntry && RocketChat.settings.get('Force_Disable_OpLog_For_Cache') !== true; |
||||
|
||||
const data = { |
||||
uniqueId: uniqueID.value, |
||||
installedAt: uniqueID.createdAt, |
||||
version: RocketChat.Info.version, |
||||
oplogEnabled, |
||||
osType: os.type(), |
||||
osPlatform: os.platform(), |
||||
osArch: os.arch(), |
||||
osRelease: os.release(), |
||||
nodeVersion: process.version, |
||||
deployMethod: process.env.DEPLOY_METHOD || 'tar', |
||||
deployPlatform: process.env.DEPLOY_PLATFORM || 'selfinstall' |
||||
}; |
||||
|
||||
const result = HTTP.get('https://releases.rocket.chat/updates/check', { |
||||
params: data |
||||
}); |
||||
|
||||
// const result = {
|
||||
// data: {
|
||||
// ...checkUpdate
|
||||
// }
|
||||
// };
|
||||
|
||||
return result.data; |
||||
} catch (error) { |
||||
// console.log(error);
|
||||
logger.error('Failed to get version updates', error); |
||||
|
||||
return { |
||||
versions: [], |
||||
alerts: [] |
||||
}; |
||||
} |
||||
}; |
@ -0,0 +1 @@ |
||||
export default new Logger('VersionCheck'); |
@ -0,0 +1,11 @@ |
||||
Meteor.methods({ |
||||
'banner/dismiss'({ id }) { |
||||
if (!Meteor.userId()) { |
||||
throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'banner/dismiss' }); |
||||
} |
||||
|
||||
RocketChat.models.Users.removeBannerById(this.userId, { |
||||
id |
||||
}); |
||||
} |
||||
}); |
@ -0,0 +1,29 @@ |
||||
/* globals SyncedCron */ |
||||
|
||||
import checkVersionUpdate from './functions/checkVersionUpdate'; |
||||
import './methods/banner_dismiss'; |
||||
import './addSettings'; |
||||
|
||||
const jobName = 'version_check'; |
||||
|
||||
if (SyncedCron.nextScheduledAtDate(jobName)) { |
||||
SyncedCron.remove(jobName); |
||||
} |
||||
|
||||
SyncedCron.add({ |
||||
name: jobName, |
||||
schedule: parser => parser.text('at 2:00 am'), |
||||
job() { |
||||
checkVersionUpdate(); |
||||
} |
||||
}); |
||||
|
||||
SyncedCron.start(); |
||||
|
||||
Meteor.startup(() => { |
||||
checkVersionUpdate(); |
||||
}); |
||||
|
||||
// Send email to admins
|
||||
// Save latest alert
|
||||
// ENV var to disable the check for update for our cloud
|
Loading…
Reference in new issue