@@ -133,12 +133,31 @@ async function updateMember (currentUser, handle, query, data) {
133
133
( ! member . email || data . email . trim ( ) . toLowerCase ( ) !== member . email . trim ( ) . toLowerCase ( ) )
134
134
135
135
if ( emailChanged ) {
136
- data . newEmail = data . email
137
- delete data . email
138
- data . emailVerifyToken = uuid ( )
139
- data . emailVerifyTokenDate = new Date ( new Date ( ) . getTime ( ) + Number ( config . VERIFY_TOKEN_EXPIRATION ) * 60000 ) . toISOString ( )
140
- data . newEmailVerifyToken = uuid ( )
141
- data . newEmailVerifyTokenDate = new Date ( new Date ( ) . getTime ( ) + Number ( config . VERIFY_TOKEN_EXPIRATION ) * 60000 ) . toISOString ( )
136
+ // check if the new email exists in elastic
137
+ const esCheckEmail = {
138
+ index : config . ES . MEMBER_PROFILE_ES_INDEX ,
139
+ type : config . ES . MEMBER_PROFILE_ES_TYPE ,
140
+ body : {
141
+ query : {
142
+ bool : {
143
+ filter : [ {
144
+ match_phrase : { email : data . email }
145
+ } ]
146
+ }
147
+ }
148
+ }
149
+ }
150
+ let checkEmail = await esClient . count ( esCheckEmail )
151
+ if ( checkEmail . count == 0 ) {
152
+ data . newEmail = data . email
153
+ delete data . email
154
+ data . emailVerifyToken = uuid ( )
155
+ data . emailVerifyTokenDate = new Date ( new Date ( ) . getTime ( ) + Number ( config . VERIFY_TOKEN_EXPIRATION ) * 60000 ) . toISOString ( )
156
+ data . newEmailVerifyToken = uuid ( )
157
+ data . newEmailVerifyTokenDate = new Date ( new Date ( ) . getTime ( ) + Number ( config . VERIFY_TOKEN_EXPIRATION ) * 60000 ) . toISOString ( )
158
+ } else {
159
+ throw new errors . EmailRegisteredError ( `Email "${ data . email } " is already registered` )
160
+ }
142
161
}
143
162
// update member in db
144
163
member . updatedAt = new Date ( ) . getTime ( )
@@ -152,7 +171,7 @@ async function updateMember (currentUser, handle, query, data) {
152
171
data : {
153
172
subject : 'Topcoder - Email Change Verification' ,
154
173
userHandle : member . handle ,
155
- verificationAgreeUrl : ( decodeURI ( query . verifyUrl ) || config . EMAIL_VERIFY_AGREE_URL ) . replace (
174
+ verificationAgreeUrl : ( config . EMAIL_VERIFY_AGREE_URL ) . replace (
156
175
'<emailVerifyToken>' , data . emailVerifyToken ) ,
157
176
verificationDisagreeUrl : config . EMAIL_VERIFY_DISAGREE_URL
158
177
} ,
@@ -163,7 +182,7 @@ async function updateMember (currentUser, handle, query, data) {
163
182
data : {
164
183
subject : 'Topcoder - Email Change Verification' ,
165
184
userHandle : member . handle ,
166
- verificationAgreeUrl : ( decodeURI ( query . verifyUrl ) || config . EMAIL_VERIFY_AGREE_URL ) . replace (
185
+ verificationAgreeUrl : ( config . EMAIL_VERIFY_AGREE_URL ) . replace (
167
186
'<emailVerifyToken>' , data . newEmailVerifyToken ) ,
168
187
verificationDisagreeUrl : config . EMAIL_VERIFY_DISAGREE_URL
169
188
} ,
@@ -178,7 +197,6 @@ updateMember.schema = {
178
197
currentUser : Joi . any ( ) ,
179
198
handle : Joi . string ( ) . required ( ) ,
180
199
query : Joi . object ( ) . keys ( {
181
- verifyUrl : Joi . string ( ) . uri ( ) ,
182
200
fields : Joi . string ( )
183
201
} ) ,
184
202
data : Joi . object ( ) . keys ( {
0 commit comments