mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
		
							
								
								
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,3 +1,18 @@ | |||||||
|  | #### v3.0.1 (2023-05-02) | ||||||
|  |  | ||||||
|  | ##### Chores | ||||||
|  |  | ||||||
|  | *  incrementing version number - v3.0.0 (224e08cd) | ||||||
|  | *  update changelog for v3.0.0 (56ad381f) | ||||||
|  |  | ||||||
|  | ##### Bug Fixes | ||||||
|  |  | ||||||
|  | *  #11554, email requirement bypass by sending in whitespace (2b8dd3d2) | ||||||
|  | *  update openapi spec to specify optional `expiry` argument available to be passed in via request body. (b3787bd5) | ||||||
|  | *  #11545, wrong message shown to new users re: email confirmation (2b70063e) | ||||||
|  | *  black on red coloration on error when a bad reset code is received (604a8f7e) | ||||||
|  | *  use query param sort over user setting if it's set (9484ddc3) | ||||||
|  |  | ||||||
| #### v3.0.0 (2023-04-26) | #### v3.0.0 (2023-04-26) | ||||||
|  |  | ||||||
| ##### Breaking Changes | ##### Breaking Changes | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "name": "nodebb", |     "name": "nodebb", | ||||||
|     "license": "GPL-3.0", |     "license": "GPL-3.0", | ||||||
|     "description": "NodeBB Forum", |     "description": "NodeBB Forum", | ||||||
|     "version": "3.0.0", |     "version": "3.0.1", | ||||||
|     "homepage": "https://www.nodebb.org", |     "homepage": "https://www.nodebb.org", | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|   | |||||||
| @@ -11,6 +11,17 @@ put: | |||||||
|       required: true |       required: true | ||||||
|       description: a valid topic id |       description: a valid topic id | ||||||
|       example: 1 |       example: 1 | ||||||
|  |   requestBody: | ||||||
|  |     required: false | ||||||
|  |     content: | ||||||
|  |       application/json: | ||||||
|  |         schema: | ||||||
|  |           type: object | ||||||
|  |           properties: | ||||||
|  |             expiry: | ||||||
|  |               type: number | ||||||
|  |               description: A UNIX timestamp representing the moment the topic will be unpinned. | ||||||
|  |               example: 1585337827953 | ||||||
|   responses: |   responses: | ||||||
|     '200': |     '200': | ||||||
|       description: Topic successfully pinned |       description: Topic successfully pinned | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ define('messages', ['bootbox', 'translator', 'storage', 'alerts', 'hooks'], func | |||||||
| 			}, | 			}, | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		if (!app.user.email) { | 		if (!app.user.email && !app.user.isEmailConfirmSent) { | ||||||
| 			msg.message = '[[error:no-email-to-confirm]]'; | 			msg.message = '[[error:no-email-to-confirm]]'; | ||||||
| 			msg.clickfn = function () { | 			msg.clickfn = function () { | ||||||
| 				alerts.remove('email_confirm'); | 				alerts.remove('email_confirm'); | ||||||
|   | |||||||
| @@ -48,6 +48,10 @@ Interstitials.email = async (data) => { | |||||||
| 			hasPending, | 			hasPending, | ||||||
| 		}, | 		}, | ||||||
| 		callback: async (userData, formData) => { | 		callback: async (userData, formData) => { | ||||||
|  | 			if (formData.email) { | ||||||
|  | 				formData.email = String(formData.email).trim(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			// Validate and send email confirmation | 			// Validate and send email confirmation | ||||||
| 			if (userData.uid) { | 			if (userData.uid) { | ||||||
| 				const isSelf = parseInt(userData.uid, 10) === parseInt(data.req.uid, 10); | 				const isSelf = parseInt(userData.uid, 10) === parseInt(data.req.uid, 10); | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ | |||||||
| 	</form> | 	</form> | ||||||
| </div> | </div> | ||||||
| {{{ else }}} | {{{ else }}} | ||||||
| <div class="card bg-danger"> | <div class="card text-bg-danger"> | ||||||
| 	<h5 class="card-header"> | 	<h5 class="card-header"> | ||||||
| 		[[reset_password:wrong_reset_code.title]] | 		[[reset_password:wrong_reset_code.title]] | ||||||
| 	</h5> | 	</h5> | ||||||
|   | |||||||
| @@ -448,7 +448,10 @@ describe('API', async () => { | |||||||
|  |  | ||||||
| 					let body = {}; | 					let body = {}; | ||||||
| 					let type = 'json'; | 					let type = 'json'; | ||||||
| 					if (context[method].hasOwnProperty('requestBody') && context[method].requestBody.content['application/json']) { | 					if ( | ||||||
|  | 						context[method].hasOwnProperty('requestBody') && | ||||||
|  | 						context[method].requestBody.required !== false && | ||||||
|  | 						context[method].requestBody.content['application/json']) { | ||||||
| 						body = buildBody(context[method].requestBody.content['application/json'].schema.properties); | 						body = buildBody(context[method].requestBody.content['application/json'].schema.properties); | ||||||
| 					} else if (context[method].hasOwnProperty('requestBody') && context[method].requestBody.content['multipart/form-data']) { | 					} else if (context[method].hasOwnProperty('requestBody') && context[method].requestBody.content['multipart/form-data']) { | ||||||
| 						type = 'form'; | 						type = 'form'; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user