mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #1694 from sharelatex/hb-clear-ip-notifications
Remove notification for university enrolment on affiliation add GitOrigin-RevId: 67df66ad6c6e9e16b6573fa15eb34293adaa0287
This commit is contained in:
parent
0773311805
commit
5edead4446
5 changed files with 25 additions and 16 deletions
|
@ -132,7 +132,7 @@ module.exports = AuthenticationController =
|
|||
|
||||
ipMatchCheck: (req, user) ->
|
||||
if req.ip != user.lastLoginIp
|
||||
NotificationsBuilder.ipMatcherAffiliation(user._id, req.ip).create()
|
||||
NotificationsBuilder.ipMatcherAffiliation(user._id).create(req.ip)
|
||||
UserUpdater.updateUser user._id.toString(), {
|
||||
$set: { "lastLoginIp": req.ip }
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ logger = require("logger-sharelatex")
|
|||
metrics = require("metrics-sharelatex")
|
||||
settings = require "settings-sharelatex"
|
||||
request = require "request"
|
||||
NotificationsBuilder = require("../Notifications/NotificationsBuilder")
|
||||
|
||||
module.exports = InstitutionsAPI =
|
||||
getInstitutionAffiliations: (institutionId, callback = (error, body) ->) ->
|
||||
|
@ -26,7 +27,6 @@ module.exports = InstitutionsAPI =
|
|||
defaultErrorMessage: "Couldn't get user affiliations"
|
||||
}, (error, body) -> callback(error, body or [])
|
||||
|
||||
|
||||
addAffiliation: (userId, email, affiliationOptions, callback) ->
|
||||
unless callback? # affiliationOptions is optional
|
||||
callback = affiliationOptions
|
||||
|
@ -38,8 +38,15 @@ module.exports = InstitutionsAPI =
|
|||
path: "/api/v2/users/#{userId.toString()}/affiliations"
|
||||
body: { email, university, department, role, confirmedAt }
|
||||
defaultErrorMessage: "Couldn't create affiliation"
|
||||
}, callback
|
||||
|
||||
}, (error, body) ->
|
||||
if error
|
||||
return callback(error, body)
|
||||
# have notifications delete any ip matcher notifications for this university
|
||||
logger.log university
|
||||
NotificationsBuilder.ipMatcherAffiliation(userId).read university?.id, (err) ->
|
||||
if err
|
||||
logger.err err:err, "Something went wrong marking ip notifications read"
|
||||
callback(error, body)
|
||||
|
||||
removeAffiliation: (userId, email, callback = (error) ->) ->
|
||||
makeAffiliationRequest {
|
||||
|
|
|
@ -37,11 +37,9 @@ module.exports =
|
|||
read: (callback=()->) ->
|
||||
NotificationsHandler.markAsReadByKeyOnly @key, callback
|
||||
|
||||
ipMatcherAffiliation: (userId, ip) ->
|
||||
key: "ip-matched-affiliation-#{ip}"
|
||||
create: (callback=()->) ->
|
||||
ipMatcherAffiliation: (userId) ->
|
||||
create: (ip, callback=()->) ->
|
||||
return null unless settings?.apis?.v1?.url # service is not configured
|
||||
_key = @key
|
||||
request {
|
||||
method: 'GET'
|
||||
url: "#{settings.apis.v1.url}/api/v2/users/#{userId}/ip_matcher"
|
||||
|
@ -53,12 +51,13 @@ module.exports =
|
|||
return error if error?
|
||||
return null unless response.statusCode == 200
|
||||
|
||||
key = "ip-matched-affiliation-#{body.id}"
|
||||
messageOpts =
|
||||
university_id: body.id
|
||||
university_name: body.name
|
||||
content: body.enrolment_ad_html
|
||||
logger.log user_id:userId, key:_key, "creating notification key for user"
|
||||
NotificationsHandler.createNotification userId, _key, "notification_ip_matched_affiliation", messageOpts, null, false, callback
|
||||
logger.log user_id:userId, key:key, "creating notification key for user"
|
||||
NotificationsHandler.createNotification userId, key, "notification_ip_matched_affiliation", messageOpts, null, false, callback
|
||||
|
||||
read: (callback = ->)->
|
||||
NotificationsHandler.markAsReadWithKey userId, @key, callback
|
||||
read: (university_id, callback = ->)->
|
||||
key = "ip-matched-affiliation-#{university_id}"
|
||||
NotificationsHandler.markAsReadWithKey userId, key, callback
|
||||
|
|
|
@ -13,11 +13,14 @@ describe "InstitutionsAPI", ->
|
|||
@logger = err: sinon.stub(), log: ->
|
||||
@settings = apis: { v1: { url: 'v1.url', user: '', pass: '' } }
|
||||
@request = sinon.stub()
|
||||
@ipMatcherNotification = read: @markAsReadIpMatcher = sinon.stub().callsArgWith(1, null)
|
||||
@InstitutionsAPI = SandboxedModule.require modulePath, requires:
|
||||
"logger-sharelatex": @logger
|
||||
"metrics-sharelatex": timeAsyncMethod: sinon.stub()
|
||||
'settings-sharelatex': @settings
|
||||
'request': @request
|
||||
"../Notifications/NotificationsBuilder":
|
||||
ipMatcherAffiliation: sinon.stub().returns(@ipMatcherNotification)
|
||||
|
||||
@stubbedUser =
|
||||
_id: "3131231"
|
||||
|
@ -126,6 +129,7 @@ describe "InstitutionsAPI", ->
|
|||
body.department.should.equal affiliationOptions.department
|
||||
body.role.should.equal affiliationOptions.role
|
||||
body.confirmedAt.should.equal affiliationOptions.confirmedAt
|
||||
@markAsReadIpMatcher.calledOnce.should.equal true
|
||||
done()
|
||||
|
||||
it 'handle error', (done)->
|
||||
|
|
|
@ -25,15 +25,14 @@ describe 'NotificationsBuilder', ->
|
|||
|
||||
it 'should call v1 and create affiliation notifications', (done)->
|
||||
ip = '192.168.0.1'
|
||||
@controller.ipMatcherAffiliation(user_id, ip).create (callback)=>
|
||||
@controller.ipMatcherAffiliation(user_id).create ip, (callback)=>
|
||||
@request.calledOnce.should.equal true
|
||||
expectedOpts =
|
||||
university_id: @body.id
|
||||
university_name: @body.name
|
||||
content: @body.enrolment_ad_html
|
||||
@handler.createNotification.calledWith(
|
||||
user_id,
|
||||
"ip-matched-affiliation-#{ip}",
|
||||
"ip-matched-affiliation-#{@body.id}",
|
||||
"notification_ip_matched_affiliation",
|
||||
expectedOpts
|
||||
).should.equal true
|
||||
|
|
Loading…
Reference in a new issue