| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |    GoToSocial | 
					
						
							|  |  |  |    Copyright (C) 2021-2022 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 config | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"errors" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-11 11:09:31 +02:00
										 |  |  | 	"github.com/miekg/dns" | 
					
						
							| 
									
										
										
										
											2022-07-19 09:47:55 +01:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/log" | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Validate validates global config settings which don't have defaults, to make sure they are set sensibly. | 
					
						
							|  |  |  | func Validate() error { | 
					
						
							|  |  |  | 	errs := []error{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// host | 
					
						
							| 
									
										
										
										
											2022-06-11 11:09:31 +02:00
										 |  |  | 	host := GetHost() | 
					
						
							|  |  |  | 	if host == "" { | 
					
						
							| 
									
										
										
										
											2022-05-30 13:41:24 +01:00
										 |  |  | 		errs = append(errs, fmt.Errorf("%s must be set", HostFlag())) | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-11 11:09:31 +02:00
										 |  |  | 	// accountDomain; only check if host was set, otherwise there's no point | 
					
						
							|  |  |  | 	if host != "" { | 
					
						
							|  |  |  | 		switch ad := GetAccountDomain(); ad { | 
					
						
							|  |  |  | 		case "": | 
					
						
							|  |  |  | 			SetAccountDomain(GetHost()) | 
					
						
							|  |  |  | 		default: | 
					
						
							|  |  |  | 			if !dns.IsSubDomain(ad, host) { | 
					
						
							|  |  |  | 				errs = append(errs, fmt.Errorf("%s was %s and %s was %s, but %s is not a valid subdomain of %s", HostFlag(), host, AccountDomainFlag(), ad, host, ad)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	// protocol | 
					
						
							| 
									
										
										
										
											2022-05-30 13:41:24 +01:00
										 |  |  | 	switch proto := GetProtocol(); proto { | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	case "https": | 
					
						
							|  |  |  | 		// no problem | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case "http": | 
					
						
							| 
									
										
										
										
											2022-07-19 09:47:55 +01:00
										 |  |  | 		log.Warnf("%s was set to 'http'; this should *only* be used for debugging and tests!", ProtocolFlag()) | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	case "": | 
					
						
							| 
									
										
										
										
											2022-05-30 13:41:24 +01:00
										 |  |  | 		errs = append(errs, fmt.Errorf("%s must be set", ProtocolFlag())) | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	default: | 
					
						
							| 
									
										
										
										
											2022-05-30 13:41:24 +01:00
										 |  |  | 		errs = append(errs, fmt.Errorf("%s must be set to either http or https, provided value was %s", ProtocolFlag(), proto)) | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-04 14:41:42 +02:00
										 |  |  | 	webAssetsBaseDir := GetWebAssetBaseDir() | 
					
						
							|  |  |  | 	if webAssetsBaseDir == "" { | 
					
						
							|  |  |  | 		errs = append(errs, fmt.Errorf("%s must be set", WebAssetBaseDirFlag())) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-12 13:03:23 +02:00
										 |  |  | 	if m := GetMediaEmojiLocalMaxSize(); m < 0 { | 
					
						
							|  |  |  | 		errs = append(errs, fmt.Errorf("%s must not be less than 0", MediaEmojiLocalMaxSizeFlag())) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if m := GetMediaEmojiRemoteMaxSize(); m < 0 { | 
					
						
							|  |  |  | 		errs = append(errs, fmt.Errorf("%s must not be less than 0", MediaEmojiRemoteMaxSizeFlag())) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-16 14:13:19 +02:00
										 |  |  | 	if len(errs) > 0 { | 
					
						
							|  |  |  | 		errStrings := []string{} | 
					
						
							|  |  |  | 		for _, err := range errs { | 
					
						
							|  |  |  | 			errStrings = append(errStrings, err.Error()) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return errors.New(strings.Join(errStrings, "; ")) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |