mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-29 04:22:24 -05:00 
			
		
		
		
	[feature] Configurable max profile fields (#4175)
# 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. Profile fields, right? So I made them a configurable amount and show them on the instance features. Closes #1876 All changes I did are described in the commits. I tried to cover as much as possible, but I don't know this codebase to know what I've missed. I have tested it manually and it works (settings page, `/api/v1/instances`, server-side validation). Not done: - An "Add profile fields" button, so that instances with a high profile fields count (e.g. 100) aren't an issue when trying to skip the profile fields (in some form, accessibility) - Updating the swagger docs that specify a specific amount of profile fields for the updating endpoint (not sure how to proceed with that) - Unchecked checklist items ## 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. - [ ] I/we have commented the added code, particularly in hard-to-understand areas. - [X] I/we have made any necessary changes to documentation. - [ ] 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`. Notes about checklist: - ["Approval" to work on this reference](https://matrix.to/#/!mlPctfMHjyopbOnliM:superseriousbusiness.org/$P0Z1Qmny6GNIgxhre69gll8KSD690HC8nVvNpXmu3nU?via=superseriousbusiness.org&via=matrix.org&via=tchncs.de) - `golangci-lint run` output ignored due to complaining about ffmpeg and some other code I didn't touch Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4175 Reviewed-by: kim <gruf@noreply.codeberg.org> Co-authored-by: Jackson <jackson@jacksonchen666.com> Co-committed-by: Jackson <jackson@jacksonchen666.com>
This commit is contained in:
		
					parent
					
						
							
								ca12742a7a
							
						
					
				
			
			
				commit
				
					
						3ba49aed45
					
				
			
		
					 14 changed files with 75 additions and 17 deletions
				
			
		|  | @ -79,6 +79,7 @@ func (cfg *Configuration) RegisterFlags(flags *pflag.FlagSet) { | |||
| 	flags.Int("accounts-registration-backlog-limit", cfg.AccountsRegistrationBacklogLimit, "Limit how big the 'accounts pending approval' queue can grow before registration is closed. 0 or less = no limit.") | ||||
| 	flags.Bool("accounts-allow-custom-css", cfg.AccountsAllowCustomCSS, "Allow accounts to enable custom CSS for their profile pages and statuses.") | ||||
| 	flags.Int("accounts-custom-css-length", cfg.AccountsCustomCSSLength, "Maximum permitted length (characters) of custom CSS for accounts.") | ||||
| 	flags.Int("accounts-max-profile-fields", cfg.AccountsMaxProfileFields, "Maximum amount of profile fields an account can have.") | ||||
| 	flags.Int("media-description-min-chars", cfg.MediaDescriptionMinChars, "Min required chars for an image description") | ||||
| 	flags.Int("media-description-max-chars", cfg.MediaDescriptionMaxChars, "Max permitted chars for an image description") | ||||
| 	flags.Int("media-remote-cache-days", cfg.MediaRemoteCacheDays, "Number of days to locally cache media from remote instances. If set to 0, remote media will be kept indefinitely.") | ||||
|  | @ -206,7 +207,7 @@ func (cfg *Configuration) RegisterFlags(flags *pflag.FlagSet) { | |||
| } | ||||
| 
 | ||||
| func (cfg *Configuration) MarshalMap() map[string]any { | ||||
| 	cfgmap := make(map[string]any, 181) | ||||
| 	cfgmap := make(map[string]any, 182) | ||||
| 	cfgmap["log-level"] = cfg.LogLevel | ||||
| 	cfgmap["log-timestamp-format"] = cfg.LogTimestampFormat | ||||
| 	cfgmap["log-db-queries"] = cfg.LogDbQueries | ||||
|  | @ -257,6 +258,7 @@ func (cfg *Configuration) MarshalMap() map[string]any { | |||
| 	cfgmap["accounts-registration-backlog-limit"] = cfg.AccountsRegistrationBacklogLimit | ||||
| 	cfgmap["accounts-allow-custom-css"] = cfg.AccountsAllowCustomCSS | ||||
| 	cfgmap["accounts-custom-css-length"] = cfg.AccountsCustomCSSLength | ||||
| 	cfgmap["accounts-max-profile-fields"] = cfg.AccountsMaxProfileFields | ||||
| 	cfgmap["media-description-min-chars"] = cfg.MediaDescriptionMinChars | ||||
| 	cfgmap["media-description-max-chars"] = cfg.MediaDescriptionMaxChars | ||||
| 	cfgmap["media-remote-cache-days"] = cfg.MediaRemoteCacheDays | ||||
|  | @ -805,6 +807,14 @@ func (cfg *Configuration) UnmarshalMap(cfgmap map[string]any) error { | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ival, ok := cfgmap["accounts-max-profile-fields"]; ok { | ||||
| 		var err error | ||||
| 		cfg.AccountsMaxProfileFields, err = cast.ToIntE(ival) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("error casting %#v -> int for 'accounts-max-profile-fields': %w", ival, err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ival, ok := cfgmap["media-description-min-chars"]; ok { | ||||
| 		var err error | ||||
| 		cfg.MediaDescriptionMinChars, err = cast.ToIntE(ival) | ||||
|  | @ -3138,6 +3148,31 @@ func GetAccountsCustomCSSLength() int { return global.GetAccountsCustomCSSLength | |||
| // SetAccountsCustomCSSLength safely sets the value for global configuration 'AccountsCustomCSSLength' field | ||||
| func SetAccountsCustomCSSLength(v int) { global.SetAccountsCustomCSSLength(v) } | ||||
| 
 | ||||
| // AccountsMaxProfileFieldsFlag returns the flag name for the 'AccountsMaxProfileFields' field | ||||
| func AccountsMaxProfileFieldsFlag() string { return "accounts-max-profile-fields" } | ||||
| 
 | ||||
| // GetAccountsMaxProfileFields safely fetches the Configuration value for state's 'AccountsMaxProfileFields' field | ||||
| func (st *ConfigState) GetAccountsMaxProfileFields() (v int) { | ||||
| 	st.mutex.RLock() | ||||
| 	v = st.config.AccountsMaxProfileFields | ||||
| 	st.mutex.RUnlock() | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // SetAccountsMaxProfileFields safely sets the Configuration value for state's 'AccountsMaxProfileFields' field | ||||
| func (st *ConfigState) SetAccountsMaxProfileFields(v int) { | ||||
| 	st.mutex.Lock() | ||||
| 	defer st.mutex.Unlock() | ||||
| 	st.config.AccountsMaxProfileFields = v | ||||
| 	st.reloadToViper() | ||||
| } | ||||
| 
 | ||||
| // GetAccountsMaxProfileFields safely fetches the value for global configuration 'AccountsMaxProfileFields' field | ||||
| func GetAccountsMaxProfileFields() int { return global.GetAccountsMaxProfileFields() } | ||||
| 
 | ||||
| // SetAccountsMaxProfileFields safely sets the value for global configuration 'AccountsMaxProfileFields' field | ||||
| func SetAccountsMaxProfileFields(v int) { global.SetAccountsMaxProfileFields(v) } | ||||
| 
 | ||||
| // MediaDescriptionMinCharsFlag returns the flag name for the 'MediaDescriptionMinChars' field | ||||
| func MediaDescriptionMinCharsFlag() string { return "media-description-min-chars" } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue