mirror of
https://github.com/makeworld-the-better-one/amfora.git
synced 2024-11-25 05:39:27 +03:00
Use new go-gemini to handle invalid status codes, show error modal for out of range ones
Ref #266
This commit is contained in:
parent
790d7ace6c
commit
1c4d13b055
@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- The user's terminal theme colors are used by default (#181)
|
- The user's terminal theme colors are used by default (#181)
|
||||||
- By default, non-gemini URI schemes are opened in the default application. This requires a config change for previous users, see the [wiki](https://github.com/makeworld-the-better-one/amfora/wiki/Handling-Other-URL-Schemes) (#207)
|
- By default, non-gemini URI schemes are opened in the default application. This requires a config change for previous users, see the [wiki](https://github.com/makeworld-the-better-one/amfora/wiki/Handling-Other-URL-Schemes) (#207)
|
||||||
- Windows uses paths set by `XDG` variables over `APPDATA` if they are set (#255)
|
- Windows uses paths set by `XDG` variables over `APPDATA` if they are set (#255)
|
||||||
|
- Treat status codes like 22 as equivalent to 20 as per the latest spec (#266)
|
||||||
|
|
||||||
## Removed
|
## Removed
|
||||||
- Favicon support (#199)
|
- Favicon support (#199)
|
||||||
@ -41,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Regression where lists would not appear if `bullets = false` (#234, #235)
|
- Regression where lists would not appear if `bullets = false` (#234, #235)
|
||||||
- Support multiple bookmarks with the same name
|
- Support multiple bookmarks with the same name
|
||||||
- Cert change message grammar: "an security" -> "a security" (#274)
|
- Cert change message grammar: "an security" -> "a security" (#274)
|
||||||
|
- Display an error modal for status codes that can't be handled
|
||||||
|
|
||||||
|
|
||||||
## [1.8.0] - 2021-02-17
|
## [1.8.0] - 2021-02-17
|
||||||
|
@ -2,6 +2,7 @@ package display
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"mime"
|
"mime"
|
||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
@ -381,12 +382,14 @@ func handleURL(t *tab, u string, numRedirects int) (string, bool) {
|
|||||||
// Could be a non 20 status code, or a different kind of document
|
// Could be a non 20 status code, or a different kind of document
|
||||||
|
|
||||||
// Handle each status code
|
// Handle each status code
|
||||||
switch res.Status {
|
// Except 20, that's handled after the switch
|
||||||
|
status := gemini.CleanStatus(res.Status)
|
||||||
|
switch status {
|
||||||
case 10, 11:
|
case 10, 11:
|
||||||
var userInput string
|
var userInput string
|
||||||
var ok bool
|
var ok bool
|
||||||
|
|
||||||
if res.Status == 10 {
|
if status == 10 {
|
||||||
// Regular input
|
// Regular input
|
||||||
userInput, ok = Input(res.Meta, false)
|
userInput, ok = Input(res.Meta, false)
|
||||||
} else {
|
} else {
|
||||||
@ -423,7 +426,7 @@ func handleURL(t *tab, u string, numRedirects int) (string, bool) {
|
|||||||
// Prompt before redirecting
|
// Prompt before redirecting
|
||||||
autoRedirect := justAddsSlash || viper.GetBool("a-general.auto_redirect")
|
autoRedirect := justAddsSlash || viper.GetBool("a-general.auto_redirect")
|
||||||
if redirect || (autoRedirect && numRedirects < 5) || YesNo("Follow redirect?\n"+redir) {
|
if redirect || (autoRedirect && numRedirects < 5) || YesNo("Follow redirect?\n"+redir) {
|
||||||
if res.Status == gemini.StatusRedirectPermanent {
|
if status == gemini.StatusRedirectPermanent {
|
||||||
go cache.AddRedir(u, redir)
|
go cache.AddRedir(u, redir)
|
||||||
}
|
}
|
||||||
return ret(handleURL(t, redir, numRedirects+1))
|
return ret(handleURL(t, redir, numRedirects+1))
|
||||||
@ -468,6 +471,12 @@ func handleURL(t *tab, u string, numRedirects int) (string, bool) {
|
|||||||
case 62:
|
case 62:
|
||||||
Error("Certificate Not Valid", escapeMeta(res.Meta))
|
Error("Certificate Not Valid", escapeMeta(res.Meta))
|
||||||
return ret("", false)
|
return ret("", false)
|
||||||
|
default:
|
||||||
|
if !gemini.StatusInRange(status) {
|
||||||
|
// Status code not in a valid range
|
||||||
|
Error("Status Code Error", fmt.Sprintf("Out of range status code: %d", status))
|
||||||
|
return ret("", false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status code 20, but not a document that can be displayed
|
// Status code 20, but not a document that can be displayed
|
||||||
|
2
go.mod
2
go.mod
@ -9,7 +9,7 @@ require (
|
|||||||
github.com/fsnotify/fsnotify v1.4.9 // indirect
|
github.com/fsnotify/fsnotify v1.4.9 // indirect
|
||||||
github.com/gdamore/tcell/v2 v2.3.3
|
github.com/gdamore/tcell/v2 v2.3.3
|
||||||
github.com/google/go-cmp v0.5.0 // indirect
|
github.com/google/go-cmp v0.5.0 // indirect
|
||||||
github.com/makeworld-the-better-one/go-gemini v0.11.0
|
github.com/makeworld-the-better-one/go-gemini v0.12.1
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/mitchellh/mapstructure v1.3.1 // indirect
|
github.com/mitchellh/mapstructure v1.3.1 // indirect
|
||||||
github.com/mmcdole/gofeed v1.1.2
|
github.com/mmcdole/gofeed v1.1.2
|
||||||
|
4
go.sum
4
go.sum
@ -138,8 +138,8 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69
|
|||||||
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||||
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
||||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/makeworld-the-better-one/go-gemini v0.11.0 h1:MNGiULJFvcqls9oCy40tE897hDeKvNmEK9i5kRucgQk=
|
github.com/makeworld-the-better-one/go-gemini v0.12.1 h1:cWHvCHL31Caq3Rm9elCFFoQeyrn92Kv7KummsVxCOFg=
|
||||||
github.com/makeworld-the-better-one/go-gemini v0.11.0/go.mod h1:F+3x+R1xeYK90jMtBq+U+8Sh64r2dHleDZ/en3YgSmg=
|
github.com/makeworld-the-better-one/go-gemini v0.12.1/go.mod h1:F+3x+R1xeYK90jMtBq+U+8Sh64r2dHleDZ/en3YgSmg=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
|
@ -251,7 +251,9 @@ func getResource(url string) (string, *gemini.Response, error) {
|
|||||||
return url, nil, err
|
return url, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if res.Status == gemini.StatusSuccess {
|
status := gemini.CleanStatus(res.Status)
|
||||||
|
|
||||||
|
if status == gemini.StatusSuccess {
|
||||||
// No redirects
|
// No redirects
|
||||||
return url, res, nil
|
return url, res, nil
|
||||||
}
|
}
|
||||||
@ -266,8 +268,8 @@ func getResource(url string) (string, *gemini.Response, error) {
|
|||||||
urls := make([]*urlPkg.URL, 0)
|
urls := make([]*urlPkg.URL, 0)
|
||||||
|
|
||||||
// Loop through redirects
|
// Loop through redirects
|
||||||
for (res.Status == gemini.StatusRedirectPermanent || res.Status == gemini.StatusRedirectTemporary) && i < 5 {
|
for (status == gemini.StatusRedirectPermanent || status == gemini.StatusRedirectTemporary) && i < 5 {
|
||||||
redirs = append(redirs, res.Status)
|
redirs = append(redirs, status)
|
||||||
urls = append(urls, parsed)
|
urls = append(urls, parsed)
|
||||||
|
|
||||||
tmp, err := parsed.Parse(res.Meta)
|
tmp, err := parsed.Parse(res.Meta)
|
||||||
@ -302,7 +304,7 @@ func getResource(url string) (string, *gemini.Response, error) {
|
|||||||
if i < 5 {
|
if i < 5 {
|
||||||
// The server stopped redirecting after <5 redirects
|
// The server stopped redirecting after <5 redirects
|
||||||
|
|
||||||
if res.Status == gemini.StatusSuccess {
|
if status == gemini.StatusSuccess {
|
||||||
// It ended by succeeding
|
// It ended by succeeding
|
||||||
|
|
||||||
for j := range redirs {
|
for j := range redirs {
|
||||||
|
Loading…
Reference in New Issue
Block a user