👔 Added redirects support in server use case
This commit is contained in:
parent
8db047603d
commit
421a45afcb
|
@ -12,7 +12,8 @@ type UseCase interface {
|
|||
}
|
||||
|
||||
var (
|
||||
ErrParams error = errors.New("site not contains any params")
|
||||
ErrServer error = errors.New("site not contains 'server' param")
|
||||
ErrServerHeader error = errors.New("'server' param in site not contains 'header' param")
|
||||
ErrParams error = errors.New("site not contains any params")
|
||||
ErrServer error = errors.New("site not contains 'server' param")
|
||||
ErrServerHeaders error = errors.New("'server' param in site not contains 'headers' param")
|
||||
ErrServerRedirects error = errors.New("'server' param in site not contains 'redirects' param")
|
||||
)
|
||||
|
|
|
@ -23,12 +23,18 @@ func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server,
|
|||
return nil, server.ErrServer
|
||||
}
|
||||
|
||||
serverHeadersValues, ok := serverMap["headers"].([]any)
|
||||
if !ok {
|
||||
return nil, server.ErrServerHeader
|
||||
}
|
||||
|
||||
out := domain.NewServer()
|
||||
parseHeaders(out, serverMap)
|
||||
parseRedirects(out, serverMap)
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func parseHeaders(dst *domain.Server, params map[string]any) error {
|
||||
serverHeadersValues, ok := params["headers"].([]any)
|
||||
if !ok {
|
||||
return server.ErrServerHeaders
|
||||
}
|
||||
|
||||
for i := range serverHeadersValues {
|
||||
headerMap, ok := serverHeadersValues[i].(map[string]any)
|
||||
|
@ -59,8 +65,46 @@ func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server,
|
|||
header.Headers[name] = v
|
||||
}
|
||||
|
||||
out.Headers = append(out.Headers, header)
|
||||
dst.Headers = append(dst.Headers, header)
|
||||
}
|
||||
|
||||
return out, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseRedirects(dst *domain.Server, params map[string]any) error {
|
||||
serverRedirectsValues, ok := params["redirects"].([]any)
|
||||
if !ok {
|
||||
return server.ErrServerRedirects
|
||||
}
|
||||
|
||||
for i := range serverRedirectsValues {
|
||||
redirectMap, ok := serverRedirectsValues[i].(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
redirect := domain.Redirect{
|
||||
From: "",
|
||||
To: "",
|
||||
Status: 0,
|
||||
Force: false,
|
||||
}
|
||||
redirect.Force, _ = redirectMap["force"].(bool)
|
||||
|
||||
if redirect.From, ok = redirectMap["from"].(string); !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
if redirect.To, ok = redirectMap["to"].(string); !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
if redirect.Status, ok = redirectMap["status"].(int); !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
dst.Redirects = append(dst.Redirects, redirect)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -34,7 +34,17 @@ func TestDo(t *testing.T) {
|
|||
"X-Testing": `sample-text`,
|
||||
},
|
||||
}},
|
||||
Redirects: make([]domain.Redirect, 0),
|
||||
Redirects: []domain.Redirect{{
|
||||
From: "/foo/bar",
|
||||
To: "/bar/foo",
|
||||
Status: 302,
|
||||
Force: false,
|
||||
}, {
|
||||
From: "/foo",
|
||||
To: "https://example.com/",
|
||||
Status: 301,
|
||||
Force: true,
|
||||
}},
|
||||
}
|
||||
if diff := cmp.Diff(actual, expect); diff != "" {
|
||||
t.Error(diff)
|
||||
|
|
Loading…
Reference in New Issue