mirror of
https://github.com/rystaf/mlmym.git
synced 2024-11-09 16:55:17 +00:00
lemmy check
This commit is contained in:
parent
4787f209c6
commit
8de7bbfa9c
16
main.go
16
main.go
|
@ -67,10 +67,14 @@ func init() {
|
||||||
}
|
}
|
||||||
func middleware(n httprouter.Handle) httprouter.Handle {
|
func middleware(n httprouter.Handle) httprouter.Handle {
|
||||||
return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
if ps.ByName("host") != "" && !IsLemmy(ps.ByName("host")) {
|
//remoteAddr := r.RemoteAddr
|
||||||
http.Redirect(w, r, "/", 301)
|
//if r.Header.Get("CF-Connecting-IP") != "" {
|
||||||
return
|
// remoteAddr = r.Header.Get("CF-Connecting-IP")
|
||||||
}
|
//}
|
||||||
|
//if ps.ByName("host") != "" && !IsLemmy(ps.ByName("host"), remoteAddr) {
|
||||||
|
// http.Redirect(w, r, "/", 301)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
n(w, r, ps)
|
n(w, r, ps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,8 +83,8 @@ func main() {
|
||||||
log.Println("serve", *addr)
|
log.Println("serve", *addr)
|
||||||
router := httprouter.New()
|
router := httprouter.New()
|
||||||
router.ServeFiles("/:host/static/*filepath", http.Dir("public"))
|
router.ServeFiles("/:host/static/*filepath", http.Dir("public"))
|
||||||
router.GET("/", middleware(GetRoot))
|
router.GET("/", GetRoot)
|
||||||
router.POST("/", middleware(PostRoot))
|
router.POST("/", PostRoot)
|
||||||
router.GET("/:host/", middleware(GetFrontpage))
|
router.GET("/:host/", middleware(GetFrontpage))
|
||||||
router.GET("/:host/search", middleware(Search))
|
router.GET("/:host/search", middleware(Search))
|
||||||
router.POST("/:host/search", middleware(UserOp))
|
router.POST("/:host/search", middleware(UserOp))
|
||||||
|
|
14
routes.go
14
routes.go
|
@ -220,9 +220,10 @@ type NodeInfo struct {
|
||||||
Software NodeSoftware `json:"software"`
|
Software NodeSoftware `json:"software"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsLemmy(domain string) bool {
|
func IsLemmy(domain string, remoteAddr string) bool {
|
||||||
|
client := http.Client{Transport: NewAddHeaderTransport(remoteAddr)}
|
||||||
var nodeInfo NodeInfo
|
var nodeInfo NodeInfo
|
||||||
res, err := http.Get("https://" + domain + "/nodeinfo/2.0.json")
|
res, err := client.Get("https://" + domain + "/nodeinfo/2.0.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -251,7 +252,11 @@ func PostRoot(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
input = "https://" + input
|
input = "https://" + input
|
||||||
}
|
}
|
||||||
dest, err := url.Parse(input)
|
dest, err := url.Parse(input)
|
||||||
if dest.Host != "" && IsLemmy(dest.Host) {
|
if dest.Host != "" {
|
||||||
|
state, _ := Initialize(dest.Host, r)
|
||||||
|
if err := state.LemmyError(dest.Host); err != nil {
|
||||||
|
data["Error"] = err
|
||||||
|
} else {
|
||||||
redirectUrl := "/" + dest.Host + dest.Path
|
redirectUrl := "/" + dest.Host + dest.Path
|
||||||
if dest.RawQuery != "" {
|
if dest.RawQuery != "" {
|
||||||
redirectUrl = redirectUrl + "?" + dest.RawQuery
|
redirectUrl = redirectUrl + "?" + dest.RawQuery
|
||||||
|
@ -259,7 +264,9 @@ func PostRoot(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
http.Redirect(w, r, redirectUrl, 302)
|
http.Redirect(w, r, redirectUrl, 302)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
data["Error"] = "Invalid destination"
|
data["Error"] = "Invalid destination"
|
||||||
|
}
|
||||||
tmpl.Execute(w, data)
|
tmpl.Execute(w, data)
|
||||||
}
|
}
|
||||||
func GetIcon(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
func GetIcon(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
@ -271,7 +278,6 @@ func GetIcon(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
state.Client.Token = ""
|
state.Client.Token = ""
|
||||||
resp, err := state.Client.Site(context.Background(), types.GetSite{})
|
resp, err := state.Client.Site(context.Background(), types.GetSite{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
w.Write([]byte("500 - Server Error"))
|
w.Write([]byte("500 - Server Error"))
|
||||||
return
|
return
|
||||||
|
|
22
state.go
22
state.go
|
@ -211,6 +211,25 @@ func (state *State) ParseQuery(RawQuery string) {
|
||||||
//
|
//
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
func (state *State) LemmyError(domain string) error {
|
||||||
|
var nodeInfo NodeInfo
|
||||||
|
res, err := state.HTTPClient.Get("https://" + domain + "/nodeinfo/2.0.json")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if res.StatusCode != http.StatusOK {
|
||||||
|
return fmt.Errorf("Status Code: %v", res.StatusCode)
|
||||||
|
}
|
||||||
|
err = json.NewDecoder(res.Body).Decode(&nodeInfo)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if nodeInfo.Software.Name == "lemmy" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New("Not a lemmy instance")
|
||||||
|
}
|
||||||
|
|
||||||
func (state *State) GetCaptcha() {
|
func (state *State) GetCaptcha() {
|
||||||
resp, err := state.Client.Captcha(context.Background(), types.GetCaptcha{})
|
resp, err := state.Client.Captcha(context.Background(), types.GetCaptcha{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -227,8 +246,8 @@ func (state *State) GetSite() {
|
||||||
state.Client.Token = ""
|
state.Client.Token = ""
|
||||||
resp, err := state.Client.Site(context.Background(), types.GetSite{})
|
resp, err := state.Client.Site(context.Background(), types.GetSite{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
|
||||||
state.Status = http.StatusInternalServerError
|
state.Status = http.StatusInternalServerError
|
||||||
|
state.Host = ""
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
state.Client.Token = token
|
state.Client.Token = token
|
||||||
|
@ -420,7 +439,6 @@ func (state *State) GetCommunities() {
|
||||||
Limit: types.NewOptional(int64(20)),
|
Limit: types.NewOptional(int64(20)),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
state.TopCommunities = resp.Communities
|
state.TopCommunities = resp.Communities
|
||||||
|
|
|
@ -11,11 +11,12 @@
|
||||||
<span>-</span>
|
<span>-</span>
|
||||||
<a {{ if eq .Sort "TopAll"}}class="selected"{{end}} href="{{ .SortBy "TopAll"}}">all time</a>
|
<a {{ if eq .Sort "TopAll"}}class="selected"{{end}} href="{{ .SortBy "TopAll"}}">all time</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if and (not .SearchType ) (not (and .Session (not .Posts) (not .Community) (and .Listing "Subscribed"))) }}
|
<a href="{{ .ListBy "All"}}" {{if eq .Listing "All"}}class="selected"{{end}}>everywhere</a>
|
||||||
popular in:
|
|
||||||
<a href="{{ .ListBy "All"}}" {{if eq .Listing "All"}}class="selected"{{end}}>Everywhere</a>
|
|
||||||
<span>-</span>
|
<span>-</span>
|
||||||
<a href="{{ .ListBy "Local"}}" {{if eq .Listing "Local"}}class="selected"{{end}}>Local</a>
|
<a href="{{ .ListBy "Local"}}" {{if eq .Listing "Local"}}class="selected"{{end}}>local</a>
|
||||||
|
{{ if .Session }}
|
||||||
|
<span>-</span>
|
||||||
|
<a href="{{ .ListBy "Subscribed"}}" {{if eq .Listing "Subscribed"}}class="selected"{{end}}>subscribed</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue