Compare commits
3 Commits
b0f83f9f61
...
eb331889bb
Author | SHA1 | Date |
---|---|---|
Maxim Lebedev | eb331889bb | |
Maxim Lebedev | f50889d95f | |
Maxim Lebedev | c5ee786b8e |
|
@ -62,8 +62,7 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
|
||||||
// INFO(toby3d): any static file is public and unprotected by design, so it's safe to search it
|
// INFO(toby3d): any static file is public and unprotected by design, so it's safe to search it
|
||||||
// first before deep down to any page or it's resource which might be secured by middleware or
|
// first before deep down to any page or it's resource which might be secured by middleware or
|
||||||
// something else.
|
// something else.
|
||||||
static, err := staticer.Do(r.Context(), strings.TrimPrefix(r.URL.Path, "/"))
|
if static, err := staticer.Do(r.Context(), strings.TrimPrefix(r.URL.Path, "/")); err == nil {
|
||||||
if err == nil {
|
|
||||||
http.ServeContent(w, r, static.Name(), static.ModTime(), static)
|
http.ServeContent(w, r, static.Name(), static.ModTime(), static)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -11,4 +11,6 @@ const (
|
||||||
MIMETextHTMLCharsetUTF8 string = MIMETextHTML + "; " + charsetUTF8
|
MIMETextHTMLCharsetUTF8 string = MIMETextHTML + "; " + charsetUTF8
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const Und string = "und"
|
||||||
|
|
||||||
const charsetUTF8 string = "charset=UTF-8"
|
const charsetUTF8 string = "charset=UTF-8"
|
||||||
|
|
|
@ -5,6 +5,8 @@ import (
|
||||||
|
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
"golang.org/x/text/language/display"
|
"golang.org/x/text/language/display"
|
||||||
|
|
||||||
|
"source.toby3d.me/toby3d/home/internal/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Language struct {
|
type Language struct {
|
||||||
|
@ -14,7 +16,7 @@ type Language struct {
|
||||||
dir string
|
dir string
|
||||||
}
|
}
|
||||||
|
|
||||||
var LanguageUnd Language = Language{}
|
var LanguageUnd Language = Language{} // "und"
|
||||||
|
|
||||||
func NewLanguage(raw string) Language {
|
func NewLanguage(raw string) Language {
|
||||||
tag, err := language.BCP47.Parse(raw)
|
tag, err := language.BCP47.Parse(raw)
|
||||||
|
@ -60,7 +62,7 @@ func (l Language) String() string {
|
||||||
return l.code
|
return l.code
|
||||||
}
|
}
|
||||||
|
|
||||||
return "und"
|
return common.Und
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l Language) GoString() string {
|
func (l Language) GoString() string {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package domain_test
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"source.toby3d.me/toby3d/home/internal/common"
|
||||||
"source.toby3d.me/toby3d/home/internal/domain"
|
"source.toby3d.me/toby3d/home/internal/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -13,10 +14,10 @@ func TestLanguage_Lang(t *testing.T) {
|
||||||
input string
|
input string
|
||||||
expect string
|
expect string
|
||||||
}{
|
}{
|
||||||
"2letter": {"en", "en"},
|
"2letter": {"en", "en"},
|
||||||
"3letter": {"eng", "en"},
|
"3letter": {"eng", "en"},
|
||||||
"region": {"en-US", "en"},
|
"region": {"en-US", "en"},
|
||||||
"und": {"", ""},
|
common.Und: {"", ""},
|
||||||
} {
|
} {
|
||||||
name, tc := name, tc
|
name, tc := name, tc
|
||||||
|
|
||||||
|
@ -37,10 +38,10 @@ func TestLanguage_Code(t *testing.T) {
|
||||||
input string
|
input string
|
||||||
expect string
|
expect string
|
||||||
}{
|
}{
|
||||||
"2letter": {"en", "en"},
|
"2letter": {"en", "en"},
|
||||||
"3letter": {"eng", "en"},
|
"3letter": {"eng", "en"},
|
||||||
"region": {"en-US", "en-US"},
|
"region": {"en-US", "en-US"},
|
||||||
"und": {"", ""},
|
common.Und: {"", ""},
|
||||||
} {
|
} {
|
||||||
name, tc := name, tc
|
name, tc := name, tc
|
||||||
|
|
||||||
|
@ -61,11 +62,11 @@ func TestLanguage_Dir(t *testing.T) {
|
||||||
input string
|
input string
|
||||||
expect string
|
expect string
|
||||||
}{
|
}{
|
||||||
"2letter": {"en", "ltr"},
|
"2letter": {"en", "ltr"},
|
||||||
"rtl": {"ur", "rtl"},
|
"rtl": {"ur", "rtl"},
|
||||||
"3letter": {"eng", "ltr"},
|
"3letter": {"eng", "ltr"},
|
||||||
"region": {"en-US", "ltr"},
|
"region": {"en-US", "ltr"},
|
||||||
"und": {"", ""},
|
common.Und: {"", ""},
|
||||||
} {
|
} {
|
||||||
name, tc := name, tc
|
name, tc := name, tc
|
||||||
|
|
||||||
|
@ -90,7 +91,7 @@ func TestLanguage_Name(t *testing.T) {
|
||||||
"2letter": {"en", "english"},
|
"2letter": {"en", "english"},
|
||||||
"3letter": {"eng", "english"},
|
"3letter": {"eng", "english"},
|
||||||
"region": {"en-US", "american english"},
|
"region": {"en-US", "american english"},
|
||||||
"und": {"", ""},
|
common.Und: {"", ""},
|
||||||
} {
|
} {
|
||||||
name, tc := name, tc
|
name, tc := name, tc
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,7 @@ type Redirect struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r Redirect) IsMatch(p string) bool {
|
func (r Redirect) IsMatch(p string) bool {
|
||||||
matched, err := path.Match(r.From, p)
|
matched, _ := path.Match(r.From, p)
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return matched
|
return matched
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package domain
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
|
"source.toby3d.me/toby3d/home/internal/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ResourceType string
|
type ResourceType string
|
||||||
|
@ -22,7 +24,7 @@ func (rt ResourceType) String() string {
|
||||||
return string(rt)
|
return string(rt)
|
||||||
}
|
}
|
||||||
|
|
||||||
return "und"
|
return common.Und
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rt ResourceType) GoString() string {
|
func (rt ResourceType) GoString() string {
|
||||||
|
|
|
@ -23,14 +23,14 @@ func TestDo(t *testing.T) {
|
||||||
expect := &domain.Server{
|
expect := &domain.Server{
|
||||||
Headers: []domain.Header{{
|
Headers: []domain.Header{{
|
||||||
Path: "/**",
|
Path: "/**",
|
||||||
Headers: map[string]string{
|
Values: map[string]string{
|
||||||
"Link": `<https://auth.example.com/>; rel="indieauth-metadata", ` +
|
"Link": `<https://auth.example.com/>; rel="indieauth-metadata", ` +
|
||||||
`<https://pub.example.com/>; rel="micropub"`,
|
`<https://pub.example.com/>; rel="micropub"`,
|
||||||
"X-Koroko": "Ya-ha-ha!",
|
"X-Koroko": "Ya-ha-ha!",
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Path: "/foo/bar",
|
Path: "/foo/bar",
|
||||||
Headers: map[string]string{
|
Values: map[string]string{
|
||||||
"X-Testing": `sample-text`,
|
"X-Testing": `sample-text`,
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
|
|
12
main.go
12
main.go
|
@ -9,7 +9,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -24,17 +23,6 @@ import (
|
||||||
"source.toby3d.me/toby3d/home/internal/domain"
|
"source.toby3d.me/toby3d/home/internal/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
|
||||||
App struct {
|
|
||||||
server *http.Server
|
|
||||||
}
|
|
||||||
|
|
||||||
Context struct {
|
|
||||||
Site *domain.Site
|
|
||||||
Page *domain.Page
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
config = new(domain.Config)
|
config = new(domain.Config)
|
||||||
logger = log.New(os.Stdout, "home\t", log.Lmsgprefix|log.LstdFlags|log.LUTC)
|
logger = log.New(os.Stdout, "home\t", log.Lmsgprefix|log.LstdFlags|log.LUTC)
|
||||||
|
|
Loading…
Reference in New Issue