| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 	// ReportsPath is for serving admin view of user reports. | 
					
						
							|  |  |  | 	ReportsPath = BasePath + "/reports" | 
					
						
							|  |  |  | 	// ReportsPathWithID is for viewing/acting on one report. | 
					
						
							|  |  |  | 	ReportsPathWithID = ReportsPath + "/:" + IDKey | 
					
						
							|  |  |  | 	// ReportsResolvePath is for marking one report as resolved. | 
					
						
							|  |  |  | 	ReportsResolvePath = ReportsPathWithID + "/resolve" | 
					
						
							| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2023-01-25 11:12:17 +01:00
										 |  |  | 	// ResolvedKey is for filtering reports by their resolved status | 
					
						
							|  |  |  | 	ResolvedKey = "resolved" | 
					
						
							|  |  |  | 	// AccountIDKey is for selecting account in API paths. | 
					
						
							|  |  |  | 	AccountIDKey = "account_id" | 
					
						
							|  |  |  | 	// TargetAccountIDKey is for selecting target account in API paths. | 
					
						
							|  |  |  | 	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
										 |  |  | 
 | 
					
						
							|  |  |  | 	// accounts stuff | 
					
						
							| 
									
										
										
										
											2023-01-02 13:10:50 +01:00
										 |  |  | 	attachHandler(http.MethodPost, AccountsActionPath, m.AccountActionPOSTHandler) | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } |