@@ -31,6 +31,10 @@ type config struct {
3131 sslCert string // SSL_CERT_PATH
3232 sslKey string // SSL_KEY_PATH
3333 stripPath string // STRIP_PATH
34+ corsAllowOrigin string // CORS_ALLOW_ORIGIN
35+ corsAllowMethods string // CORS_ALLOW_METHODS
36+ corsAllowHeaders string // CORS_ALLOW_HEADERS
37+ corsMaxAge int64 // CORS_MAX_AGE
3438}
3539
3640type symlink struct {
@@ -66,12 +70,6 @@ func main() {
6670}
6771
6872func configFromEnvironmentVariables () * config {
69- if len (os .Getenv ("AWS_ACCESS_KEY_ID" )) == 0 {
70- log .Print ("Not defined environment variable: AWS_ACCESS_KEY_ID" )
71- }
72- if len (os .Getenv ("AWS_SECRET_ACCESS_KEY" )) == 0 {
73- log .Print ("Not defined environment variable: AWS_SECRET_ACCESS_KEY" )
74- }
7573 if len (os .Getenv ("AWS_S3_BUCKET" )) == 0 {
7674 log .Fatal ("Missing required environment variable: AWS_S3_BUCKET" )
7775 }
@@ -87,6 +85,10 @@ func configFromEnvironmentVariables() *config {
8785 if b , err := strconv .ParseBool (os .Getenv ("ACCESS_LOG" )); err == nil {
8886 accessLog = b
8987 }
88+ corsMaxAge := int64 (600 )
89+ if i , err := strconv .ParseInt (os .Getenv ("CORS_MAX_AGE" ), 10 , 64 ); err == nil {
90+ corsMaxAge = i
91+ }
9092 conf := & config {
9193 awsRegion : region ,
9294 s3Bucket : os .Getenv ("AWS_S3_BUCKET" ),
@@ -100,6 +102,10 @@ func configFromEnvironmentVariables() *config {
100102 sslCert : os .Getenv ("SSL_CERT_PATH" ),
101103 sslKey : os .Getenv ("SSL_KEY_PATH" ),
102104 stripPath : os .Getenv ("STRIP_PATH" ),
105+ corsAllowOrigin : os .Getenv ("CORS_ALLOW_ORIGIN" ),
106+ corsAllowMethods : os .Getenv ("CORS_ALLOW_METHODS" ),
107+ corsAllowHeaders : os .Getenv ("CORS_ALLOW_HEADERS" ),
108+ corsMaxAge : corsMaxAge ,
103109 }
104110 // Proxy
105111 log .Printf ("[config] Proxy to %v" , conf .s3Bucket )
@@ -113,6 +119,10 @@ func configFromEnvironmentVariables() *config {
113119 if (len (conf .basicAuthUser ) > 0 ) && (len (conf .basicAuthPass ) > 0 ) {
114120 log .Printf ("[config] Basic authentication: %s" , conf .basicAuthUser )
115121 }
122+ // CORS
123+ if (len (conf .corsAllowOrigin ) > 0 ) && (conf .corsMaxAge > 0 ) {
124+ log .Printf ("[config] CORS enabled: %s" , conf .corsAllowOrigin )
125+ }
116126 return conf
117127}
118128
@@ -128,6 +138,12 @@ func (r *custom) WriteHeader(status int) {
128138
129139func wrapper (f func (w http.ResponseWriter , r * http.Request )) http.Handler {
130140 return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
141+ if (len (c .corsAllowOrigin ) > 0 ) && (len (c .corsAllowMethods ) > 0 ) && (len (c .corsAllowHeaders ) > 0 ) && (c .corsMaxAge > 0 ) {
142+ w .Header ().Set ("Access-Control-Allow-Origin" , c .corsAllowOrigin )
143+ w .Header ().Set ("Access-Control-Allow-Methods" , c .corsAllowMethods )
144+ w .Header ().Set ("Access-Control-Allow-Headers" , c .corsAllowHeaders )
145+ w .Header ().Set ("Access-Control-Max-Age" , strconv .FormatInt (c .corsMaxAge , 10 ))
146+ }
131147 if (len (c .basicAuthUser ) > 0 ) && (len (c .basicAuthPass ) > 0 ) && ! auth (r ) {
132148 w .Header ().Set ("WWW-Authenticate" , `Basic realm="REALM"` )
133149 http .Error (w , http .StatusText (http .StatusUnauthorized ), http .StatusUnauthorized )
0 commit comments