mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 06:52:25 -06:00 
			
		
		
		
	[bugfix] allow setting empty email via instance patch (#665)
This commit is contained in:
		
					parent
					
						
							
								5f00d4980b
							
						
					
				
			
			
				commit
				
					
						7eacbd064b
					
				
			
		
					 2 changed files with 65 additions and 3 deletions
				
			
		| 
						 | 
					@ -187,6 +187,65 @@ func (suite *InstancePatchTestSuite) TestInstancePatch5() {
 | 
				
			||||||
	suite.Equal(`{"error":"Forbidden: user is not an admin so cannot update instance settings"}`, string(b))
 | 
						suite.Equal(`{"error":"Forbidden: user is not an admin so cannot update instance settings"}`, string(b))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (suite *InstancePatchTestSuite) TestInstancePatch6() {
 | 
				
			||||||
 | 
						requestBody, w, err := testrig.CreateMultipartFormData(
 | 
				
			||||||
 | 
							"", "",
 | 
				
			||||||
 | 
							map[string]string{
 | 
				
			||||||
 | 
								"contact_email": "",
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						bodyBytes := requestBody.Bytes()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set up the request
 | 
				
			||||||
 | 
						recorder := httptest.NewRecorder()
 | 
				
			||||||
 | 
						ctx := suite.newContext(recorder, http.MethodPatch, bodyBytes, instance.InstanceInformationPath, w.FormDataContentType())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// call the handler
 | 
				
			||||||
 | 
						suite.instanceModule.InstanceUpdatePATCHHandler(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// we should have OK because our request was valid
 | 
				
			||||||
 | 
						suite.Equal(http.StatusOK, recorder.Code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result := recorder.Result()
 | 
				
			||||||
 | 
						defer result.Body.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						b, err := io.ReadAll(result.Body)
 | 
				
			||||||
 | 
						suite.NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.Equal(`{"uri":"http://localhost:8080","title":"localhost:8080","description":"","short_description":"","email":"","version":"","registrations":true,"approval_required":true,"invites_enabled":false,"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"","max_toot_chars":5000}`, string(b))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (suite *InstancePatchTestSuite) TestInstancePatch7() {
 | 
				
			||||||
 | 
						requestBody, w, err := testrig.CreateMultipartFormData(
 | 
				
			||||||
 | 
							"", "",
 | 
				
			||||||
 | 
							map[string]string{
 | 
				
			||||||
 | 
								"contact_email": "not.an.email.address",
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						bodyBytes := requestBody.Bytes()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set up the request
 | 
				
			||||||
 | 
						recorder := httptest.NewRecorder()
 | 
				
			||||||
 | 
						ctx := suite.newContext(recorder, http.MethodPatch, bodyBytes, instance.InstanceInformationPath, w.FormDataContentType())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// call the handler
 | 
				
			||||||
 | 
						suite.instanceModule.InstanceUpdatePATCHHandler(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.Equal(http.StatusBadRequest, recorder.Code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result := recorder.Result()
 | 
				
			||||||
 | 
						defer result.Body.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						b, err := io.ReadAll(result.Body)
 | 
				
			||||||
 | 
						suite.NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.Equal(`{"error":"Bad Request: mail: missing '@' or angle-addr"}`, string(b))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestInstancePatchTestSuite(t *testing.T) {
 | 
					func TestInstancePatchTestSuite(t *testing.T) {
 | 
				
			||||||
	suite.Run(t, &InstancePatchTestSuite{})
 | 
						suite.Run(t, &InstancePatchTestSuite{})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -167,10 +167,13 @@ func (p *processor) InstancePatch(ctx context.Context, form *apimodel.InstanceSe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// validate & update site contact email if it's set on the form
 | 
						// validate & update site contact email if it's set on the form
 | 
				
			||||||
	if form.ContactEmail != nil {
 | 
						if form.ContactEmail != nil {
 | 
				
			||||||
		if err := validate.Email(*form.ContactEmail); err != nil {
 | 
							contactEmail := *form.ContactEmail
 | 
				
			||||||
 | 
							if contactEmail != "" {
 | 
				
			||||||
 | 
								if err := validate.Email(contactEmail); err != nil {
 | 
				
			||||||
				return nil, gtserror.NewErrorBadRequest(err, err.Error())
 | 
									return nil, gtserror.NewErrorBadRequest(err, err.Error())
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		i.ContactEmail = *form.ContactEmail
 | 
							}
 | 
				
			||||||
 | 
							i.ContactEmail = contactEmail
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// validate & update site short description if it's set on the form
 | 
						// validate & update site short description if it's set on the form
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue