Merge branch 'new-tls'

* new-tls:
  Cleanups and tweaks
  Add redirection middleware
  Add DowngradingListener

Conflicts:
	auto/gui.files.go
This commit is contained in:
Jakob Borg committed 2014-09-15 00:19:07 +02:00
commit 55ea207a55
4 files changed
+95 -34

No files matched your search

+1 -1
View File
@@ -27,7 +27,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr) bs, _ = ioutil.ReadAll(gr)
assets["angular/angular.min.js"] = bs assets["angular/angular.min.js"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+x9e3MbN5L4//oUMH/+haRNjSQn69qzouQc2d7Txq+SrOxVKdqrIQmSEw1nmHlI5tr67tfdwMzgORxK2txe1bESixwAjUaj0S80MHt77DhdrbNovijY4HjInu0ffMf+Gl6lY/ZTms1ZmEyhRlJk0bgs0ixng5xzViw4O/7w/tPpyU/nnz6cnrFZFPNhsAPgXsYxI3A5y3jOs2s+Ddh5zlk6g2ZRzvK0zCacTdIpZ/Bznl7zLOFTNl5DZ+zdyafdvFjHHGHF0YQnOXYXFmwCpWPOZmkJKEUJ4fD25Pj1+7PX1H2ws7P35Lc8jpKCjbP0Bvp+wYqs5CPoKymipOTV71Vc5vi/+M2e7EHLeZyOw5g9fsFmYZxDpTCZl3GYyd9YaadfwpccaDEp+oc7O9dhxvJ1MoFhJXN2VLUIlum0jPmgX5f1R+yivwrzSRivMj5ZFEGRhUkehwXvXw4PCVCZxeMQwB+xPtCN4NftAxjALJoPZiU8iNKEDR4vimL1MUuvoynPRuxxDa96NmRfdhh8tIrBlM/CMi7y4HOezf6Dh/DsfbikTv9z9/js9M3up/SKJ9D5hrbHaXoV8aqt1lI0tRAKgHZnRVhEkzcwWfnbFDsfCCTxA4SZRZ9fsH4MZNzDf3b7o7o0L2eiNPgtT5M+Pb8FyuH/Op2KLI1jgNx/fc2T4rjIYqC+Qrh8kq5gdmlsNZHoYRCHeUGtYExJGceCCjg5WHLyCh7vy/HR1JeTCc/zNwk8bzqYhkVYwcUPsPHfFjxhZzWj4PSGGayPmwVQgvg4TuH5ChDHchhEwgU0WB9RooJaZekc2ufUSnI5g4p5CjOxAnrP0myJK68osyRnIaznfViyUTKhjlRQC5r+nC3CHNYVYDiDFbGAhXgTFQuCL6CIlQpwhiNRlKQMBxmowD7hygb+jYDF4zVbcph9sWwRkDKiujcUDsWI5AtVgXYqwBuol6QFCydFSSCB2jDuWRk3/UYzNnhk0hs/PMvS7E0i5uJQKxJjap7d7tRfJRc85suoGPTPTz4kMB28Pzzc0XqUvPAD2ze7JarABLwOJwtlrXJkKbMufoAseQqCK07ngx7V6o0Y/Q2iafWtWCO7iu+O8ViIW62MBrfK79tDa/TqGsDuLmhQMU/mMPO77OCyaV0vCrMpYK8Ahmn+FC15WhYKTUxy0HIM5rwYVHLwKevvEf75j8S+R314JLocak0DuQ4H9Xo0yokbBpIn1NGP2J+Aq8WDW2Vhy6qty9piltnM4pb7jzyOAPzRQf/hRnywbw15Swzaerd6bpHPtUBsl9GqcoPvcToJsVZFRpwvUB3Xr6BYyOfqKQzow8/wCFV88zQJr6M5QEjmL2/CNU4xavemPKVFbz+XQlsoelmm6o5JulzFnPA/Yl9uD/Uy1N6+5ycJUkJDtCmXYjO3GxON8fnFpfYcjA8e29WXa1qq/b72NIHKDhigZYp0ksbHC1DDoBE0asg6GV+lWQFkD+3ORNlHmJaI33hbOwYFtmXyGgdmo1qu5hkorJNkljragWFRgXPz9NMe2RS9Yc2+Db9hQW7o7DeRVEyzKMsLhlXKcM4rwzOO4OFKmDZkuuJDsHCyfl6pZRUaacII9bEwc9AYDhugNxz04jVn4XUYxeEYVAIoVGoxYj2e9FRQOcpm2WFlANxEYHQvw2KyoOoM6Ad/d8/PQJ8II6P3j8Xup7/1qKYKTTQCpl/XVVAjo+bF38fve0Ejz4QllMxHohmshUa0gNpjA6wQ0SqEP99T3VzqDnjy9Kkp+7ACVKd6F9GlrqiErgWhIZXP9+yZR4mSbW9oOe1XhS70dR3G0fQtIQZOQwGCqOEDYMk8AupjsasrsnO4QFcaEs3k76GE2BNlaMyISRkTx8TpjcIPCrgJcGbA/oYW0nIVZmCjpdIehAZYyMA5yhE58p54zTJOYGin1awE5iWPFWOp+qiDBHqoP4MifYsdH0PHg6HVEidEqy4n5gemTJOLbviRtqTWHpYY//xhRrM8ZEe19NYmknH0vlqBxiowfRI9QL0WUTXOimPqMR6xA9fQGt2E/k3d7GL/0mGnmbanjsqtJn6Ag8bh5AqRgcVIzEvA+XTH0zeu/EqzD6UUHNwAWdKbYTCGv4P+mMMy5WUSg/OlaFzNJrEUZKOWboe6znsMTXu1RhbK4kxI156qz1XwlQxBs7FqCWI/zMBkHgZYcmhY2/ZaNAZOVQ4NOpq4JpxPXza6tK7dz5Z9cCtf8VjxNuHhNMrkc7D9omyolqI9g4Wot9XnRVpOFlhwvpqiay+Kbk00TiYeJDK+TK+5Ew+7qEICplfOpwMRMJd5FuVXNSrm9DVujjphZPuBb5ZppMfpkObRN9+wR41FZM5Pi4+FMJSGhv+UTsol+g81Y2QchzZAFlRn2CUTVGdKc97USnLkUQJGu1FUG34NvzfjsW0/Deqg//8SXtyk2RUZL/0hWmFhPOgvwDywcIDaDcTNdfNFWeAk+2u6Ob6aXumYdJtfY/V//coeCcJsMcfmTDSekUVrg5jk0Pv5ykvnbrTA6BOXJm0HcqCkmgrzFkrI99YxVQ1u4SajVXtpYe2uRjYrl142aN5OQ3gLCyM+QU0nRMy9xwHWKNB7cQoYDWrcVB8WdJHoiikeDqJe5mTzoaUjvAiyccH8yBdkyGBACIFRzCgw/Way/1VqvEcYjuAJwj6eOUQM4X1c41RVJEAnr0ZMHU1N2aFfkfVPQcQW/I8grn8QVAtHYuPvxBkH+yrKpaPYCWPgQg6zabuYF9UAgmh6aSGJPeECygeb8DneAhla8BtQ8awnX3VNsdb9JONV/oLtj6yStCx8RSfJT+uC55/SIoydFT6UxYYaL6dTjNa+qJkjCOGJXu/WqaKa1bZ5dP9VCAQO9ve9oFuEyjGFISgg75gzc7q02EXwYUUzEJyfvgS7b1VgsODIjoyCFDmZgX+Mzq4IDqAyrWPBCQcZAX5sWMFIQLJM+QS1xHRkQgIZcxOCEwy+Uphf1Z43/l6GV+D6sMkijSbgWP1UkkSapkm/oDYmKGgyLucIYsmmZYZIoW0QhTEG78rViOUpyTReIFja9CCBZgECJIpoySs/TUQNrqM8KgIR/xd7WAICiMYVxr9thKpwOMGCasuUZGmY4L5XxhbwT87CeTpCrOToTRi/l6BB0Xra0UpQVBFavyBWqHgqc0tghcImDid8sDf48QX89/evwZPDX/Mnw6YR/Pr1CP4ZXPz98PLJMHjyePj17/Dv3oj1Hh/0HH7Uo6axy30yUACkek2Dox57yjCuBxLxBpyIp6x3uAw/7wITUdG3+0+efffk2+f7hofndRkRoacKCb5Xoe8yAesJRUjd/iYaIKXT7Kj7bnXuar/MWn1n4LN3EZglaSYyA0TDQSUdVKXtjuiKJbtHjoMrDObaSXFHKkkaqc9aVCxpSD5OoRs+fQP/anG6undVV5LWM5TsFUdftKdUQxbAmob5qPd1Ae0sDeKogoOST1ti9X7aknX3I6JD+xQ8wWDM+ekJ6vY0gZkUg+pKdoP8wnYkQ0lS3+Y8/GgbSiqpRkQpYVS4uNbcIxL7BCNmOl47LSSsDQNjZm2WFZxjzjBog+MqUP4oyl8vV8X6w/g30PG6zhnam1Z1gF18OXSX18rqbQRucXJWZM3elbOG1N7Bb2kEC3XE+o6uqwi6DoesWQuNZDsb17YEdBv3HsbA0INbDppZoCPikY4BV5F7/PsuXBn2AHIbiNY0i3iudCLmMQA2yQcqnKGDGubqx48lHZw2k3Aq7uRPKJ20+BSOrm8N90IXRjVPe+ZWbh9qFpjtzLpF5dkaeHSpySi3bMqp4rYiX24YkajH706KC9BOmeSSRQLlniWHbj2iwz0jch7MyAVGv4+OjlT83UELV8zCVjFNp6hoCPq/kL5phMKPiBopHYlj/5sHV0O6m6aJI2uwDi4xmyj7d+bntk0NmnA0jaiUHu44oeAcg3DE/akRm1CGg2NvAD/1ZtZkucL9mzsMHUmGrZEje0Im99rq48e9lbWZPPjBgT098lIKULn0g0ViQOODB5iTQIwV46iA0R6C9kyHS0Aoi27EmrU+8s7AH2zL1GhWsQcZEtkog5VoRWdBTOkKKe6fN26KrtIL3JofYJ3dOgliCESnAeu+2NSYBSVnAtrrJCP2jyjJ0icV6tSrAFTch5vkYwbTkxVraDb0sbmfvW0OK7K1BwolJUXTy4BiOoD+u7BYBOAXDmCO/8yeCFpSDTWAAxRyBI7MWki8YurgKq1nETNq7VoLDfn71qp5O79lE9qmH1hReC9RPILNHsLm3dENwbfOyr9ZNPnWFgCF+7usM5EVs62tU+fSdBuJwOYOZgx5P52EBVTsPAjbwXK4eZ4ZgdrucfxLxRKaSIIZjd5sR7kygShdaA81iDMfqAX5KtHIZpTaZiAzrDEaqIXTsFPKpe58G+bFGQZEQSjzGxL7g5Zq/lRQV+1X4TondVFBHjZyyQldKhL48+fn31lBto3cVc9Ry0KpMjDVqBgGYJXUS20yDdfHsZUilpirQNfY7RscG7hfJuVsy/lVLo/JPh3Wmwiab9uhlqO3dZ8y427bTvVEPbNXmSHakg/blu6nMY/ONnIataTdLVlnA4dUSsjT/So9E9uiKgYuTxVzs9OZM7YHzkK/TKZ8hhsffbf7ijWuEkwIOHR5stbOtIiHRAllvrFH2IUXcl6kqxX07IRcVULP0tED7Wd7aXMch/kfQJoI+OWfQJcpJg1kbsB0FETu5XegTYWLbAJtomnM/TMill7f5bjoYFAXU0KJB9Iqi5Zhtu4CaRImyV1BOWbCYAdE9CPPJjwpcD/wn80TB6rqut3ED+IYGBnlBN/aynRD1bhhNUEFBjXAJXCyHJo5oos9VwUFh0OTruRyzOIUZCh045ZFqMcxyUwjrSPwqW/n1o6JEWU2CaC18oamv/lmcLine truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr) bs, _ = ioutil.ReadAll(gr)
assets["app.js"] = bs assets["app.js"] = bs
+42 -25
View File
@@ -52,33 +52,28 @@ func init() {
} }
func startGUI(cfg config.GUIConfiguration, assetDir string, m *model.Model) error { func startGUI(cfg config.GUIConfiguration, assetDir string, m *model.Model) error {
var listener net.Listener
var err error var err error
if cfg.UseTLS {
cert, err := loadCert(confDir, "https-") cert, err := loadCert(confDir, "https-")
if err != nil { if err != nil {
l.Infoln("Loading HTTPS certificate:", err) l.Infoln("Loading HTTPS certificate:", err)
l.Infoln("Creating new HTTPS certificate") l.Infoln("Creating new HTTPS certificate")
newCertificate(confDir, "https-") newCertificate(confDir, "https-")
cert, err = loadCert(confDir, "https-") cert, err = loadCert(confDir, "https-")
}
if err != nil {
return err
}
tlsCfg := &tls.Config{
Certificates: []tls.Certificate{cert},
ServerName: "syncthing",
}
listener, err = tls.Listen("tcp", cfg.Address, tlsCfg)
if err != nil {
return err
}
} else {
listener, err = net.Listen("tcp", cfg.Address)
if err != nil {
return err
}
} }
if err != nil {
return err
}
tlsCfg := &tls.Config{
Certificates: []tls.Certificate{cert},
ServerName: "syncthing",
}
rawListener, err := net.Listen("tcp", cfg.Address)
if err != nil {
return err
}
listener := &DowngradingListener{rawListener, tlsCfg}
// The GET handlers // The GET handlers
getRestMux := http.NewServeMux() getRestMux := http.NewServeMux()
@@ -140,6 +135,11 @@ func startGUI(cfg config.GUIConfiguration, assetDir string, m *model.Model) erro
handler = basicAuthAndSessionMiddleware(cfg, handler) handler = basicAuthAndSessionMiddleware(cfg, handler)
} }
// Redirect to HTTPS if we are supposed to
if cfg.UseTLS {
handler = redirectToHTTPSMiddleware(handler)
}
go http.Serve(listener, handler) go http.Serve(listener, handler)
return nil return nil
} }
@@ -157,6 +157,23 @@ func getPostHandler(get, post http.Handler) http.Handler {
}) })
} }
func redirectToHTTPSMiddleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Add a generous access-control-allow-origin header since we may be
// redirecting REST requests over protocols
w.Header().Add("Access-Control-Allow-Origin", "*")
if r.TLS == nil {
// Redirect HTTP requests to HTTPS
r.URL.Host = r.Host
r.URL.Scheme = "https"
http.Redirect(w, r, r.URL.String(), http.StatusFound)
} else {
h.ServeHTTP(w, r)
}
})
}
func noCacheMiddleware(h http.Handler) http.Handler { func noCacheMiddleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Cache-Control", "no-cache")
+40
View File
@@ -5,6 +5,7 @@
package main package main
import ( import (
"bufio"
"crypto/rand" "crypto/rand"
"crypto/rsa" "crypto/rsa"
"crypto/sha256" "crypto/sha256"
@@ -13,8 +14,10 @@ import (
"crypto/x509/pkix" "crypto/x509/pkix"
"encoding/binary" "encoding/binary"
"encoding/pem" "encoding/pem"
"io"
"math/big" "math/big"
mr "math/rand" mr "math/rand"
"net"
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
@@ -73,3 +76,40 @@ func newCertificate(dir string, prefix string) {
pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}) pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
keyOut.Close() keyOut.Close()
} }
type DowngradingListener struct {
net.Listener
TLSConfig *tls.Config
}
type WrappedConnection struct {
io.Reader
net.Conn
}
func (l *DowngradingListener) Accept() (net.Conn, error) {
conn, err := l.Listener.Accept()
if err != nil {
return nil, err
}
br := bufio.NewReader(conn)
bs, err := br.Peek(1)
if err != nil {
conn.Close()
return nil, err
}
wrapper := &WrappedConnection{br, conn}
// 0x16 is the first byte of a TLS handshake
if bs[0] == 0x16 {
return tls.Server(wrapper, l.TLSConfig), nil
}
return wrapper, nil
}
func (c *WrappedConnection) Read(b []byte) (n int, err error) {
return c.Reader.Read(b)
}
+12 -8
View File
@@ -153,13 +153,17 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
return; return;
} }
console.log('UIOnline'); if (restarting){
$scope.init(); document.location.reload(true);
online = true; } else {
restarting = false; console.log('UIOnline');
$('#networkError').modal('hide'); $scope.init();
$('#restarting').modal('hide'); online = true;
$('#shutdown').modal('hide'); restarting = false;
$('#networkError').modal('hide');
$('#restarting').modal('hide');
$('#shutdown').modal('hide');
}
}); });
$scope.$on('UIOffline', function (event, arg) { $scope.$on('UIOffline', function (event, arg) {
@@ -585,7 +589,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
setTimeout(function(){ setTimeout(function(){
window.location.protocol = protocol; window.location.protocol = protocol;
}, 1000); }, 2500);
$scope.protocolChanged = false; $scope.protocolChanged = false;
} }