diff --git a/file_signer.go b/file_signer.go index 472fd59..835844b 100644 --- a/file_signer.go +++ b/file_signer.go @@ -8,9 +8,11 @@ import ( "fmt" "os" "path/filepath" + "sync" ) type fileSigner struct { + mu sync.Mutex } func NewFileBasedSigner() Signer { @@ -118,6 +120,9 @@ func (f *fileSigner) hashFiles(tmpDir string) (map[string]string, error) { } ret := make(map[string]string) + f.mu.Lock() + defer f.mu.Unlock() + for name, data := range files { hash := sha1.Sum(data) ret[filepath.Base(name)] = fmt.Sprintf("%x", hash) diff --git a/go.mod b/go.mod index 9c55944..894b8b2 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/alvinbaena/passkit go 1.17 require ( - go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 + go.mozilla.org/pkcs7 v0.9.0 gopkg.in/go-playground/colors.v1 v1.2.0 - software.sslmate.com/src/go-pkcs12 v0.4.0 + software.sslmate.com/src/go-pkcs12 v0.5.0 ) require golang.org/x/crypto v0.17.0 // indirect diff --git a/go.sum b/go.sum index 5bf4ff2..08f0ae8 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 h1:CCriYyAfq1Br1aIYettdHZTy8mBTIPo7We18TuO/bak= go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.mozilla.org/pkcs7 v0.9.0 h1:yM4/HS9dYv7ri2biPtxt8ikvB37a980dg69/pKmS+eI= +go.mozilla.org/pkcs7 v0.9.0/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= @@ -47,3 +49,5 @@ gopkg.in/go-playground/colors.v1 v1.2.0 h1:SPweMUve+ywPrfwao+UvfD5Ah78aOLUkT5RlJ gopkg.in/go-playground/colors.v1 v1.2.0/go.mod h1:AvbqcMpNXVl5gBrM20jBm3VjjKBbH/kI5UnqjU7lxFI= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= +software.sslmate.com/src/go-pkcs12 v0.5.0 h1:EC6R394xgENTpZ4RltKydeDUjtlM5drOYIG9c6TVj2M= +software.sslmate.com/src/go-pkcs12 v0.5.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= diff --git a/mem_signer.go b/mem_signer.go index 24a4752..7f4c76d 100644 --- a/mem_signer.go +++ b/mem_signer.go @@ -6,9 +6,11 @@ import ( "crypto/sha1" "encoding/json" "fmt" + "sync" ) type memorySigner struct { + mu sync.Mutex } func NewMemoryBasedSigner() Signer { @@ -24,6 +26,9 @@ func (m *memorySigner) CreateSignedAndZippedPersonalizedPassArchive(p *Pass, pz if err != nil { return nil, err } + + m.mu.Lock() + defer m.mu.Unlock() files := m.makeFilesCopy(originalFiles) if !p.IsValid() { diff --git a/templates.go b/templates.go index c3cf780..3022637 100644 --- a/templates.go +++ b/templates.go @@ -7,6 +7,7 @@ import ( "os" "path/filepath" "strings" + "sync" "time" ) @@ -67,6 +68,7 @@ func (f *FolderPassTemplate) GetAllFiles() (map[string][]byte, error) { type InMemoryPassTemplate struct { files map[string][]byte + mu sync.Mutex } func NewInMemoryPassTemplate() *InMemoryPassTemplate { @@ -87,7 +89,7 @@ func (m *InMemoryPassTemplate) ProvisionPassAtDirectory(tmpDirPath string) error } for file, d := range m.files { - err = os.WriteFile(filepath.Join(dst, string(file)), d, 0644) + err = os.WriteFile(filepath.Join(dst, file), d, 0644) if err != nil { _ = os.RemoveAll(dst) return err @@ -102,10 +104,14 @@ func (m *InMemoryPassTemplate) GetAllFiles() (map[string][]byte, error) { } func (m *InMemoryPassTemplate) AddFileBytes(name string, data []byte) { + m.mu.Lock() + defer m.mu.Unlock() m.files[name] = data } func (m *InMemoryPassTemplate) AddFileBytesLocalized(name, locale string, data []byte) { + m.mu.Lock() + defer m.mu.Unlock() m.files[m.pathForLocale(name, locale)] = data } @@ -137,6 +143,8 @@ func (m *InMemoryPassTemplate) AddFileFromURL(name string, u url.URL) error { return err } + m.mu.Lock() + defer m.mu.Unlock() m.files[name] = b return nil } @@ -147,6 +155,8 @@ func (m *InMemoryPassTemplate) AddFileFromURLLocalized(name, locale string, u ur return err } + m.mu.Lock() + defer m.mu.Unlock() m.files[m.pathForLocale(name, locale)] = b return nil } @@ -158,6 +168,8 @@ func (m *InMemoryPassTemplate) AddAllFiles(directoryWithFilesToAdd string) error return err } + m.mu.Lock() + defer m.mu.Unlock() for name, data := range loaded { m.files[filepath.Base(name)] = data }