| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |    GoToSocial | 
					
						
							| 
									
										
										
										
											2023-01-05 12:43:00 +01:00
										 |  |  |    Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |    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 admin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-01-02 13:10:50 +01:00
										 |  |  | 	// BasePath is the base API path for this module, excluding the api prefix | 
					
						
							|  |  |  | 	BasePath = "/v1/admin" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	// EmojiPath is used for posting/deleting custom emojis. | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | 	EmojiPath = BasePath + "/custom_emojis" | 
					
						
							| 
									
										
										
										
											2022-10-12 15:01:42 +02:00
										 |  |  | 	// EmojiPathWithID is used for interacting with a single emoji. | 
					
						
							|  |  |  | 	EmojiPathWithID = EmojiPath + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2022-11-14 23:47:27 +01:00
										 |  |  | 	// EmojiCategoriesPath is used for interacting with emoji categories. | 
					
						
							|  |  |  | 	EmojiCategoriesPath = EmojiPath + "/categories" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	// DomainBlocksPath is used for posting domain blocks. | 
					
						
							|  |  |  | 	DomainBlocksPath = BasePath + "/domain_blocks" | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// DomainBlocksPathWithID is used for interacting with a single domain block. | 
					
						
							|  |  |  | 	DomainBlocksPathWithID = DomainBlocksPath + "/:" + IDKey | 
					
						
							| 
									
										
										
										
											2022-03-19 12:01:40 +01:00
										 |  |  | 	// AccountsPath is used for listing + acting on accounts. | 
					
						
							|  |  |  | 	AccountsPath = BasePath + "/accounts" | 
					
						
							|  |  |  | 	// AccountsPathWithID is used for interacting with a single account. | 
					
						
							|  |  |  | 	AccountsPathWithID = AccountsPath + "/:" + IDKey | 
					
						
							|  |  |  | 	// AccountsActionPath is used for taking action on a single account. | 
					
						
							|  |  |  | 	AccountsActionPath = AccountsPathWithID + "/action" | 
					
						
							| 
									
										
										
										
											2022-05-15 08:52:46 -04:00
										 |  |  | 	MediaCleanupPath   = BasePath + "/media_cleanup" | 
					
						
							| 
									
										
										
										
											2022-12-10 22:43:11 +01:00
										 |  |  | 	MediaRefetchPath   = BasePath + "/media_refetch" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// ExportQueryKey is for requesting a public export of some data. | 
					
						
							|  |  |  | 	ExportQueryKey = "export" | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// ImportQueryKey is for submitting an import of some data. | 
					
						
							|  |  |  | 	ImportQueryKey = "import" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	// IDKey specifies the ID of a single item being interacted with. | 
					
						
							|  |  |  | 	IDKey = "id" | 
					
						
							| 
									
										
										
										
											2022-10-12 15:01:42 +02:00
										 |  |  | 	// FilterKey is for applying filters to admin views of accounts, emojis, etc. | 
					
						
							|  |  |  | 	FilterQueryKey = "filter" | 
					
						
							|  |  |  | 	// MaxShortcodeDomainKey is the url query for returning emoji results lower (alphabetically) | 
					
						
							|  |  |  | 	// than the given `[shortcode]@[domain]` parameter. | 
					
						
							|  |  |  | 	MaxShortcodeDomainKey = "max_shortcode_domain" | 
					
						
							|  |  |  | 	// MaxShortcodeDomainKey is the url query for returning emoji results higher (alphabetically) | 
					
						
							|  |  |  | 	// than the given `[shortcode]@[domain]` parameter. | 
					
						
							|  |  |  | 	MinShortcodeDomainKey = "min_shortcode_domain" | 
					
						
							|  |  |  | 	// LimitKey is for specifying maximum number of results to return. | 
					
						
							|  |  |  | 	LimitKey = "limit" | 
					
						
							| 
									
										
										
										
											2022-12-10 22:43:11 +01:00
										 |  |  | 	// DomainQueryKey is for specifying a domain during admin actions. | 
					
						
							|  |  |  | 	DomainQueryKey = "domain" | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | type Module struct { | 
					
						
							| 
									
										
										
										
											2021-05-30 13:12:00 +02:00
										 |  |  | 	processor processing.Processor | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +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) { | 
					
						
							|  |  |  | 	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) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, DomainBlocksPath, m.DomainBlocksPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, DomainBlocksPath, m.DomainBlocksGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, DomainBlocksPathWithID, m.DomainBlockGETHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodDelete, DomainBlocksPathWithID, m.DomainBlockDELETEHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, AccountsActionPath, m.AccountActionPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, MediaCleanupPath, m.MediaCleanupPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodPost, MediaRefetchPath, m.MediaRefetchPOSTHandler) | 
					
						
							|  |  |  | 	attachHandler(http.MethodGet, EmojiCategoriesPath, m.EmojiCategoriesGETHandler) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } |