httpFs.go - afero - [fork] go afero port for 9front
 (HTM) git clone https://git.drkhsh.at/afero.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       httpFs.go (2728B)
       ---
            1 // Copyright © 2014 Steve Francia <spf@spf13.com>.
            2 //
            3 // Licensed under the Apache License, Version 2.0 (the "License");
            4 // you may not use this file except in compliance with the License.
            5 // You may obtain a copy of the License at
            6 // http://www.apache.org/licenses/LICENSE-2.0
            7 //
            8 // Unless required by applicable law or agreed to in writing, software
            9 // distributed under the License is distributed on an "AS IS" BASIS,
           10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
           11 // See the License for the specific language governing permissions and
           12 // limitations under the License.
           13 
           14 package afero
           15 
           16 import (
           17         "errors"
           18         "net/http"
           19         "os"
           20         "path"
           21         "path/filepath"
           22         "strings"
           23         "time"
           24 )
           25 
           26 type httpDir struct {
           27         basePath string
           28         fs       HttpFs
           29 }
           30 
           31 func (d httpDir) Open(name string) (http.File, error) {
           32         if filepath.Separator != '/' && strings.ContainsRune(name, filepath.Separator) ||
           33                 strings.Contains(name, "\x00") {
           34                 return nil, errors.New("http: invalid character in file path")
           35         }
           36         dir := string(d.basePath)
           37         if dir == "" {
           38                 dir = "."
           39         }
           40 
           41         f, err := d.fs.Open(filepath.Join(dir, filepath.FromSlash(path.Clean("/"+name))))
           42         if err != nil {
           43                 return nil, err
           44         }
           45         return f, nil
           46 }
           47 
           48 type HttpFs struct {
           49         source Fs
           50 }
           51 
           52 func NewHttpFs(source Fs) *HttpFs {
           53         return &HttpFs{source: source}
           54 }
           55 
           56 func (h HttpFs) Dir(s string) *httpDir {
           57         return &httpDir{basePath: s, fs: h}
           58 }
           59 
           60 func (h HttpFs) Name() string { return "h HttpFs" }
           61 
           62 func (h HttpFs) Create(name string) (File, error) {
           63         return h.source.Create(name)
           64 }
           65 
           66 func (h HttpFs) Chmod(name string, mode os.FileMode) error {
           67         return h.source.Chmod(name, mode)
           68 }
           69 
           70 func (h HttpFs) Chown(name string, uid, gid int) error {
           71         return h.source.Chown(name, uid, gid)
           72 }
           73 
           74 func (h HttpFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
           75         return h.source.Chtimes(name, atime, mtime)
           76 }
           77 
           78 func (h HttpFs) Mkdir(name string, perm os.FileMode) error {
           79         return h.source.Mkdir(name, perm)
           80 }
           81 
           82 func (h HttpFs) MkdirAll(path string, perm os.FileMode) error {
           83         return h.source.MkdirAll(path, perm)
           84 }
           85 
           86 func (h HttpFs) Open(name string) (http.File, error) {
           87         f, err := h.source.Open(name)
           88         if err == nil {
           89                 if httpfile, ok := f.(http.File); ok {
           90                         return httpfile, nil
           91                 }
           92         }
           93         return nil, err
           94 }
           95 
           96 func (h HttpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
           97         return h.source.OpenFile(name, flag, perm)
           98 }
           99 
          100 func (h HttpFs) Remove(name string) error {
          101         return h.source.Remove(name)
          102 }
          103 
          104 func (h HttpFs) RemoveAll(path string) error {
          105         return h.source.RemoveAll(path)
          106 }
          107 
          108 func (h HttpFs) Rename(oldname, newname string) error {
          109         return h.source.Rename(oldname, newname)
          110 }
          111 
          112 func (h HttpFs) Stat(name string) (os.FileInfo, error) {
          113         return h.source.Stat(name)
          114 }