Synchronize user.certificate access

This commit is contained in:
Ken-Håvard Lieng 2016-01-12 00:32:40 +01:00
parent 67b83fa3d6
commit 81500cc89e
4 changed files with 16 additions and 8 deletions

View File

@ -22,9 +22,9 @@ func reconnectIRC() {
i.Password = server.Password i.Password = server.Password
i.Realname = server.Realname i.Realname = server.Realname
if user.Certificate != nil { if cert := user.GetCertificate(); cert != nil {
i.TLSConfig = &tls.Config{ i.TLSConfig = &tls.Config{
Certificates: []tls.Certificate{*user.Certificate}, Certificates: []tls.Certificate{*cert},
} }
} }

View File

@ -105,9 +105,9 @@ func (h *wsHandler) connect(b []byte) {
i.Password = data.Password i.Password = data.Password
i.Realname = data.Realname i.Realname = data.Realname
if h.session.user.Certificate != nil { if cert := h.session.user.GetCertificate(); cert != nil {
i.TLSConfig = &tls.Config{ i.TLSConfig = &tls.Config{
Certificates: []tls.Certificate{*h.session.user.Certificate}, Certificates: []tls.Certificate{*cert},
} }
} }

View File

@ -41,11 +41,11 @@ type Message struct {
} }
type User struct { type User struct {
UUID string UUID string
Certificate *tls.Certificate `json:"-"`
messageLog *bolt.DB messageLog *bolt.DB
messageIndex bleve.Index messageIndex bleve.Index
certificate *tls.Certificate
lock sync.Mutex lock sync.Mutex
} }

View File

@ -12,13 +12,21 @@ var (
ErrCouldNotSaveCert = errors.New("Could not save certificate") ErrCouldNotSaveCert = errors.New("Could not save certificate")
) )
func (u *User) GetCertificate() *tls.Certificate {
u.lock.Lock()
cert := u.certificate
u.lock.Unlock()
return cert
}
func (u *User) SetCertificate(certPEM, keyPEM []byte) error { func (u *User) SetCertificate(certPEM, keyPEM []byte) error {
cert, err := tls.X509KeyPair(certPEM, keyPEM) cert, err := tls.X509KeyPair(certPEM, keyPEM)
if err != nil { if err != nil {
return ErrInvalidCert return ErrInvalidCert
} }
u.lock.Lock() u.lock.Lock()
u.Certificate = &cert u.certificate = &cert
u.lock.Unlock() u.lock.Unlock()
err = os.MkdirAll(Path.User(u.UUID), 0700) err = os.MkdirAll(Path.User(u.UUID), 0700)
@ -55,6 +63,6 @@ func (u *User) loadCertificate() error {
return err return err
} }
u.Certificate = &cert u.certificate = &cert
return nil return nil
} }