| 
									
										
										
										
											2021-04-02 19:20:41 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |    GoToSocial | 
					
						
							|  |  |  |    Copyright (C) 2021 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/>. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | package util | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/db/model" | 
					
						
							|  |  |  | 	"github.com/superseriousbusiness/gotosocial/pkg/mastotypes" | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | type URIs struct { | 
					
						
							| 
									
										
										
										
											2021-04-02 21:15:17 +02:00
										 |  |  | 	HostURL     string | 
					
						
							|  |  |  | 	UserURL     string | 
					
						
							|  |  |  | 	StatusesURL string | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | 	UserURI       string | 
					
						
							| 
									
										
										
										
											2021-04-02 21:15:17 +02:00
										 |  |  | 	StatusesURI   string | 
					
						
							|  |  |  | 	InboxURI      string | 
					
						
							|  |  |  | 	OutboxURI     string | 
					
						
							|  |  |  | 	FollowersURI  string | 
					
						
							|  |  |  | 	CollectionURI string | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func GenerateURIs(username string, protocol string, host string) *URIs { | 
					
						
							|  |  |  | 	hostURL := fmt.Sprintf("%s://%s", protocol, host) | 
					
						
							|  |  |  | 	userURL := fmt.Sprintf("%s/@%s", hostURL, username) | 
					
						
							| 
									
										
										
										
											2021-04-02 21:15:17 +02:00
										 |  |  | 	statusesURL := fmt.Sprintf("%s/statuses", userURL) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | 	userURI := fmt.Sprintf("%s/users/%s", hostURL, username) | 
					
						
							| 
									
										
										
										
											2021-04-02 21:15:17 +02:00
										 |  |  | 	statusesURI := fmt.Sprintf("%s/statuses", userURI) | 
					
						
							|  |  |  | 	inboxURI := fmt.Sprintf("%s/inbox", userURI) | 
					
						
							|  |  |  | 	outboxURI := fmt.Sprintf("%s/outbox", userURI) | 
					
						
							|  |  |  | 	followersURI := fmt.Sprintf("%s/followers", userURI) | 
					
						
							|  |  |  | 	collectionURI := fmt.Sprintf("%s/collections/featured", userURI) | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | 	return &URIs{ | 
					
						
							| 
									
										
										
										
											2021-04-05 20:34:56 +02:00
										 |  |  | 		HostURL:     hostURL, | 
					
						
							|  |  |  | 		UserURL:     userURL, | 
					
						
							|  |  |  | 		StatusesURL: statusesURL, | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | 		UserURI:       userURI, | 
					
						
							| 
									
										
										
										
											2021-04-02 21:15:17 +02:00
										 |  |  | 		StatusesURI:   statusesURI, | 
					
						
							|  |  |  | 		InboxURI:      inboxURI, | 
					
						
							|  |  |  | 		OutboxURI:     outboxURI, | 
					
						
							|  |  |  | 		FollowersURI:  followersURI, | 
					
						
							|  |  |  | 		CollectionURI: collectionURI, | 
					
						
							| 
									
										
										
										
											2021-04-01 20:46:45 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-06 23:35:49 +02:00
										 |  |  | // ParseGTSVisFromMastoVis converts a mastodon visibility into its gts equivalent. | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | func ParseGTSVisFromMastoVis(m mastotypes.Visibility) model.Visibility { | 
					
						
							| 
									
										
										
										
											2021-04-06 23:35:49 +02:00
										 |  |  | 	switch m { | 
					
						
							|  |  |  | 	case mastotypes.VisibilityPublic: | 
					
						
							|  |  |  | 		return model.VisibilityPublic | 
					
						
							|  |  |  | 	case mastotypes.VisibilityUnlisted: | 
					
						
							|  |  |  | 		return model.VisibilityUnlocked | 
					
						
							|  |  |  | 	case mastotypes.VisibilityPrivate: | 
					
						
							|  |  |  | 		return model.VisibilityFollowersOnly | 
					
						
							|  |  |  | 	case mastotypes.VisibilityDirect: | 
					
						
							|  |  |  | 		return model.VisibilityDirect | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | 	return "" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-06 23:35:49 +02:00
										 |  |  | // ParseMastoVisFromGTSVis converts a gts visibility into its mastodon equivalent | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | func ParseMastoVisFromGTSVis(m model.Visibility) mastotypes.Visibility { | 
					
						
							| 
									
										
										
										
											2021-04-06 23:35:49 +02:00
										 |  |  | 	switch m { | 
					
						
							|  |  |  | 	case model.VisibilityPublic: | 
					
						
							|  |  |  | 		return mastotypes.VisibilityPublic | 
					
						
							|  |  |  | 	case model.VisibilityUnlocked: | 
					
						
							|  |  |  | 		return mastotypes.VisibilityUnlisted | 
					
						
							|  |  |  | 	case model.VisibilityFollowersOnly, model.VisibilityMutualsOnly: | 
					
						
							|  |  |  | 		return mastotypes.VisibilityPrivate | 
					
						
							|  |  |  | 	case model.VisibilityDirect: | 
					
						
							|  |  |  | 		return mastotypes.VisibilityDirect | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-04-03 19:40:15 +02:00
										 |  |  | 	return "" | 
					
						
							|  |  |  | } |