mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 02:02:25 -05:00 
			
		
		
		
	[bugfix] Fix nil ptr exception on creating user without running server first (#4094)
# Description > If this is a code change, please include a summary of what you've coded, and link to the issue(s) it closes/implements. > > If this is a documentation change, please briefly describe what you've changed and why. closes https://codeberg.org/superseriousbusiness/gotosocial/issues/4049 by removing the silly defer statement. Adds a test too, and a warning in the docs. ## Checklist Please put an x inside each checkbox to indicate that you've read and followed it: `[ ]` -> `[x]` If this is a documentation change, only the first checkbox must be filled (you can delete the others if you want). - [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md). - [x] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat. - [x] I/we have not leveraged AI to create the proposed changes. - [x] I/we have performed a self-review of added code. - [x] I/we have written code that is legible and maintainable by others. - [x] I/we have commented the added code, particularly in hard-to-understand areas. - [x] I/we have made any necessary changes to documentation. - [x] I/we have added tests that cover new code. - [x] I/we have run tests and they pass locally with the changes. - [x] I/we have run `go fmt ./...` and `golangci-lint run`. Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4094 Co-authored-by: tobi <tobi.smethurst@protonmail.com> Co-committed-by: tobi <tobi.smethurst@protonmail.com>
This commit is contained in:
		
					parent
					
						
							
								75100649ff
							
						
					
				
			
			
				commit
				
					
						307cfd0fdb
					
				
			
		
					 3 changed files with 39 additions and 11 deletions
				
			
		|  | @ -57,6 +57,9 @@ Contains `account`, `export`, `import`, and `media` subcommands. | |||
| 
 | ||||
| This command can be used to create a new account on your instance. | ||||
| 
 | ||||
| !!! Warning | ||||
|     You must have launched the server at least once before running this command, to initialize essential entries in the database. | ||||
| 
 | ||||
| `gotosocial admin account create --help`: | ||||
| 
 | ||||
| ```text | ||||
|  |  | |||
|  | @ -165,15 +165,11 @@ func (a *adminDB) NewSignup(ctx context.Context, newSignup gtsmodel.NewSignup) ( | |||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		// Pin account to (new) | ||||
| 		// user before returning. | ||||
| 		user.Account = account | ||||
| 	}() | ||||
| 
 | ||||
| 	// If there's already a | ||||
| 	// user for this account, | ||||
| 	// just pin acct + return. | ||||
| 	if user != nil { | ||||
| 		// Already had a user for this | ||||
| 		// account, just return that. | ||||
| 		user.Account = account | ||||
| 		return user, nil | ||||
| 	} | ||||
| 
 | ||||
|  | @ -194,13 +190,21 @@ func (a *adminDB) NewSignup(ctx context.Context, newSignup gtsmodel.NewSignup) ( | |||
| 	} | ||||
| 
 | ||||
| 	// If no app ID was set, | ||||
| 	// use the instance app ID. | ||||
| 	// get the instance app | ||||
| 	// and use its ID. | ||||
| 	if newSignup.AppID == "" { | ||||
| 		instanceApp, err := a.state.DB.GetInstanceApplication(ctx) | ||||
| 		if err != nil { | ||||
| 		if err != nil && !errors.Is(err, db.ErrNoEntries) { | ||||
| 			err := gtserror.Newf("db error getting instance app: %w", err) | ||||
| 			return nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		if instanceApp == nil { | ||||
| 			const errText = "instance application not yet created, run the server at least once *before* creating users" | ||||
| 			err := gtserror.New(errText) | ||||
| 			return nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		newSignup.AppID = instanceApp.ID | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ import ( | |||
| 	"context" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	gtsmodel "code.superseriousbusiness.org/gotosocial/internal/db/bundb/migrations/20211113114307_init" | ||||
| 	"code.superseriousbusiness.org/gotosocial/internal/gtsmodel" | ||||
| 	"code.superseriousbusiness.org/gotosocial/testrig" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| ) | ||||
|  | @ -92,6 +92,27 @@ func (suite *AdminTestSuite) TestCreateInstanceAccount() { | |||
| 	suite.NotNil(acct) | ||||
| } | ||||
| 
 | ||||
| func (suite *AdminTestSuite) TestNewSignupWithNoInstanceApp() { | ||||
| 	ctx := context.Background() | ||||
| 
 | ||||
| 	// Delete the instance app. | ||||
| 	if err := suite.state.DB.DeleteApplicationByID( | ||||
| 		ctx, | ||||
| 		suite.testApplications["instance_application"].ID, | ||||
| 	); err != nil { | ||||
| 		suite.FailNow(err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	// Try to create a new signup with no provided app ID, | ||||
| 	// it should fail as it can't fetch the instance app. | ||||
| 	_, err := suite.state.DB.NewSignup(ctx, gtsmodel.NewSignup{ | ||||
| 		Username: "whatever", | ||||
| 		Email:    "whatever@wherever.org", | ||||
| 		Password: "really_good_password", | ||||
| 	}) | ||||
| 	suite.EqualError(err, "NewSignup: instance application not yet created, run the server at least once *before* creating users") | ||||
| } | ||||
| 
 | ||||
| func TestAdminTestSuite(t *testing.T) { | ||||
| 	suite.Run(t, new(AdminTestSuite)) | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue