mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 15:22:26 -05:00 
			
		
		
		
	Fix instance account not being created (#310)
* Rework 'CreateInstanceAccount' with better checking logic * add test for create instance account
This commit is contained in:
		
					parent
					
						
							
								d81a123473
							
						
					
				
			
			
				commit
				
					
						ff7c96caa3
					
				
			
		
					 2 changed files with 63 additions and 6 deletions
				
			
		|  | @ -178,18 +178,19 @@ func (a *adminDB) NewSignup(ctx context.Context, username string, reason string, | ||||||
| func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error { | func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error { | ||||||
| 	username := a.config.Host | 	username := a.config.Host | ||||||
| 
 | 
 | ||||||
| 	// check if instance account already exists | 	q := a.conn. | ||||||
| 	existsQ := a.conn. |  | ||||||
| 		NewSelect(). | 		NewSelect(). | ||||||
| 		Model(>smodel.Account{}). | 		Model(>smodel.Account{}). | ||||||
| 		Where("username = ?", username). | 		Where("username = ?", username). | ||||||
| 		WhereGroup(" AND ", whereEmptyOrNull("domain")) | 		WhereGroup(" AND ", whereEmptyOrNull("domain")) | ||||||
| 	count, err := existsQ.Count(ctx) | 
 | ||||||
| 	if err != nil && count == 1 { | 	exists, err := a.conn.Exists(ctx, q) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if exists { | ||||||
| 		logrus.Infof("instance account %s already exists", username) | 		logrus.Infof("instance account %s already exists", username) | ||||||
| 		return nil | 		return nil | ||||||
| 	} else if err != sql.ErrNoRows { |  | ||||||
| 		return a.conn.ProcessError(err) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	key, err := rsa.GenerateKey(rand.Reader, 2048) | 	key, err := rsa.GenerateKey(rand.Reader, 2048) | ||||||
|  |  | ||||||
							
								
								
									
										56
									
								
								internal/db/bundb/admin_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								internal/db/bundb/admin_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | ||||||
|  | /* | ||||||
|  |    GoToSocial | ||||||
|  |    Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org | ||||||
|  | 
 | ||||||
|  |    This program is free software: you can redistribute it and/or modify | ||||||
|  |    it under the terms of the GNU Affero General Public License as published by | ||||||
|  |    the Free Software Foundation, either version 3 of the License, or | ||||||
|  |    (at your option) any later version. | ||||||
|  | 
 | ||||||
|  |    This program is distributed in the hope that it will be useful, | ||||||
|  |    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |    GNU Affero General Public License for more details. | ||||||
|  | 
 | ||||||
|  |    You should have received a copy of the GNU Affero General Public License | ||||||
|  |    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package bundb_test | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/stretchr/testify/suite" | ||||||
|  | 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type AdminTestSuite struct { | ||||||
|  | 	BunDBStandardTestSuite | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (suite *AdminTestSuite) TestCreateInstanceAccount() { | ||||||
|  | 	// we need to take an empty db for this... | ||||||
|  | 	testrig.StandardDBTeardown(suite.db) | ||||||
|  | 	// ...with tables created but no data | ||||||
|  | 	testrig.CreateTestTables(suite.db) | ||||||
|  | 
 | ||||||
|  | 	// make sure there's no instance account in the db yet | ||||||
|  | 	acct, err := suite.db.GetInstanceAccount(context.Background(), suite.config.Host) | ||||||
|  | 	suite.Error(err) | ||||||
|  | 	suite.Nil(acct) | ||||||
|  | 
 | ||||||
|  | 	// create it | ||||||
|  | 	err = suite.db.CreateInstanceAccount(context.Background()) | ||||||
|  | 	suite.NoError(err) | ||||||
|  | 
 | ||||||
|  | 	// and now check it exists | ||||||
|  | 	acct, err = suite.db.GetInstanceAccount(context.Background(), suite.config.Host) | ||||||
|  | 	suite.NoError(err) | ||||||
|  | 	suite.NotNil(acct) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestAdminTestSuite(t *testing.T) { | ||||||
|  | 	suite.Run(t, new(AdminTestSuite)) | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue