generated from mattermost/mattermost-plugin-starter-template
-
Notifications
You must be signed in to change notification settings - Fork 29
/
static.go
43 lines (36 loc) · 1.26 KB
/
static.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Copyright (c) 2020-present Mattermost, Inc. All Rights Reserved.
// See License for license information.
package uphttp
import (
"context"
"fmt"
"io"
"net/http"
"github.com/pkg/errors"
"github.com/mattermost/mattermost-plugin-apps/apps"
"github.com/mattermost/mattermost-plugin-apps/apps/path"
"github.com/mattermost/mattermost-plugin-apps/utils"
)
func (u *Upstream) GetStatic(ctx context.Context, app apps.App, urlPath string) (io.ReadCloser, int, error) {
if !app.Manifest.Contains(apps.DeployHTTP) {
return nil, http.StatusInternalServerError, errors.New("app is not available as type http")
}
rootURL, err := u.appRootURL(app, "/")
if err != nil {
return nil, http.StatusNotFound, err
}
url, err := utils.CleanURL(fmt.Sprintf("%s/%s/%s", rootURL, path.StaticFolder, urlPath))
if err != nil {
return nil, http.StatusBadRequest, err
}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil {
return nil, http.StatusInternalServerError, err
}
client := u.httpOut.MakeClient(u.devMode)
resp, err := client.Do(req) // nolint:bodyclose,gosec // Ignore gosec G107
if err != nil {
return nil, http.StatusBadGateway, errors.Wrapf(err, "failed to fetch: %s, error: %v", url, err)
}
return resp.Body, resp.StatusCode, nil
}