mirror of
https://github.com/yeongpin/cursor-free-vip.git
synced 2025-08-03 04:57:36 +08:00
feat: Add JavaScript trial reset code and update PR description
This commit is contained in:
parent
808b1ba3dc
commit
975647765d
@ -1 +1,57 @@
|
|||||||
|
# GitHub-based Trial Reset Feature
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
- Added new GitHub-based trial reset functionality
|
||||||
|
- Improved code organization by separating GitHub reset logic into its own module
|
||||||
|
- Enhanced authentication data extraction and handling
|
||||||
|
- Added secure credential storage using keyring
|
||||||
|
- Improved error handling and user feedback
|
||||||
|
- Added automatic re-login after trial reset
|
||||||
|
- Integrated JavaScript trial reset code for automatic account deletion
|
||||||
|
|
||||||
|
## New Features
|
||||||
|
- GitHub authentication integration
|
||||||
|
- Secure credential management
|
||||||
|
- Automated trial reset process
|
||||||
|
- Session persistence
|
||||||
|
- Improved user experience with clear status messages
|
||||||
|
- Automatic account deletion when usage limit is reached
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
- Uses DrissionPage for browser automation
|
||||||
|
- Implements secure credential storage with keyring
|
||||||
|
- Handles both cookie and localStorage token formats
|
||||||
|
- Supports automatic re-login after reset
|
||||||
|
- Maintains session persistence across resets
|
||||||
|
- JavaScript trial reset code:
|
||||||
|
```javascript
|
||||||
|
function deleteAccount() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
fetch('https://www.cursor.com/api/dashboard/delete-account', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
credentials: 'include'
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (response.status === 200) {
|
||||||
|
resolve('Account deleted successfully');
|
||||||
|
} else {
|
||||||
|
reject('Failed to delete account: ' + response.status);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
reject('Error: ' + error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
- Tested on Windows 10, macOS, and Linux
|
||||||
|
- Verified with multiple GitHub accounts
|
||||||
|
- Confirmed successful trial reset and re-login
|
||||||
|
- Validated credential storage and retrieval
|
||||||
|
- Tested automatic account deletion when usage limit is reached
|
||||||
|
- Verified successful re-authentication after account deletion
|
@ -14,6 +14,7 @@ import configparser
|
|||||||
from new_signup import get_user_documents_path
|
from new_signup import get_user_documents_path
|
||||||
import traceback
|
import traceback
|
||||||
from config import get_config
|
from config import get_config
|
||||||
|
from github_trial_reset import reset_trial as github_reset_trial
|
||||||
|
|
||||||
# Initialize colorama
|
# Initialize colorama
|
||||||
init()
|
init()
|
||||||
@ -691,19 +692,30 @@ class MachineIDResetter:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def run(translator=None):
|
def run(translator=None):
|
||||||
config = get_config(translator)
|
"""Main function to run the reset process"""
|
||||||
if not config:
|
try:
|
||||||
|
print(f"\n{Fore.CYAN}{EMOJI['RESET']} {translator.get('reset.starting_reset') if translator else 'Starting reset process...'}{Style.RESET_ALL}")
|
||||||
|
|
||||||
|
# First, try GitHub trial reset
|
||||||
|
print(f"\n{Fore.CYAN}{EMOJI['INFO']} Attempting GitHub trial reset...{Style.RESET_ALL}")
|
||||||
|
if github_reset_trial(translator):
|
||||||
|
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} GitHub trial reset completed successfully!{Style.RESET_ALL}")
|
||||||
|
else:
|
||||||
|
print(f"{Fore.YELLOW}{EMOJI['INFO']} GitHub trial reset failed, falling back to manual reset...{Style.RESET_ALL}")
|
||||||
|
|
||||||
|
# Then proceed with manual reset
|
||||||
|
resetter = MachineIDResetter(translator)
|
||||||
|
if resetter.reset():
|
||||||
|
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('reset.completed_successfully') if translator else 'Reset completed successfully!'}{Style.RESET_ALL}")
|
||||||
|
else:
|
||||||
|
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('reset.failed') if translator else 'Reset failed!'}{Style.RESET_ALL}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('reset.error_occurred', error=str(e)) if translator else f'An error occurred: {str(e)}'}{Style.RESET_ALL}")
|
||||||
|
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('reset.stack_trace')}: {traceback.format_exc()}{Style.RESET_ALL}")
|
||||||
return False
|
return False
|
||||||
print(f"\n{Fore.CYAN}{'='*50}{Style.RESET_ALL}")
|
|
||||||
print(f"{Fore.CYAN}{EMOJI['RESET']} {translator.get('reset.title')}{Style.RESET_ALL}")
|
|
||||||
print(f"{Fore.CYAN}{'='*50}{Style.RESET_ALL}")
|
|
||||||
|
|
||||||
resetter = MachineIDResetter(translator) # Correctly pass translator
|
return True
|
||||||
resetter.reset_machine_ids()
|
|
||||||
|
|
||||||
print(f"\n{Fore.CYAN}{'='*50}{Style.RESET_ALL}")
|
|
||||||
input(f"{EMOJI['INFO']} {translator.get('reset.press_enter')}...")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from main import translator as main_translator
|
run()
|
||||||
run(main_translator)
|
|
Loading…
x
Reference in New Issue
Block a user