File size: 3,528 Bytes
3402506
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env python3
"""
Targeted permission fix for specific directories only
This script fixes permissions ONLY for the directories you're interested in
"""

import os
import stat
from pathlib import Path

def fix_specific_permissions():
    """Fix permissions only for the target directories and their contents"""
    
    # Target directories (both actual and symlink paths)
    target_dirs = [
        ".cache/Generated",
        ".cache/static", 
        ".cache/view_session",
        "Generated",  # symlink
        "static",     # symlink
        "view_session"  # symlink
    ]
    
    print("πŸ”§ Fixing permissions for specific directories only...")
    print("=" * 50)
    
    for dir_path in target_dirs:
        path_obj = Path(dir_path)
        
        if not path_obj.exists():
            print(f"⚠️  {dir_path} - Does not exist, skipping")
            continue
            
        try:
            # Fix the directory itself
            if path_obj.is_dir() and not path_obj.is_symlink():
                current_perms = oct(path_obj.stat().st_mode)[-3:]
                path_obj.chmod(0o755)  # rwxr-xr-x
                print(f"βœ… {dir_path} - Fixed directory permissions ({current_perms} β†’ 755)")
                
                # Fix all contents recursively
                fix_contents_permissions(path_obj)
                
            elif path_obj.is_symlink():
                print(f"πŸ”— {dir_path} - Symbolic link (no permission fix needed)")
            else:
                print(f"⚠️  {dir_path} - Not a directory, skipping")
                
        except Exception as e:
            print(f"❌ {dir_path} - Error: {e}")

def fix_contents_permissions(directory_path):
    """Recursively fix permissions for directory contents"""
    try:
        for item in directory_path.rglob("*"):
            try:
                if item.is_dir():
                    item.chmod(0o755)  # Directories: rwxr-xr-x
                elif item.is_file():
                    item.chmod(0o644)  # Files: rw-r--r--
            except Exception as e:
                print(f"   ⚠️  {item} - Could not fix: {e}")
                
    except Exception as e:
        print(f"   ❌ Error scanning {directory_path}: {e}")

def check_permissions():
    """Check current permissions of target directories"""
    print("\nπŸ” Current Permissions Check:")
    print("-" * 30)
    
    target_dirs = [
        ".cache/Generated",
        ".cache/static", 
        ".cache/view_session"
    ]
    
    for dir_path in target_dirs:
        path_obj = Path(dir_path)
        if path_obj.exists():
            perms = oct(path_obj.stat().st_mode)[-3:]
            access_status = "βœ… Accessible" if perms in ["755", "775"] else "❌ Restricted"
            print(f"{dir_path:20} - {perms} ({access_status})")
        else:
            print(f"{dir_path:20} - Does not exist")

if __name__ == "__main__":
    print("🎯 Targeted Permission Fix for Specific Directories")
    print("This script ONLY affects view_session, Generated, and static folders")
    print("=" * 70)
    
    # Check current state
    check_permissions()
    
    # Ask for confirmation
    print("\n" + "=" * 50)
    response = input("Fix permissions for these directories? (y/N): ").strip().lower()
    
    if response in ['y', 'yes']:
        fix_specific_permissions()
        print("\n" + "=" * 50)
        print("βœ… Permission fix complete!")
        check_permissions()
    else:
        print("Operation cancelled.")