mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2024-12-26 12:20:19 +01:00
93 lines
2.6 KiB
Go
93 lines
2.6 KiB
Go
/*
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2014 DutchCoders [https://github.com/dutchcoders/]
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"github.com/goamz/goamz/aws"
|
|
"github.com/goamz/goamz/s3"
|
|
"github.com/golang/gddo/httputil/header"
|
|
"net/http"
|
|
"net/mail"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func getBucket() (*s3.Bucket, error) {
|
|
auth, err := aws.GetAuth(config.AWS_ACCESS_KEY, config.AWS_SECRET_KEY, "", time.Time{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
conn := s3.New(auth, aws.Regions["eu-west-1"])
|
|
b := conn.Bucket(config.BUCKET)
|
|
return b, nil
|
|
}
|
|
|
|
// Request.RemoteAddress contains port, which we want to remove i.e.:
|
|
// "[::1]:58292" => "[::1]"
|
|
func ipAddrFromRemoteAddr(s string) string {
|
|
idx := strings.LastIndex(s, ":")
|
|
if idx == -1 {
|
|
return s
|
|
}
|
|
return s[:idx]
|
|
}
|
|
|
|
func getIpAddress(r *http.Request) string {
|
|
hdr := r.Header
|
|
hdrRealIp := hdr.Get("X-Real-Ip")
|
|
hdrForwardedFor := hdr.Get("X-Forwarded-For")
|
|
if hdrRealIp == "" && hdrForwardedFor == "" {
|
|
return ipAddrFromRemoteAddr(r.RemoteAddr)
|
|
}
|
|
if hdrForwardedFor != "" {
|
|
// X-Forwarded-For is potentially a list of addresses separated with ","
|
|
parts := strings.Split(hdrForwardedFor, ",")
|
|
for i, p := range parts {
|
|
parts[i] = strings.TrimSpace(p)
|
|
}
|
|
// TODO: should return first non-local address
|
|
return parts[0]
|
|
}
|
|
return hdrRealIp
|
|
}
|
|
|
|
func encodeRFC2047(String string) string {
|
|
// use mail's rfc2047 to encode any string
|
|
addr := mail.Address{String, ""}
|
|
return strings.Trim(addr.String(), " <>")
|
|
}
|
|
|
|
func acceptsHtml(hdr http.Header) bool {
|
|
actual := header.ParseAccept(hdr, "Accept")
|
|
|
|
for _, s := range actual {
|
|
if s.Value == "text/html" {
|
|
return (true)
|
|
}
|
|
}
|
|
|
|
return (false)
|
|
}
|