| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |    GoToSocial | 
					
						
							| 
									
										
										
										
											2021-12-20 18:42:19 +01:00
										 |  |  |    Copyright (C) 2021-2022 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" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-08 14:25:55 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/api" | 
					
						
							| 
									
										
										
										
											2021-05-30 13:12:00 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/processing" | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/router" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	// BasePath is the base API path for this module. | 
					
						
							| 
									
										
										
										
											2021-05-08 14:25:55 +02:00
										 |  |  | 	BasePath = "/api/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 | 
					
						
							| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | // Module implements the ClientAPIModule interface for admin-related actions (reports, emojis, etc) | 
					
						
							|  |  |  | type Module struct { | 
					
						
							| 
									
										
										
										
											2021-05-30 13:12:00 +02:00
										 |  |  | 	processor processing.Processor | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | // New returns a new admin module | 
					
						
							| 
									
										
										
										
											2021-12-07 13:31:39 +01:00
										 |  |  | func New(processor processing.Processor) api.ClientModule { | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Route attaches all routes from this module to the given router | 
					
						
							| 
									
										
										
										
											2021-04-20 18:14:23 +02:00
										 |  |  | func (m *Module) Route(r router.Router) error { | 
					
						
							| 
									
										
										
										
											2022-01-11 17:49:14 +01:00
										 |  |  | 	r.AttachHandler(http.MethodPost, EmojiPath, m.EmojiCreatePOSTHandler) | 
					
						
							| 
									
										
										
										
											2022-10-12 15:01:42 +02:00
										 |  |  | 	r.AttachHandler(http.MethodGet, EmojiPath, m.EmojisGETHandler) | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 	r.AttachHandler(http.MethodDelete, EmojiPathWithID, m.EmojiDELETEHandler) | 
					
						
							|  |  |  | 	r.AttachHandler(http.MethodGet, EmojiPathWithID, m.EmojiGETHandler) | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	r.AttachHandler(http.MethodPost, DomainBlocksPath, m.DomainBlocksPOSTHandler) | 
					
						
							|  |  |  | 	r.AttachHandler(http.MethodGet, DomainBlocksPath, m.DomainBlocksGETHandler) | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	r.AttachHandler(http.MethodGet, DomainBlocksPathWithID, m.DomainBlockGETHandler) | 
					
						
							|  |  |  | 	r.AttachHandler(http.MethodDelete, DomainBlocksPathWithID, m.DomainBlockDELETEHandler) | 
					
						
							| 
									
										
										
										
											2022-03-19 12:01:40 +01:00
										 |  |  | 	r.AttachHandler(http.MethodPost, AccountsActionPath, m.AccountActionPOSTHandler) | 
					
						
							| 
									
										
										
										
											2022-05-15 08:52:46 -04:00
										 |  |  | 	r.AttachHandler(http.MethodPost, MediaCleanupPath, m.MediaCleanupPOSTHandler) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } |