mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-04 11:19:39 -06:00
73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package thumbnail
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/go-chi/chi"
|
|
)
|
|
|
|
const (
|
|
// DefaultWidth defines the default width of a thumbnail
|
|
DefaultWidth = 32
|
|
// DefaultHeight defines the default height of a thumbnail
|
|
DefaultHeight = 32
|
|
)
|
|
|
|
// Request combines all parameters provided when requesting a thumbnail
|
|
type Request struct {
|
|
Filepath string
|
|
Filetype string
|
|
Etag string
|
|
Width int
|
|
Height int
|
|
Authorization string
|
|
}
|
|
|
|
// NewRequest extracts all required parameters from a http request.
|
|
func NewRequest(r *http.Request) (Request, error) {
|
|
path := extractFilePath(r)
|
|
query := r.URL.Query()
|
|
width, err := strconv.Atoi(query.Get("x"))
|
|
if err != nil {
|
|
width = DefaultWidth
|
|
}
|
|
height, err := strconv.Atoi(query.Get("y"))
|
|
if err != nil {
|
|
height = DefaultHeight
|
|
}
|
|
|
|
etag := query.Get("c")
|
|
if strings.TrimSpace(etag) == "" {
|
|
return Request{}, fmt.Errorf("c (etag) is missing in query")
|
|
}
|
|
|
|
authorization := r.Header.Get("Authorization")
|
|
|
|
tr := Request{
|
|
Filepath: path,
|
|
Filetype: strings.Replace(filepath.Ext(path), ".", "", 1),
|
|
Etag: etag,
|
|
Width: width,
|
|
Height: height,
|
|
Authorization: authorization,
|
|
}
|
|
|
|
return tr, nil
|
|
}
|
|
|
|
// the url looks as followed
|
|
//
|
|
// /remote.php/dav/files/<user>/<filepath>
|
|
//
|
|
// User and filepath are dynamic and filepath can contain slashes
|
|
// So using the URLParam function is not possible.
|
|
func extractFilePath(r *http.Request) string {
|
|
user := chi.URLParam(r, "user")
|
|
parts := strings.SplitN(r.URL.Path, user, 2)
|
|
return parts[1]
|
|
}
|