Monorepo for Tangled tangled.org

appview: use explicit `TANGLED_PDS_HANDLE_SUFFIX` for tngl.sh user check

also fix the `isTnglHandle` logic a bit.

Signed-off-by: Seongmin Lee <git@boltless.me>

boltless.me f2ac2c7e 3cd32da9

verified
+15 -19
+3 -2
appview/config/config.go
··· 84 84 } 85 85 86 86 type PdsConfig struct { 87 - Host string `env:"HOST, default=https://tngl.sh"` 88 - AdminSecret string `env:"ADMIN_SECRET"` 87 + Host string `env:"HOST, default=https://tngl.sh"` 88 + HandleSuffix string `env:"HANDLE_SUFFIX, default=.tngl.sh"` 89 + AdminSecret string `env:"ADMIN_SECRET"` 89 90 } 90 91 91 92 type R2Config struct {
+12 -17
appview/settings/settings.go
··· 81 81 82 82 func (s *Settings) sitesSettings(w http.ResponseWriter, r *http.Request) { 83 83 user := s.OAuth.GetMultiAccountUser(r) 84 - did := s.OAuth.GetDid(r) 85 84 86 - claim, err := db.GetActiveDomainClaimForDid(s.Db, did) 85 + claim, err := db.GetActiveDomainClaimForDid(s.Db, user.Active.Did) 87 86 if err != nil { 88 87 s.Logger.Error("failed to get domain claim", "err", err) 89 88 claim = nil ··· 91 90 92 91 // determine whether the active account has a tngl.sh handle, in which 93 92 // case their sites domain is automatically their handle domain. 94 - pdsDomain := strings.TrimPrefix(s.Config.Pds.Host, "https://") 95 - pdsDomain = strings.TrimPrefix(pdsDomain, "http://") 96 93 isTnglHandle := false 97 94 for _, acc := range user.Accounts { 98 - if acc.Did == did && strings.HasSuffix(acc.Handle, "."+pdsDomain) { 99 - isTnglHandle = true 95 + if acc.Did == user.Active.Did { 96 + isTnglHandle = strings.HasSuffix(acc.Handle, s.Config.Pds.HandleSuffix) 100 97 break 101 98 } 102 99 } ··· 156 153 } 157 154 158 155 func (s *Settings) releaseSitesDomain(w http.ResponseWriter, r *http.Request) { 159 - did := s.OAuth.GetDid(r) 156 + user := s.OAuth.GetMultiAccountUser(r) 160 157 domain := strings.TrimSpace(r.FormValue("domain")) 161 158 162 159 if domain == "" { ··· 164 161 return 165 162 } 166 163 167 - pdsDomain := strings.TrimPrefix(s.Config.Pds.Host, "https://") 168 - pdsDomain = strings.TrimPrefix(pdsDomain, "http://") 169 - user := s.OAuth.GetMultiAccountUser(r) 170 164 for _, acc := range user.Accounts { 171 - if acc.Did == did && strings.HasSuffix(acc.Handle, "."+pdsDomain) { 172 - if strings.HasSuffix(domain, "."+pdsDomain) { 165 + if acc.Did == user.Active.Did { 166 + if strings.HasSuffix(acc.Handle, s.Config.Pds.HandleSuffix) { 173 167 s.Pages.Notice(w, "settings-sites-error", "Your tngl.sh domain is tied to your handle and cannot be released here.") 174 168 return 175 169 } 170 + break 176 171 } 177 172 } 178 173 179 - if err := db.ReleaseDomain(s.Db, did, domain); err != nil { 174 + if err := db.ReleaseDomain(s.Db, user.Active.Did, domain); err != nil { 180 175 s.Logger.Error("releasing domain", "err", err) 181 176 s.Pages.Notice(w, "settings-sites-error", "Unable to release domain. Make sure it belongs to your account.") 182 177 return ··· 184 179 185 180 // Clean up all site data for this DID asynchronously. 186 181 if s.CfClient.Enabled() { 187 - siteConfigs, err := db.GetRepoSiteConfigsForDid(s.Db, did) 182 + siteConfigs, err := db.GetRepoSiteConfigsForDid(s.Db, user.Active.Did) 188 183 if err != nil { 189 184 s.Logger.Error("releaseSitesDomain: fetching site configs for cleanup", "err", err) 190 185 } 191 186 192 - if err := db.DeleteRepoSiteConfigsForDid(s.Db, did); err != nil { 187 + if err := db.DeleteRepoSiteConfigsForDid(s.Db, user.Active.Did); err != nil { 193 188 s.Logger.Error("releaseSitesDomain: deleting site configs from db", "err", err) 194 189 } 195 190 ··· 198 193 199 194 // Delete each repo's R2 objects. 200 195 for _, sc := range siteConfigs { 201 - if err := sites.Delete(ctx, s.CfClient, did, sc.RepoName); err != nil { 202 - s.Logger.Error("releaseSitesDomain: R2 delete failed", "did", did, "repo", sc.RepoName, "err", err) 196 + if err := sites.Delete(ctx, s.CfClient, user.Active.Did, sc.RepoName); err != nil { 197 + s.Logger.Error("releaseSitesDomain: R2 delete failed", "did", user.Active.Did, "repo", sc.RepoName, "err", err) 203 198 } 204 199 } 205 200