Skip to content

Commit efdab6a

Browse files
committed
feat(permissions): add proper permission to handle metadata file
1 parent da17d3d commit efdab6a

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

internal/app/metadata.go

+28-7
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,30 @@ func (i *Installer) GetLatestVersion() (string, error) {
3535
}
3636

3737
func (i *Installer) readMetadata() (*CursorMetadata, error) {
38-
data, err := os.ReadFile(metadataPath)
38+
if _, err := os.Stat(metadataPath); os.IsNotExist(err) {
39+
return nil, nil
40+
}
41+
42+
tmpFile, err := os.CreateTemp("", "cursor-metadata-read-*.json")
43+
if err != nil {
44+
return nil, fmt.Errorf("failed to create temporary file: %v", err)
45+
}
46+
tmpPath := tmpFile.Name()
47+
tmpFile.Close()
48+
defer os.Remove(tmpPath)
49+
50+
cmd := exec.Command("sudo", "cp", metadataPath, tmpPath)
51+
if err := cmd.Run(); err != nil {
52+
return nil, fmt.Errorf("failed to copy metadata file: %v", err)
53+
}
54+
55+
cmd = exec.Command("sudo", "chmod", "644", tmpPath)
56+
if err := cmd.Run(); err != nil {
57+
return nil, fmt.Errorf("failed to set permissions on temporary file: %v", err)
58+
}
59+
60+
data, err := os.ReadFile(tmpPath)
3961
if err != nil {
40-
if os.IsNotExist(err) {
41-
return nil, nil
42-
}
4362
return nil, fmt.Errorf("failed to read metadata: %v", err)
4463
}
4564

@@ -56,18 +75,20 @@ func (i *Installer) writeMetadata(metadata *CursorMetadata) error {
5675
if err != nil {
5776
return fmt.Errorf("failed to create temporary metadata file: %v", err)
5877
}
59-
defer os.Remove(tmpFile.Name())
78+
tmpPath := tmpFile.Name()
79+
defer os.Remove(tmpPath)
6080

6181
data, err := json.MarshalIndent(metadata, "", " ")
6282
if err != nil {
6383
return fmt.Errorf("failed to marshal metadata: %v", err)
6484
}
6585

66-
if err := os.WriteFile(tmpFile.Name(), data, 0644); err != nil {
86+
if err := os.WriteFile(tmpPath, data, 0644); err != nil {
6787
return fmt.Errorf("failed to write metadata: %v", err)
6888
}
89+
tmpFile.Close()
6990

70-
cmd := exec.Command("sudo", "mv", tmpFile.Name(), metadataPath)
91+
cmd := exec.Command("sudo", "mv", tmpPath, metadataPath)
7192
if err := cmd.Run(); err != nil {
7293
return fmt.Errorf("failed to install metadata file: %v", err)
7394
}

0 commit comments

Comments
 (0)