| 
									
										
										
										
											2023-03-12 16:00:57 +01:00
										 |  |  | // GoToSocial | 
					
						
							|  |  |  | // Copyright (C) GoToSocial Authors admin@gotosocial.org | 
					
						
							|  |  |  | // SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // 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/>. | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | package admin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-27 15:02:52 +01:00
										 |  |  | 	"codeberg.org/gruf/go-debug" | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | 	"github.com/gin-gonic/gin" | 
					
						
							| 
									
										
										
										
											2021-05-30 13:12:00 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/processing" | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2023-08-19 14:33:15 +02:00
										 |  |  | 	BasePath                = "/v1/admin" | 
					
						
							|  |  |  | 	EmojiPath               = BasePath + "/custom_emojis" | 
					
						
							|  |  |  | 	EmojiPathWithID         = EmojiPath + "/:" + IDKey | 
					
						
							|  |  |  | 	EmojiCategoriesPath     = EmojiPath + "/categories" | 
					
						
							|  |  |  | 	DomainBlocksPath        = BasePath + "/domain_blocks" | 
					
						
							|  |  |  | 	DomainBlocksPathWithID  = DomainBlocksPath + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2023-09-21 12:12:04 +02:00
										 |  |  | 	DomainAllowsPath        = BasePath + "/domain_allows" | 
					
						
							|  |  |  | 	DomainAllowsPathWithID  = DomainAllowsPath + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2023-09-12 11:43:12 +02:00
										 |  |  | 	DomainKeysExpirePath    = BasePath + "/domain_keys_expire" | 
					
						
							| 
									
										
										
										
											2023-12-18 14:18:25 +00:00
										 |  |  | 	HeaderAllowsPath        = BasePath + "/header_allows" | 
					
						
							|  |  |  | 	HeaderAllowsPathWithID  = HeaderAllowsPath + "/:" + IDKey | 
					
						
							|  |  |  | 	HeaderBlocksPath        = BasePath + "/header_blocks" | 
					
						
							| 
									
										
										
										
											2023-12-18 16:40:29 +00:00
										 |  |  | 	HeaderBlocksPathWithID  = HeaderBlocksPath + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2024-04-13 13:25:10 +02:00
										 |  |  | 	AccountsV1Path          = BasePath + "/accounts" | 
					
						
							|  |  |  | 	AccountsV2Path          = "/v2/admin/accounts" | 
					
						
							|  |  |  | 	AccountsPathWithID      = AccountsV1Path + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2023-08-19 14:33:15 +02:00
										 |  |  | 	AccountsActionPath      = AccountsPathWithID + "/action" | 
					
						
							| 
									
										
										
										
											2024-04-13 13:25:10 +02:00
										 |  |  | 	AccountsApprovePath     = AccountsPathWithID + "/approve" | 
					
						
							|  |  |  | 	AccountsRejectPath      = AccountsPathWithID + "/reject" | 
					
						
							| 
									
										
										
										
											2023-08-19 14:33:15 +02:00
										 |  |  | 	MediaCleanupPath        = BasePath + "/media_cleanup" | 
					
						
							|  |  |  | 	MediaRefetchPath        = BasePath + "/media_refetch" | 
					
						
							|  |  |  | 	ReportsPath             = BasePath + "/reports" | 
					
						
							|  |  |  | 	ReportsPathWithID       = ReportsPath + "/:" + IDKey | 
					
						
							|  |  |  | 	ReportsResolvePath      = ReportsPathWithID + "/resolve" | 
					
						
							|  |  |  | 	EmailPath               = BasePath + "/email" | 
					
						
							|  |  |  | 	EmailTestPath           = EmailPath + "/test" | 
					
						
							|  |  |  | 	InstanceRulesPath       = BasePath + "/instance/rules" | 
					
						
							|  |  |  | 	InstanceRulesPathWithID = InstanceRulesPath + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2023-11-27 15:02:52 +01:00
										 |  |  | 	DebugPath               = BasePath + "/debug" | 
					
						
							|  |  |  | 	DebugAPUrlPath          = DebugPath + "/apurl" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-14 17:11:04 +01:00
										 |  |  | 	IDKey                 = "id" | 
					
						
							|  |  |  | 	FilterQueryKey        = "filter" | 
					
						
							| 
									
										
										
										
											2022-10-12 15:01:42 +02:00
										 |  |  | 	MaxShortcodeDomainKey = "max_shortcode_domain" | 
					
						
							|  |  |  | 	MinShortcodeDomainKey = "min_shortcode_domain" | 
					
						
							| 
									
										
										
										
											2023-03-14 17:11:04 +01:00
										 |  |  | 	LimitKey              = "limit" | 
					
						
							|  |  |  | 	DomainQueryKey        = "domain" | 
					
						
							|  |  |  | 	ResolvedKey           = "resolved" | 
					
						
							|  |  |  | 	AccountIDKey          = "account_id" | 
					
						
							|  |  |  | 	TargetAccountIDKey    = "target_account_id" | 
					
						
							|  |  |  | 	MaxIDKey              = "max_id" | 
					
						
							|  |  |  | 	SinceIDKey            = "since_id" | 
					
						
							|  |  |  | 	MinIDKey              = "min_id" | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | type Module struct { | 
					
						
							| 
									
										
										
										
											2023-02-22 16:05:26 +01:00
										 |  |  | 	processor *processing.Processor | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 16:05:26 +01:00
										 |  |  | func New(processor *processing.Processor) *Module { | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | 	return &Module{ | 
					
						
							| 
									
										
										
										
											2021-05-08 14:25:55 +02:00
										 |  |  | 		processor: processor, | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | func (m *Module) Route(attachHandler func(method string, path string, f ...gin.HandlerFunc) gin.IRoutes) { | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 	// emoji stuff | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | 	attachHandler(http.MethodPost, EmojiPath, m.EmojiCreatePOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, EmojiPath, m.EmojisGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, EmojiPathWithID, m.EmojiDELETEHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, EmojiPathWithID, m.EmojiGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPatch, EmojiPathWithID, m.EmojiPATCHHandler) | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 	attachHandler(http.MethodGet, EmojiCategoriesPath, m.EmojiCategoriesGETHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// domain block stuff | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | 	attachHandler(http.MethodPost, DomainBlocksPath, m.DomainBlocksPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, DomainBlocksPath, m.DomainBlocksGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, DomainBlocksPathWithID, m.DomainBlockGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, DomainBlocksPathWithID, m.DomainBlockDELETEHandler) | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-21 12:12:04 +02:00
										 |  |  | 	// domain allow stuff | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, DomainAllowsPath, m.DomainAllowsPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, DomainAllowsPath, m.DomainAllowsGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, DomainAllowsPathWithID, m.DomainAllowGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, DomainAllowsPathWithID, m.DomainAllowDELETEHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-18 14:18:25 +00:00
										 |  |  | 	// header filtering administration routes | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, HeaderAllowsPathWithID, m.HeaderFilterAllowGET) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, HeaderBlocksPathWithID, m.HeaderFilterBlockGET) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, HeaderAllowsPath, m.HeaderFilterAllowsGET) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, HeaderBlocksPath, m.HeaderFilterBlocksGET) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, HeaderAllowsPath, m.HeaderFilterAllowPOST) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, HeaderBlocksPath, m.HeaderFilterBlockPOST) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, HeaderAllowsPathWithID, m.HeaderFilterAllowDELETE) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, HeaderBlocksPathWithID, m.HeaderFilterBlockDELETE) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-12 11:43:12 +02:00
										 |  |  | 	// domain maintenance stuff | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, DomainKeysExpirePath, m.DomainKeysExpirePOSTHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 	// accounts stuff | 
					
						
							| 
									
										
										
										
											2024-04-13 13:25:10 +02:00
										 |  |  | 	attachHandler(http.MethodGet, AccountsV1Path, m.AccountsGETV1Handler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, AccountsV2Path, m.AccountsGETV2Handler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, AccountsPathWithID, m.AccountGETHandler) | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | 	attachHandler(http.MethodPost, AccountsActionPath, m.AccountActionPOSTHandler) | 
					
						
							| 
									
										
										
										
											2024-04-13 13:25:10 +02:00
										 |  |  | 	attachHandler(http.MethodPost, AccountsApprovePath, m.AccountApprovePOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, AccountsRejectPath, m.AccountRejectPOSTHandler) | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// media stuff | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | 	attachHandler(http.MethodPost, MediaCleanupPath, m.MediaCleanupPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, MediaRefetchPath, m.MediaRefetchPOSTHandler) | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// reports stuff | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, ReportsPath, m.ReportsGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, ReportsPathWithID, m.ReportGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, ReportsResolvePath, m.ReportResolvePOSTHandler) | 
					
						
							| 
									
										
										
										
											2023-03-14 17:11:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// email stuff | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, EmailTestPath, m.EmailTestPOSTHandler) | 
					
						
							| 
									
										
										
										
											2023-08-19 14:33:15 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// instance rules stuff | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, InstanceRulesPath, m.RulesGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, InstanceRulesPathWithID, m.RuleGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, InstanceRulesPath, m.RulePOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPatch, InstanceRulesPathWithID, m.RulePATCHHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, InstanceRulesPathWithID, m.RuleDELETEHandler) | 
					
						
							| 
									
										
										
										
											2023-11-27 15:02:52 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// debug stuff | 
					
						
							|  |  |  | 	if debug.DEBUG { | 
					
						
							|  |  |  | 		attachHandler(http.MethodGet, DebugAPUrlPath, m.DebugAPUrlHandler) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } |