1 Commits

Author SHA1 Message Date
PrincessPi 08dee660f5 idk fam i just got here what are u a cop 2026-07-31 15:04:59 -06:00
11 changed files with 348 additions and 1456 deletions
-1
View File
@@ -39,7 +39,6 @@ script=/tmp/install_script.sh && curl -s https://git.thecoven.info/PrincessPi/ge
* `large_file_search_for_hash` * `large_file_search_for_hash`
* `randomtoken` * `randomtoken`
* `alfa_install_kali.sh` * `alfa_install_kali.sh`
* `torsilly.sh`
#### monitoring #### monitoring
* `mon-watch` * `mon-watch`
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-9
View File
@@ -1,9 +0,0 @@
1. recursive verify error: `FAILED open or read` RIGHT NOW GENERATES RELATIVE PATH/FILENAME IN CHECKSUMS FILES IN SUBDIRS, SHOULD JUST BE FOR THE FILES IN DAT DIR (for linux compatability)
2. recursive progress set to count total number of files recursively first for progress bar.
3. paralell processing
4. Princess Pi ascii art magenta
5. princess pi bubble text ascii art blue
6. script for full top-to-bottom testing
7. BASH linux version
8. more hashing algos?
9. multi-algo paralell workin? like multiple -a params?
+193 -572
View File
@@ -1,656 +1,277 @@
<#
.SYNOPSIS
Princess Pi's Magical CHECKSUM! - Computes and verifies message digests / file checksums.
.DESCRIPTION
Computes or verifies checksums using cryptographic hash algorithms (SHA256, SHA512, SHA1, MD5, SHA384).
Supports parallel processing, recursive scanning, direct hash matching, and verification file parsing.
.NOTES
Requires PowerShell 7.0 or higher.
#>
[CmdletBinding(DefaultParameterSetName='Generate')] [CmdletBinding(DefaultParameterSetName='Generate')]
param( param(
# File(s) or wildcard pattern to compute checksum for # File(s) or wildcard pattern to compute checksum for
[Parameter(Position = 0, ParameterSetName = 'Generate', ValueFromPipeline = $true)] [Parameter(Position = 0, ParameterSetName = 'Generate', ValueFromPipeline = $true)]
[Parameter(Position = 0, ParameterSetName = 'Match', ValueFromPipeline = $true)] [Parameter(Position = 0, ParameterSetName = 'Match', ValueFromPipeline = $true)]
[Parameter(Position = 0, ParameterSetName = 'PrincessPi', ValueFromPipeline = $false)]
[Alias('i', 'input', 'if', 'InputFile')]
[string[]]$FilePath, [string[]]$FilePath,
# Custom output file (-f / -OutFile / -of) # Output file to save generated checksums (-o mode)
[Parameter(Mandatory = $false, ParameterSetName = 'Generate')] [Parameter(Mandatory = $false, ParameterSetName = 'Generate')]
[Alias('f', 'of')] [Alias('o')]
[string]$OutFile, [string]$OutFile,
# Auto output file switch (-s / -Save / -o) # File containing checksums to verify (-c mode)
[Parameter(Mandatory = $false, ParameterSetName = 'Generate')]
[Alias('s', 'o')]
[switch]$Save,
# File containing checksums to verify (-c / -Check)
[Parameter(Mandatory = $false, ParameterSetName = 'Verify')] [Parameter(Mandatory = $false, ParameterSetName = 'Verify')]
[Alias('c')] [Alias('c')]
[string]$Check, [string]$Check,
# Direct checksum hash string to match against (-m / -Match) # Direct checksum hash string to match against (-m mode)
[Parameter(Mandatory = $true, ParameterSetName = 'Match')] [Parameter(Mandatory = $true, ParameterSetName = 'Match')]
[Alias('m')] [Alias('m')]
[string]$Match, [string]$Match,
# Hashing algorithm to use (Defaults to SHA256) # Hashing algorithm to use (Defaults to SHA256)
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[Alias('a', 'algo')] [Alias('a')]
[ValidateSet('SHA1', 'SHA256', 'SHA384', 'SHA512', 'MD5')] [ValidateSet('SHA1', 'SHA256', 'SHA384', 'SHA512', 'MD5')]
[string]$Algorithm, [string]$Algorithm,
# Recursive flag (-r / -Recursive) # Help flag (-h, -Help)
[Parameter(Mandatory = $false)]
[Alias('r')]
[switch]$Recursive,
# Princess Pi art flag (-pp / -PrincessPi)
[Parameter(Mandatory = $true, ParameterSetName = 'PrincessPi')]
[Alias('pp')]
[switch]$PrincessPi,
# Help flag (-h / -Help)
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[Alias('h')] [Alias('h')]
[switch]$Help [switch]$Help
) )
# --- ENVIRONMENT SANITY CHECK --- begin {
if ($PSVersionTable.PSVersion.Major -lt 7) { function Show-Help {
Write-Error "checksum: This script requires PowerShell 7 or higher for parallel execution (-Parallel support). Current version is $($PSVersionTable.PSVersion)." @'
exit 1
}
# --- HELPER FUNCTIONS ---
function Show-Help {
@'
Princess Pi's Magical CHECKSUM!
NAME NAME
checksum - Compute and verify message digests / file checksums checksum - Compute and verify message digests / file checksums
SYNOPSIS SYNOPSIS
.\checksum.ps1 [-FilePath] <string[]> [-s] [-f <string>] [-Algorithm <string>] [-r] .\checksum.ps1 [-FilePath] <string[]> [-OutFile <string>] [-Algorithm <string>]
.\checksum.ps1 [-FilePath] <string[]> -Match <string> [-Algorithm <string>] [-r] .\checksum.ps1 [-FilePath] <string[]> -Match <string> [-Algorithm <string>]
.\checksum.ps1 -Check <string> [-Algorithm <string>] [-r] .\checksum.ps1 -Check <string> [-Algorithm <string>]
.\checksum.ps1 -PrincessPi
.\checksum.ps1 -Help .\checksum.ps1 -Help
DESCRIPTION DESCRIPTION
Computes or verifies checksums using cryptographic hash algorithms (SHA256, SHA512, SHA1, MD5, SHA384). Computes or verifies checksums using various cryptographic algorithms.
Outputs hash values in standard GNU coreutils format (<hash> <filename>). Outputs hash values in standard Linux utility format (<hash> <filename>).
Ignores checksum metadata files (.md5, .sha1, .sha256, .sha384, .sha512) during wildcards unless passed explicitly.
PARAMETERS PARAMETERS
-FilePath, -i, -input, -if, -InputFile <string[]> -FilePath <string[]>
Specifies the target file(s) or wildcard pattern (*). Specifies the path to one or more files to hash. Accepts wildcards (*).
-s, -S, -Save, -o, -O <switch> -o, -OutFile <string>
Auto-saves checksum results. (Takes no arguments). Specifies an output file to save the checksum results to, while still
- If input filename contains a wildcard (*), saves to 'checksums.<algo>'. displaying the output on screen.
- If input filename does NOT contain a wildcard, saves to '<filename>.<algo>'.
When combined with -r and *, recursively auto-generates checksums per directory.
-f, -F, -of, -OF, -OutFile <string> -c, -Check <string>
Saves checksum results to a specific custom filename. Read checksums from the specified file and verify them against files on disk.
Overrides the auto-naming behavior of -s if both are passed.
-c, -C, -Check <string> -m, -Match <string>
Reads hashes from a specified checksum file and verifies target files on disk. Compare the computed hash of the target file(s) against a specific hash string.
If -r is specified, recursively looks for and validates checksum files by name across subdirectories.
-m, -M, -Match <string> -a, -Algorithm <string>
Compares the computed hash of target file(s) directly against a given hash string. Specifies the cryptographic hash algorithm to use.
Supported values: SHA1, SHA256 (default), SHA384, SHA512, MD5.
If omitted in -c or -m mode, the algorithm is auto-detected by hash length.
-a, -A, -Algo, -Algorithm <string> -h, -Help
Specifies the hash algorithm to use. Display this help message.
Supported options: MD5, SHA1, SHA256 (default), SHA384, SHA512.
In -c or -m mode, auto-detects algorithm from hash length if omitted.
-r, -R, -Recursive <switch>
Processes target files or verification files recursively across directory structures.
-pp, -PP, -PrincessPi <switch>
Displays Princess Pi!
-h, -H, -Help <switch>
Displays this help documentation.
Also displays on any error.
EXAMPLES EXAMPLES
1. Compute SHA256 for a single file and auto-save as 'myfile.iso.sha256': 1. Compute SHA256 checksum for a single file:
.\checksum.ps1 myfile.iso -s .\checksum.ps1 myfile.iso
2. Compute SHA512 recursively and auto-save as 'checksums.sha512' in each folder: 2. Compute checksums for all files and write to a file while showing output:
.\checksum.ps1 * -r -s -a SHA512 .\checksum.ps1 * -o checksums.sha256
3. Compute SHA256 checksums and save to a specific custom file: 3. Verify a file against a explicit hash string:
.\checksum.ps1 * -f my_hashes.txt .\checksum.ps1 myfile.iso -m "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
4. Verify checksums against a verification file:
.\checksum.ps1 -c checksums.sha256
5. Compare file directly against an expected hash string:
.\checksum.ps1 myfile.bin -m 406653a68bd3538975656831f33f031b
Princess Pi LOVES YOU!~
https://linktr.ee/princesspi3
4. Verify checksums from a verification file (auto-detects algorithm):
.\checksum.ps1 -c checksums.sha256
'@ '@
}
function Write-ErrorWithHelp {
param([string]$ErrorMessage);
Show-Help;
Write-Host "";
Write-Error $ErrorMessage;
}
function Show-PrincessPiArt {
$art = @'
=#= -- ##*+++++ *+
-#=#- +# -*%%= ##++++++++++# ##*********#
#==#= *** %%++%% -++# #++++++++++++*+ *#***************#
#===#= %***+%++#*%%@+++++% #++++++++++++**+++#******++********#
====+#%@*******###%=%++##++% #+++++++++++*++++++++#***====+****++#
=#=*==**#*#########%++#*+++@ *++++++++#+++++++++++#****==+******#
*#=====%####***%%++++#*+++**% ++++++++*+++++++++++++#************#*******
@****#==%####**#*+++++++#+++#**# #+++++++++++++++++++#####+*****************#
@****#######%**@+*%**#%+++++%##*** #+++++++++++++++++#+++++#****+======*****+
#****##%####@**%+*******@@+++@###**% #+++++++++++++*++++++++++****========****#
****#####%%*%*%+***@@@%%@*+++@####** *+++++++++++++++++++++#****=======****#
%***####%%**+%%*++*@=##@@%@++++%###*** ++++*+++++++++++#+**************#
@%%%@@##%%#++++++++==**@@**+++%*###**% +++++++++++#*+++++#*********####
%###%++++++++====**#++++%**##**% @% ++++#+++++++++++++**************#
%###%++++++++++++++++++%**%##**%@###@ %++++++++++++++++***=====********
###%%++++++++%++++++*%%%%###***##%##@ +++++++++++++##**************#
###%%%%+++++##+++++++#*+%###***%%%##@ ++++++++++++++%********+############%@
@%%*@*%%%%###****+*%%****++%##***%##@@@ #+++++++++++++++*********###*****#########*
#%%###***#####%**++++##**%#@@#@ ##+++++++++*###%#+***+***##*************#######
@#%%####%%####%+++++++##*######%++++++++++++++#*+++++#%###%#######*********######%
##%########@%@+++@###%*%#####@+++++++++++%**++++++++++%%%%%%########***==**###%##%
%#%###%###########@@%#%#@@##++++++++****++++********+++ %########**===*###%*#
#**##%####@@####%@######%*++++++++++++++++#++**+*#++++# ########******###% %
@#***# ###%@@##%#######@+++++++++++++++++++++%*++**++++# *########******##% @
*******% %##% =@#########++++++++++++++++++#++++*%++*#%#++# ########******##%
#@%@# %% *@#@@###*+++++++++++++++++++%+++##+++###++* ##*#####******##@
**##%*++%++++++++++++++++++++++++++++++++% +#**#####******###
##%#######*@***+#+++++++++++++++#***#++++++++++++ %**#####*******#%
*+++++$****##****++++++++##% #******#+++++++++++ %**#####*******#@
#++++++++*******- ++++++++# *******#++++++++++# @**#####*******#
#@@+++++++******- *+++++++# #******#+++++++++* **####%**==+**@
@@@@@+++ %+++++++# ******# %+++++++ %*###%***===**@ %=
@@@@@@@@@ #+++++++# =****** #++++++% *###%#***=+**% %**
@@@@@@@@@@ ++++++++# ******# #++++++# *##@%********% @*@
@@+@@@++@@+ ++++++++# ******# #++++++# @## #*********@ #***#
@@+@@++@@@++ @@@++++++* @@@%**** #@@++++% +## %#****************%
@*@**@+++# @@@@+++++ @@@@@@**# @@@@@++++# @# %#****************
+#+++++# @@@@@@+++% @@@@@@@@# @@@@@@@++ @ %##************%
#+++** @@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ %###********%*
@@@@@@@@@@+ @@@@@@@@@@ =@@@@@@@@@ %%#####%%
*@@@@@@@@@@ @+*@@@@@@@= @@++@@@@@@
@++@@@@@@@@ #**@**@@@@@ *@@*#@@@@@@ -=
@%#@@@@@@@@ *#***@@@@@@ @+#+@++#@@@
#+++@++@@@@@ **********# #+++++@+@@@@
##+#+++@@@@@@ ##****#### *+#+##+++@@%%
#+++++++++++# #++++++++++#
#########*
____ ____ ____ _ _ ___ ____ ___ ___ ____ ____
( _ \( _ \(_ _)( \( )/ __)( ___)/ __)/ __) ( _ \(_ _)/\/
)___/ ) / _)(_ ) (( (__ )__) \__ \\__ \ )___/ _)(_
(__) (_)\_)(____)(_)\_)\___)(____)(___/(___/ (__) (____)
Princess Pi
https://linktr.ee/princesspi3
'@
Write-Host $art -ForegroundColor Blue;
}
function Get-AlgorithmFromHashLength {
param([string]$HashString);
switch ($HashString.Trim().Length) {
32 { return 'MD5'; }
40 { return 'SHA1'; }
64 { return 'SHA256'; }
96 { return 'SHA384'; }
128 { return 'SHA512'; }
default {
Write-ErrorWithHelp "checksum: Could not auto-detect algorithm for hash length $($HashString.Length). Please specify -Algorithm.";
return $null;
}
}
}
# --- MAIN EXECUTION FLOW ---
$helpInPath = $false;
if ($FilePath) {
foreach ($p in ($FilePath)) {
if ($p -match '^(?i)[-/]{1,2}(h|help|\?)$') {
$helpInPath = $true;
break;
}
}
}
if ($Help.IsPresent -or $helpInPath) {
Show-Help;
return;
}
if ($PrincessPi.IsPresent) {
Show-PrincessPiArt;
return;
}
if (-not [string]::IsNullOrWhiteSpace($Algorithm)) {
$Algorithm = $Algorithm.ToUpper();
}
$isWildcardGlobal = $false;
if ($FilePath) {
foreach ($p in $FilePath) {
if ($p -match '\*') { $isWildcardGlobal = $true; }
}
}
$showProgress = $Recursive.IsPresent -or $isWildcardGlobal -or ($PSCmdlet.ParameterSetName -eq 'Verify');
# --- ITEM GATHERING (Generate & Match Modes) ---
if ($PSCmdlet.ParameterSetName -in @('Generate', 'Match')) {
if (-not $FilePath -or $FilePath.Count -eq 0) {
Write-ErrorWithHelp "checksum: Missing file path parameter. Use -Help for usage.";
return;
} }
$allItems = @(); # Helper function to auto-detect hash algorithm based on string character length
$skipExtensions = @('.md5', '.sha1', '.sha256', '.sha384', '.sha512'); function Get-AlgorithmFromHashLength {
param([string]$HashString)
foreach ($pathEntry in ($FilePath)) { switch ($HashString.Trim().Length) {
$isWildcard = ($pathEntry -match '\*'); 32 { return 'MD5' }
$resolvedItems = @(); 40 { return 'SHA1' }
64 { return 'SHA256' }
if ($Recursive) { 96 { return 'SHA384' }
$resolvedItems = Get-ChildItem -Path ($pathEntry) -Recurse -File -ErrorAction 'SilentlyContinue'; 128 { return 'SHA512' }
} else { default {
if ($isWildcard -or ($pathEntry -match '\?')) { Write-Error "checksum: Could not auto-detect algorithm for hash length $($HashString.Length). Please specify -Algorithm."
$resolvedItems = Get-ChildItem -Path ($pathEntry) -File -ErrorAction 'SilentlyContinue'; return $null
} else {
$resolvedItems = Get-Item -Path ($pathEntry) -ErrorAction 'SilentlyContinue';
} }
} }
}
}
if (-not $resolvedItems) { process {
Write-ErrorWithHelp "checksum: $($pathEntry): No such file or directory"; # Match help arguments passed either as switch (-h, -Help) or positional string ('help', 'h', '--help', etc.)
continue; $isHelpRequested = $Help.IsPresent -or (
$FilePath -and $FilePath.Count -eq 1 -and (
$FilePath[0] -match '^(?i)[-/]{0,2}(h|help)$'
)
)
if ($isHelpRequested) {
Show-Help
return
}
# Normalize explicit algorithm input if provided
if (-not [string]::IsNullOrWhiteSpace($Algorithm)) {
$Algorithm = $Algorithm.ToUpper()
}
# --- DIRECT MATCH MODE (-m / -Match) ---
if ($PSCmdlet.ParameterSetName -eq 'Match') {
if (-not $FilePath -or $FilePath.Count -eq 0) {
Write-Error "checksum: Missing file path parameter for matching. Use -Help for usage."
return
} }
$explicitFileFound = $false; # Auto-detect algorithm from provided -Match hash string if not explicitly given
if ((-not $isWildcard) -and (Test-Path -Path ($pathEntry) -PathType 'Leaf')) { if ([string]::IsNullOrWhiteSpace($Algorithm)) {
$explicitFileFound = $true; $Algorithm = Get-AlgorithmFromHashLength -HashString $Match
if (-not $Algorithm) { return }
Write-Verbose "Auto-detected algorithm: $Algorithm"
} }
foreach ($item in ($resolvedItems)) { $expectedHash = $Match.Trim().ToLower()
if ($item.PSIsContainer) { continue; }
foreach ($pathEntry in $FilePath) {
if (-not $explicitFileFound) { $resolvedItems = Get-Item -Path $pathEntry -ErrorAction SilentlyContinue
if ($skipExtensions -contains $item.Extension.ToLower()) {
continue; if (-not $resolvedItems) {
Write-Error "checksum: $pathEntry`: No such file or directory"
continue
}
foreach ($item in $resolvedItems) {
if ($item.PSIsContainer) {
Write-Error "checksum: $($item.Name)`: Is a directory"
} else {
$actualHash = (Get-FileHash -Path $item.FullName -Algorithm $Algorithm).Hash.ToLower()
$targetFile = Resolve-Path -Path $item.FullName -Relative
if ($targetFile.StartsWith(".\")) { $targetFile = $targetFile.Substring(2) }
if ($actualHash -eq $expectedHash) {
Write-Host "${targetFile}: " -NoNewline
Write-Host "OK" -ForegroundColor Green
} else {
Write-Host "${targetFile}: " -NoNewline
Write-Host "FAILED" -ForegroundColor Red
}
} }
} }
$allItems += $item;
} }
} }
} # --- VERIFICATION MODE (-c / -Check) ---
elseif ($PSCmdlet.ParameterSetName -eq 'Verify') {
# --- DIRECT MATCH MODE (-m / -Match) --- if (-not (Test-Path -Path $Check -PathType Leaf)) {
if ($PSCmdlet.ParameterSetName -eq 'Match') { Write-Error "checksum: $Check`: No such file or directory"
if ([string]::IsNullOrWhiteSpace($Algorithm)) { return
$Algorithm = Get-AlgorithmFromHashLength -HashString ($Match);
if (-not $Algorithm) { return; }
}
$expectedHash = $Match.Trim().ToLower();
$totalFiles = $allItems.Count;
$currentIndex = 0;
$allItems | ForEach-Object -Parallel {
$item = $_
$algo = $using:Algorithm
$exp = $using:expectedHash
$actualHash = (Get-FileHash -Path ($item.FullName) -Algorithm ($algo)).Hash.ToLower();
$targetFile = Resolve-Path -Path ($item.FullName) -Relative -ErrorAction 'SilentlyContinue';
if (-not $targetFile) { $targetFile = $item.Name; }
if ($targetFile.StartsWith(".\") -or $targetFile.StartsWith("./")) { $targetFile = $targetFile.Substring(2); }
[PSCustomObject]@{
TargetFile = $targetFile
IsMatch = ($actualHash -eq $exp)
}
} -ThrottleLimit 16 | ForEach-Object {
$currentIndex++
if ($showProgress -and $totalFiles -gt 0) {
Write-Progress -Activity "Matching Checksums ($Algorithm)" -Status "Processing file $currentIndex of $totalFiles" -PercentComplete (($currentIndex / $totalFiles) * 100);
} }
if ($_.IsMatch) { $lines = Get-Content -Path $Check
Write-Host "$($_.TargetFile): " -NoNewline;
Write-Host "OK" -ForegroundColor Green;
} else {
Write-Host "$($_.TargetFile): " -NoNewline;
Write-Host "FAILED" -ForegroundColor Red;
}
}
if ($showProgress) { # Auto-detect algorithm based on hash length if not explicitly provided
Write-Progress -Activity "Matching Checksums ($Algorithm)" -Completed; if ([string]::IsNullOrWhiteSpace($Algorithm)) {
} foreach ($line in $lines) {
} if ([string]::IsNullOrWhiteSpace($line) -or $line.StartsWith("#")) { continue }
# --- VERIFICATION MODE (-c / -Check) ---
elseif ($PSCmdlet.ParameterSetName -eq 'Verify') {
$checkFiles = @();
if ($Recursive) {
$checkFileName = Split-Path -Path ($Check) -Leaf;
$checkFiles = Get-ChildItem -Path '.\' -Filter ($checkFileName) -Recurse -File -ErrorAction 'SilentlyContinue';
} else {
if (Test-Path -Path ($Check) -PathType 'Leaf') {
$checkFiles = @(Get-Item -Path ($Check));
}
}
if (-not $checkFiles -or $checkFiles.Count -eq 0) {
Write-ErrorWithHelp "checksum: $($Check): No such file or directory";
return;
}
foreach ($cf in ($checkFiles)) {
$lines = Get-Content -Path ($cf.FullName);
$baseDir = $cf.DirectoryName;
$fileAlgo = $Algorithm;
if ([string]::IsNullOrWhiteSpace($fileAlgo)) {
foreach ($line in ($lines)) {
if ([string]::IsNullOrWhiteSpace($line) -or $line.StartsWith("#")) { continue; }
if ($line -match '^([a-fA-F0-9]+)\s+') { if ($line -match '^([a-fA-F0-9]+)\s+') {
$fileAlgo = Get-AlgorithmFromHashLength -HashString ($Matches[1]); $Algorithm = Get-AlgorithmFromHashLength -HashString $Matches[1]
break; if (-not $Algorithm) { return }
} Write-Verbose "Auto-detected algorithm: $Algorithm"
elseif ($line -match '^([a-fA-F0-9]{128}|[a-fA-F0-9]{96}|[a-fA-F0-9]{64}|[a-fA-F0-9]{40}|[a-fA-F0-9]{32})') { break
$fileAlgo = Get-AlgorithmFromHashLength -HashString ($Matches[1]);
break;
} }
} }
if ([string]::IsNullOrWhiteSpace($fileAlgo)) { $fileAlgo = 'SHA256'; }
# Fallback if file contained no parsable hashes
if ([string]::IsNullOrWhiteSpace($Algorithm)) {
$Algorithm = 'SHA256'
}
} }
$verifyItems = @(); foreach ($line in $lines) {
foreach ($line in ($lines)) { # Skip empty lines or comments
if ([string]::IsNullOrWhiteSpace($line) -or $line.StartsWith("#")) { continue; } if ([string]::IsNullOrWhiteSpace($line) -or $line.StartsWith("#")) { continue }
$expectedHash = $null;
$targetFile = $null;
# Match standard checksum output format: "<hash> [* ]<filename>"
if ($line -match '^([a-fA-F0-9]+)\s+[* ]?(.*)$') { if ($line -match '^([a-fA-F0-9]+)\s+[* ]?(.*)$') {
$expectedHash = $Matches[1].ToLower(); $expectedHash = $Matches[1].ToLower()
$targetFile = $Matches[2].Trim().TrimStart('*'); # Strip leading whitespace and any leftover leading asterisk
} $targetFile = $Matches[2].Trim().TrimStart('*')
elseif ($line -match '^([a-fA-F0-9]{128}|[a-fA-F0-9]{96}|[a-fA-F0-9]{64}|[a-fA-F0-9]{40}|[a-fA-F0-9]{32})[* ]?(.*)$') {
$expectedHash = $Matches[1].ToLower();
$targetFile = $Matches[2].Trim().TrimStart('*');
}
if ($expectedHash -and $targetFile) { if (Test-Path -Path $targetFile -PathType Leaf) {
$targetFullPath = Join-Path -Path ($baseDir) -ChildPath ($targetFile); $actualHash = (Get-FileHash -Path $targetFile -Algorithm $Algorithm).Hash.ToLower()
$verifyItems += [PSCustomObject]@{
ExpectedHash = $expectedHash
TargetFile = $targetFile
TargetFullPath = $targetFullPath
BaseDir = $baseDir
};
}
}
$totalFiles = $verifyItems.Count; if ($actualHash -eq $expectedHash) {
$currentIndex = 0; Write-Host "${targetFile}: " -NoNewline
Write-Host "OK" -ForegroundColor Green
$verifyItems | ForEach-Object -Parallel { } else {
$item = $_ Write-Host "${targetFile}: " -NoNewline
$algo = $using:fileAlgo Write-Host "FAILED" -ForegroundColor Red
}
if (Test-Path -Path ($item.TargetFullPath) -PathType 'Leaf') { } else {
$actualHash = (Get-FileHash -Path ($item.TargetFullPath) -Algorithm ($algo)).Hash.ToLower(); Write-Host "${targetFile}: " -NoNewline
Write-Host "FAILED open or read" -ForegroundColor Red
$displayPath = Resolve-Path -Path ($item.TargetFullPath) -Relative -ErrorAction 'SilentlyContinue';
if (-not $displayPath) { $displayPath = $item.TargetFile; }
if ($displayPath.StartsWith(".\") -or $displayPath.StartsWith("./")) { $displayPath = $displayPath.Substring(2); }
[PSCustomObject]@{
DisplayPath = $displayPath
Status = if ($actualHash -eq $item.ExpectedHash) { "OK" } else { "FAILED" }
IsError = $false
} }
} else { } else {
$displayPath = $item.TargetFile; Write-Warning "checksum: improperly formatted line: $line"
if ($item.BaseDir -ne (Get-Location).Path) {
$displayPath = Join-Path -Path (Resolve-Path -Path ($item.BaseDir) -Relative -ErrorAction 'SilentlyContinue') -ChildPath ($item.TargetFile);
if ($displayPath.StartsWith(".\") -or $displayPath.StartsWith("./")) { $displayPath = $displayPath.Substring(2); }
}
[PSCustomObject]@{
DisplayPath = $displayPath
Status = "FAILED open or read"
IsError = $true
}
} }
} -ThrottleLimit 16 | ForEach-Object { }
$currentIndex++ }
if ($totalFiles -gt 0) { # --- GENERATION MODE ---
Write-Progress -Activity "Verifying Checksums ($fileAlgo)" -Status "Processing file $currentIndex of $totalFiles" -PercentComplete (($currentIndex / $totalFiles) * 100); else {
# Default to SHA256 if no algorithm was specified in generation mode
if ([string]::IsNullOrWhiteSpace($Algorithm)) {
$Algorithm = 'SHA256'
}
if (-not $FilePath -or $FilePath.Count -eq 0) {
Write-Error "checksum: Missing file path parameter. Use -Help for usage."
return
}
# Clear/initialize output file if specified before writing hashes
if (-not [string]::IsNullOrWhiteSpace($OutFile)) {
$null = New-Item -Path $OutFile -ItemType File -Force
}
foreach ($pathEntry in $FilePath) {
# Resolve wildcards and single file inputs
$resolvedItems = Get-Item -Path $pathEntry -ErrorAction SilentlyContinue
if (-not $resolvedItems) {
Write-Error "checksum: $pathEntry`: No such file or directory"
continue
} }
foreach ($item in $resolvedItems) {
# Handle directories like Linux sha256sum does
if ($item.PSIsContainer) {
Write-Error "checksum: $($item.Name)`: Is a directory"
} else {
$hash = (Get-FileHash -Path $item.FullName -Algorithm $Algorithm).Hash.ToLower()
# Format standard relative path (stripping leading '.\')
$relativePath = Resolve-Path -Path $item.FullName -Relative
if ($relativePath.StartsWith(".\")) {
$relativePath = $relativePath.Substring(2)
}
$outputLine = "$hash $relativePath"
Write-Host "$($_.DisplayPath): " -NoNewline; # If -OutFile is provided, write line to file
if ($_.IsError) { if (-not [string]::IsNullOrWhiteSpace($OutFile)) {
Write-Host "$($_.Status)" -ForegroundColor Red; Add-Content -Path $OutFile -Value $outputLine
} elseif ($_.Status -eq "OK") { }
Write-Host "OK" -ForegroundColor Green;
} else { # Output to stdout
Write-Host "FAILED" -ForegroundColor Red; Write-Output $outputLine
}
} }
} }
Write-Progress -Activity "Verifying Checksums ($fileAlgo)" -Completed;
} }
} }
# --- GENERATION MODE ---
else {
if ([string]::IsNullOrWhiteSpace($Algorithm)) {
$Algorithm = 'SHA256';
}
$wantCustomOut = $PSBoundParameters.ContainsKey('OutFile'); end {}
$wantAutoOut = $Save.IsPresent;
if ($wantCustomOut -or $wantAutoOut) {
if ($Recursive -and $isWildcardGlobal) {
$groupedItems = $allItems | Group-Object DirectoryName;
foreach ($group in ($groupedItems)) {
$dirPath = $group.Name;
$filesInDir = $group.Group;
if ($wantCustomOut) {
$currentOutFile = Join-Path -Path ($dirPath) -ChildPath ($OutFile);
} else {
$currentOutFile = Join-Path -Path ($dirPath) -ChildPath "checksums.$($Algorithm.ToLower())";
}
$totalFiles = $filesInDir.Count;
$currentIndex = 0;
$linesToWrite = @();
$filesInDir | ForEach-Object -Parallel {
$item = $_
$algo = $using:Algorithm
$hash = (Get-FileHash -Path ($item.FullName) -Algorithm ($algo)).Hash.ToLower();
$relativePath = Resolve-Path -Path ($item.FullName) -Relative -ErrorAction 'SilentlyContinue';
if (-not $relativePath) { $relativePath = $item.Name; }
if ($relativePath.StartsWith(".\") -or $relativePath.StartsWith("./")) {
$relativePath = $relativePath.Substring(2);
}
[PSCustomObject]@{
Item = $item
Hash = $hash
RelativePath = $relativePath
OutputLine = "${hash} ${relativePath}"
ItemOutFile = "$($item.FullName).$($algo.ToLower())"
}
} -ThrottleLimit 16 | ForEach-Object {
$currentIndex++;
if ($showProgress -and $totalFiles -gt 0) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Status "Directory: $(Split-Path $dirPath -Leaf) [$currentIndex/$totalFiles]" -PercentComplete (($currentIndex / $totalFiles) * 100);
}
$linesToWrite += $_.OutputLine;
Write-Output $_.OutputLine;
}
if ($showProgress) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Completed;
}
Set-Content -Path ($currentOutFile) -Value $linesToWrite -Encoding utf8;
}
}
else {
if ($wantCustomOut -or ($wantAutoOut -and $isWildcardGlobal)) {
if ($wantCustomOut) {
$singleOutFile = $OutFile;
} else {
$singleOutFile = "checksums.$($Algorithm.ToLower())";
}
$totalFiles = $allItems.Count;
$currentIndex = 0;
$linesToWrite = @();
$allItems | ForEach-Object -Parallel {
$item = $_
$algo = $using:Algorithm
$hash = (Get-FileHash -Path ($item.FullName) -Algorithm ($algo)).Hash.ToLower();
$relativePath = Resolve-Path -Path ($item.FullName) -Relative -ErrorAction 'SilentlyContinue';
if (-not $relativePath) { $relativePath = $item.Name; }
if ($relativePath.StartsWith(".\") -or $relativePath.StartsWith("./")) {
$relativePath = $relativePath.Substring(2);
}
[PSCustomObject]@{
Item = $item
Hash = $hash
RelativePath = $relativePath
OutputLine = "${hash} ${relativePath}"
ItemOutFile = "$($item.FullName).$($algo.ToLower())"
}
} -ThrottleLimit 16 | ForEach-Object {
$currentIndex++;
if ($showProgress -and $totalFiles -gt 0) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Status "Processing file $currentIndex of $totalFiles" -PercentComplete (($currentIndex / $totalFiles) * 100);
}
$linesToWrite += $_.OutputLine;
Write-Output $_.OutputLine;
}
if ($showProgress) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Completed;
}
Set-Content -Path ($singleOutFile) -Value $linesToWrite -Encoding utf8;
}
else {
$totalFiles = $allItems.Count;
$currentIndex = 0;
$allItems | ForEach-Object -Parallel {
$item = $_
$algo = $using:Algorithm
$hash = (Get-FileHash -Path ($item.FullName) -Algorithm ($algo)).Hash.ToLower();
$relativePath = Resolve-Path -Path ($item.FullName) -Relative -ErrorAction 'SilentlyContinue';
if (-not $relativePath) { $relativePath = $item.Name; }
if ($relativePath.StartsWith(".\") -or $relativePath.StartsWith("./")) {
$relativePath = $relativePath.Substring(2);
}
[PSCustomObject]@{
Item = $item
Hash = $hash
RelativePath = $relativePath
OutputLine = "${hash} ${relativePath}"
ItemOutFile = "$($item.FullName).$($algo.ToLower())"
}
} -ThrottleLimit 16 | ForEach-Object {
$currentIndex++;
if ($showProgress -and $totalFiles -gt 0) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Status "Processing file $currentIndex of $totalFiles" -PercentComplete (($currentIndex / $totalFiles) * 100);
}
Write-Output $_.OutputLine;
Set-Content -Path ($_.ItemOutFile) -Value $_.OutputLine -Encoding utf8;
}
if ($showProgress) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Completed;
}
}
}
}
else {
$totalFiles = $allItems.Count;
$currentIndex = 0;
$allItems | ForEach-Object -Parallel {
$item = $_
$algo = $using:Algorithm
$hash = (Get-FileHash -Path ($item.FullName) -Algorithm ($algo)).Hash.ToLower();
$relativePath = Resolve-Path -Path ($item.FullName) -Relative -ErrorAction 'SilentlyContinue';
if (-not $relativePath) { $relativePath = $item.Name; }
if ($relativePath.StartsWith(".\") -or $relativePath.StartsWith("./")) {
$relativePath = $relativePath.Substring(2);
}
[PSCustomObject]@{
Item = $item
Hash = $hash
RelativePath = $relativePath
OutputLine = "${hash} ${relativePath}"
ItemOutFile = "$($item.FullName).$($algo.ToLower())"
}
} -ThrottleLimit 16 | ForEach-Object {
$currentIndex++;
if ($showProgress -and $totalFiles -gt 0) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Status "Processing file $currentIndex of $totalFiles" -PercentComplete (($currentIndex / $totalFiles) * 100);
}
Write-Output $_.OutputLine;
}
if ($showProgress) {
Write-Progress -Activity "Computing Checksums ($Algorithm)" -Completed;
}
}
}
-85
View File
@@ -1,85 +0,0 @@
param (
[Parameter(Mandatory = $true, Position = 0)]
[string]$Ext1,
[Parameter(Mandatory = $true, Position = 1)]
[string]$Ext2,
[int]$Jobs = 4 # Number of simultaneous conversions
)
$sourceExt = $Ext1.TrimStart('.')
$targetExt = $Ext2.TrimStart('.')
$audioExts = @('opus', 'ogg', 'flac', 'wav')
$files = Get-ChildItem -File -Recurse -Filter "*.$sourceExt"
if ($files.Count -eq 0) {
Write-Host "No files matching *.$sourceExt found." -ForegroundColor Yellow
return
}
Write-Host "Starting conversion using $Jobs parallel jobs..." -ForegroundColor Green
$files | ForEach-Object -Parallel {
$file = $_
$targetExt = $using:targetExt
$audioExts = $using:audioExts
$outputPath = Join-Path -Path $file.DirectoryName -ChildPath "$($file.BaseName).$targetExt"
$relativePath = Resolve-Path -Path $file.FullName -Relative
Write-Host "Processing: $relativePath" -ForegroundColor Cyan
if ($audioExts -contains $targetExt.ToLower()) {
ffmpeg -y -i $file.FullName -c:a libopus -b:a 128k -vbr on $outputPath 2>$null
} else {
# -preset 8 drastically speeds up SVT-AV1 while maintaining high quality
ffmpeg -y -i $file.FullName -c:v libsvtav1 -crf 26 -preset 8 -c:a libopus -b:a 128k $outputPath 2>$null
}
} -ThrottleLimit $Jobs
Write-Host "Finished processing $($files.Count) file(s)." -ForegroundColor Green
# -------------------------------------------------------------------------
# Step 1: Recursively delete all existing .sha256 files
# -------------------------------------------------------------------------
Write-Host "Deleting existing .sha256 files recursively..." -ForegroundColor Yellow
Get-ChildItem -Path . -Recurse -Filter "*.sha256" -File | Remove-Item -Force
# -------------------------------------------------------------------------
# Step 2: Run checksums in current directory and every subdirectory
# -------------------------------------------------------------------------
Write-Host "Generating checksums in each subfolder..." -ForegroundColor Cyan
# Gather current working directory and all child directories
$allDirs = @((Get-Item .).FullName) + (Get-ChildItem -Path . -Recurse -Directory | Select-Object -ExpandProperty FullName)
foreach ($dir in $allDirs) {
Push-Location $dir
try {
Write-Host "Updating checksums in: $dir" -ForegroundColor Gray
checksum * -o
} finally {
Pop-Location
}
}
# -------------------------------------------------------------------------
# Step 3: Recursively verify checksums in each directory
# -------------------------------------------------------------------------
Write-Host "Verifying checksums in each subfolder..." -ForegroundColor Cyan
foreach ($dir in $allDirs) {
Push-Location $dir
try {
if (Test-Path "checksums.sha256") {
Write-Host "Verifying: $dir" -ForegroundColor Gray
checksum -c checksums.sha256
}
} finally {
Pop-Location
}
}
Write-Host "All conversions, checksum creations, and verifications completed successfully." -ForegroundColor Green
+20 -6
View File
@@ -1,9 +1,23 @@
if ($args[0]) { $commit_message=($args -join " ") } # if arg0 exists, join all passed args with spaces # waypoint.ps1
else { $commit_message="waypoint" } # or default to "waypoint"
Write-Host "WAYPOINT!`n`tCommit Message: $commit_message`n" if (-not (Test-Path -Path ".\.git" -PathType Container)) {
# add and commit Write-Host "No .git folder detected. Initializing new Git repository..." -ForegroundColor Yellow
git init
} else {
Write-Host "Git repository detected. Creating waypoint..." -ForegroundColor Cyan
}
# Stage all changes
git add . git add .
git commit -m "$commit_message"
Write-Host "`nDone :`"3" # Format the timestamp with timezone offset/ID string
$timestamp = (Get-Date).ToString("yyyy-MM-dd-HHmm") + "-" + ((Get-TimeZone).Id -creplace '[a-z\s]', '')
# Capture current git status output
$statusOutput = (git status | Out-String).Trim()
# Construct the commit message
$commitMessage = "WAYPOINT $timestamp`n`n$statusOutput"
# Execute commit
git commit -m "$commitMessage"
@@ -1,58 +0,0 @@
#!/bin/bash
domain=kasm.h.acker.is
local_port=8443
swap_size_gib=6
sudo apt update
sudo apt dist-upgrade -y
sudo fallocate -l ${swap_size_gib}g /mnt/${swap_size_gib}GiB.swap
sudo chmod 600 /mnt/${swap_size_gib}GiB.swap
sudo mkswap /mnt/${swap_size_gib}GiB.swap
sudo swapon /mnt/${swap_size_gib}GiB.swap
echo "/mnt/${swap_size_gib}GiB.swap swap swap defaults 0 0" | sudo tee -a /etc/fstab
cd /tmp
curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_1.19.0-latest.tar.gz
tar -xf kasm_release*.tar.gz
sudo bash kasm_release/install.sh -L $local_port
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx -y
sudo certbot certonly --nginx -d $domain
sudo cat << 'EOF' > /etc/nginx/sites-available/$domain
server {
listen 443 ssl;
server_name $domain;
ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;
location / {
# WebSocket Support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Host and X headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Should match the listening port of this proxy
proxy_set_header X-Forwarded-Port 443;
# Connectivity Options
proxy_http_version 1.1;
proxy_read_timeout 1800s;
proxy_send_timeout 1800s;
proxy_connect_timeout 1800s;
proxy_buffering off;
# Allow large requests to support file uploads to sessions
client_max_body_size 10M;
# Proxy to Kasm Workspaces running locally on $local_port using ssl
proxy_pass https://127.0.0.1:$local_port;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/$domain /etc/nginx/sites-enabled/$domain
sudo nginx -t
sudo systemctl restart nginx
sudo docker restart kasm_api
sudo shutdown -r +7
+50 -44
View File
@@ -12,6 +12,7 @@ tmpDir='/tmp/generalssss'
tmp_customscripts_dir="$tmpDir/customscripts" tmp_customscripts_dir="$tmpDir/customscripts"
finalDir='/usr/share/customscripts' finalDir='/usr/share/customscripts'
packages="7zip apache2 argon2 avahi-daemon btop build-essential byobu cargo cifs-utils clamav cmake cowsay cracklib-runtime detox docker.io exiftool fdupes ffuf gcc-arm-none-eabi grc gzip iotop iptraf-ng jq kpartx libnss-mdns libnewlib-arm-none-eabi librust-git2+openssl-probe-dev libstdc++-arm-none-eabi-newlib locales lynx net-tools nginx openssl php polygen polygen-data procps python3 python3-scapy resolvconf restic ripgrep samba screen seclists snapd thefuck unzip wget xrdp xxd xz-utils zip kali-linux-default" packages="7zip apache2 argon2 avahi-daemon btop build-essential byobu cargo cifs-utils clamav cmake cowsay cracklib-runtime detox docker.io exiftool fdupes ffuf gcc-arm-none-eabi grc gzip iotop iptraf-ng jq kpartx libnss-mdns libnewlib-arm-none-eabi librust-git2+openssl-probe-dev libstdc++-arm-none-eabi-newlib locales lynx net-tools nginx openssl php polygen polygen-data procps python3 python3-scapy resolvconf restic ripgrep samba screen seclists snapd thefuck unzip wget xrdp xxd xz-utils zip kali-linux-default"
# packages="grc kpartx openssl cracklib-runtime argon2 jq polygen polygen-data apache2 seclists cmake locales python3 build-essential gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib librust-git2+openssl-probe-dev cargo nginx build-essential cowsay iotop iptraf-ng btop screen byobu thefuck wget lynx zip unzip 7zip xz-utils gzip net-tools clamav php restic cifs-utils detox fdupes ripgrep avahi-daemon libnss-mdns xxd xrdp libimage-exiftool-perl kali-tools-hardware kali-tools-crypto-stego kali-tools-fuzzing kali-tools-bluetooth kali-tools-rfid kali-tools-sdr kali-tools-voip kali-tools-802-11 kali-tools-forensics samba procps snapd"
echo -e "\nSTARTING!\n\tUsing Shell $SHELL\n" echo -e "\nSTARTING!\n\tUsing Shell $SHELL\n"
@@ -72,48 +73,49 @@ if [ ! -z "$1" ]; then
# echo -e "\nhaveibeenpwned-downloader installed, skipping install\n" # echo -e "\nhaveibeenpwned-downloader installed, skipping install\n"
# fi # fi
# homebrew # homebrew
if [ ! $(which brew) ]; then # if [ ! $(which brew) ]; then
## install homebrew # ## install homebrew
echo -e "\nlinuxbrew not found, installing\n" # echo -e "\nlinuxbrew not found, installing\n"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" # test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" # test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
### add to rcfile # ### add to rcfile
if ! grep -q 'linuxbrew' $rcfile; then # if ! grep -q 'linuxbrew' $rcfile; then
echo "adding linuxbrew to $rcfile" # # echo "adding linuxbrew to $rcfile"
echo "# linuxbrew (homebrew/brew)" >> $rcfile # # echo "# linuxbrew (homebrew/brew)" >> $rcfile
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> $rcfile # # echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> $rcfile
else # else
echo "linuxbrew already in $rcfile skipping" # echo "linuxbrew already in $rcfile skipping"
fi # fi
#
else # # source $rcfile
echo -e "\nlinuxbrew installed, skipping install\n" # else
fi # echo -e "\nlinuxbrew installed, skipping install\n"
### install ponysay # # source $rcfile
if [ ! $(which ponysay) ]; then # fi
echo -e "\nponysay not fonud, installiing\n" # ### install ponysay
brew install ponysay # if [ ! $(which ponysay) ]; then
if ! grep 'ponysay fix' $rcfile; then # echo -e "\nponysay not fonud, installiing\n"
echo "adding ponysay fix to $rcfile" # brew install ponysay
echo -e "# ponysay fix\nexport PYTHONWARNINGS=ignore::SyntaxWarning" >> $rcfile # if ! grep 'ponysay fix' $rcfile; then
source $rcfile # # echo "adding ponysay fix to $rcfile"
else # # echo -e "# ponysay fix\nexport PYTHONWARNINGS=ignore::SyntaxWarning" >> $rcfile
echo "ponysay fix already in $rcfile skipping" # # source $rcfile
source $rcfile # else
fi # # echo "ponysay fix already in $rcfile skipping"
else # # source $rcfile
echo -e "\nponysay already installed, skipping\n" # fi
fi # else
# echo -e "\nponysay already installed, skipping\n"
# fi
# cargo # cargo
## oniux ## oniux
echo -e "\nINSTALLIN TOR ONIUX\n" echo -e "\nINSTALLIN TOR ONIUX\n"
if [ -f /usr/local/bin/oniux ]; then if [ -f /usr/local/bin/oniux ]; then
echo -e "\nexisting oniux found, skipping\n" echo -e "\nexisting oniux found, skipping\n"
else else
echo -e "\nexisting oniux not found, installing\n" echo -e "\nexisting oniux not found, installing\n"
cd /tmp && cargo install --git https://gitlab.torproject.org/tpo/core/oniux && cd - && echo -e '## Oniux/Cargo Shit\nPATH=$PATH:$HOME/.cargo/bin' >> ~/.bashrc && source ~/.bashrc && oniux curl https://canhazip.com cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.6.1 oniux
fi fi
else else
@@ -158,7 +160,7 @@ git clone $gitRepo $tmpDir --single-branch --depth 1
# donut # donut
echo -e "\nCompiling donut\n" echo -e "\nCompiling donut\n"
gcc -o "$tmp_customscripts_dir/donut" "$tmp_customscripts_dir/donut.c" -lm 2>/dev/null gcc -o "$tmp_customscripts_dir/donut" "$tmp_customscripts_dir/donut.c" -lm # 2>/dev/null
# put the customscripts dir into place # put the customscripts dir into place
echo -e "\nPlacing in $finalDir\n" echo -e "\nPlacing in $finalDir\n"
@@ -179,10 +181,10 @@ pathgrep=$?
if [ $pathgrep -eq 0 ]; then if [ $pathgrep -eq 0 ]; then
echo -e "\n$finalDir Already in \$PATH Skipping Append\n" echo -e "\n$finalDir Already in \$PATH Skipping Append\n"
fi fi
else # else
# echo -e "\nAdding $finalDir to $username's \$PATH by Appending to $rcfile\n" # echo -e "\nAdding $finalDir to $username's \$PATH by Appending to $rcfile\n"
# echo -e "\n\n# automatically added by customscripts installer\nexport PATH=\"\$PATH:$finalDir\"" >> "$rcfile" # echo -e "\n\n# automatically added by customscripts installer\nexport PATH=\"\$PATH:$finalDir\"" >> "$rcfile"
fi # fi
# install pishrink if not there # install pishrink if not there
if [ ! -f /usr/local/bin/pishrink ]; then if [ ! -f /usr/local/bin/pishrink ]; then
@@ -202,11 +204,15 @@ if [ ! -d $userhome/.local/share/blesh ]; then
cd /tmp cd /tmp
git clone --recursive --depth 1 --shallow-submodules --single-branch -b master https://github.com/akinomyoga/ble.sh.git git clone --recursive --depth 1 --shallow-submodules --single-branch -b master https://github.com/akinomyoga/ble.sh.git
make -C ble.sh install PREFIX=~/.local make -C ble.sh install PREFIX=~/.local
echo '# ble.sh' >> $rcfile # echo '# ble.sh' >> $rcfile
echo "source -- ~/.local/share/blesh/ble.sh" >> $rcfile # echo "source -- ~/.local/share/blesh/ble.sh" >> $rcfile
else # source $rcfile
echo -e "\nble.sh already installed, skippping\n" # exec "$SHELL"
fi fi
# else
# echo -e "\nble.sh already installed, skippping\n"
# source $rcfile
# fi
$SHELL -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $SHELL -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"' >> "$rcfile" echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"' >> "$rcfile"
+85
View File
@@ -0,0 +1,85 @@
#!/bin/bash
# usage
## curl -s https://raw.githubusercontent.com/PrincessPi3/general-scripts-and-system-ssssssetup/refs/heads/main/customscripts/python_pyenv_setup.sh | sudo "$SHELL" && source ~/.zshrc && exec "$SHELL" && pyenv install 3:latest && pyenv global 3:latest
# set -e
# set rcfile
rcfile="$HOME/.zshrc" # zsh
# rcfile="$USER/.bashrc" # bash
package_log="/home/princesspi/python_packages_removed.txt"
# check if a command exists, and if so, purge that package
# usage: check_purge_package <package_name>
check_purge_package () {
package_name=$1
# which -s $package_name 2>/dev/null 1>/dev/null # silently test for command
# package_check=$? # get return code. 0 for found, any other for not found
# if [ $package_check -eq 0 ]; then # if package is found, purge it
echo "purging $package_name"
sudo apt purge $package_name -y 2>>"$package_log" 1>>"$package_log"
echo "finished purging $package_name"
# else # otherwise skip
# echo "no $package_name installation found, skipping uninstall"
#fi
}
# cleanup previous python installs
# check_purge_package pyenv*
# check_purge_package python3*
# check_purge_package python2*
# check_purge_package python*
# check_purge_package pip*
# check_purge_package pip3*
# check_purge_package pip2*
# cleanup
# echo "Autoremoving packages"
# sudo apt autoremove -y 2>>"$package_log" 1>>"$package_log"
# echo -e "DONE CLEARING OLD PACKAGES!\n\tRemoved packages logged to $package_log"
if [ -d $HOME/.pyenv ]; then
echo "Removing existing pyenv installation"
rm -rf $HOME/.pyenv
else
echo "No existing pyenv installation found, skipping removal"
fi
# install pyenv
curl -fsSL https://pyenv.run | bash
## setup shell
### check for pyenv in rcfile
grep -q .pyenv $rcfile
rc_pyenv_check=$? # get retcode, 0 for found not 0 for not found
if [ $rc_pyenv_check -eq 0 ]; then # if pyenv found
echo "pyenv already set up in $rcfile, skipping add init"
else # if pyenv not found
echo "Setting up pyenv in $rcfile"
echo -e "\n# pyenv setup" >> $rcfile
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> $rcfile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> $rcfile
echo 'eval "$(pyenv init - zsh)"' >> $rcfile
fi
## add aliases
### check for aliases in rcfile
grep -q '## python aliases' $rcfile
rc_pyalias_check=$? # get retcode, 0 for found not 0 for not found
if [ $rc_pyalias_check -eq 0 ]; then # if aliases found
echo "pyenv aliases already set up in $rcfile, skipping"
else # if aliases not found, add python shit
echo "Setting up pyenv aliases in $rcfile"
echo "## python aliases" >> $rcfile
echo 'alias py=python' >> $rcfile
echo 'alias py3=python' >> $rcfile
echo 'alias py2=python' >> $rcfile
echo 'alias python3=python' >> $rcfile
echo 'alias python2=python' >> $rcfile
echo 'alias pip3=pip' >> $rcfile
echo -e "alias pip2=pip\n" >> $rcfile
fi
echo -e "\n\ndone~ :3~\n\treset shell with exec \"\$SHELL\"\n"
-40
View File
@@ -1,40 +0,0 @@
#!/bin/bash
# Usage:
## Install Tor
### sudo apt update; sudo apt install tor -y
## Edit /etc/tor/torrc
### sudo nano /etc/tor/torrc
#### Uncomment or add
##### ControlPort 9051
#### Ucomment and change to (default value is 1, change to 0)
##### CookieAuthentication 0
## Enable, Start, and Restart Tor
### sudo systemctl enable tor; sudo systemctl start tor; sleep 20; sudo systemctl restart tor
# Configuration
TARGET_URL="https://canhazip.com"
TOR_PROXY="socks5h://127.0.0.1:9050"
TOR_CONTROL_PORT=9051
DELAY=2 # Delay in seconds between requests
# Ensure you respect HIBP's API rate limits and terms of service
while true; do
echo "[+] Requesting new Tor identity..."
# Send NEWNYM signal to Tor Control Port to switch IP
echo -e 'AUTHENTICATE ""\r\nsignal NEWNYM\r\nQUIT' | nc 127.0.0.1 9051 > /dev/null
# Give Tor a brief moment to establish the new circuit
sleep "$DELAY"
echo "[+] Verifying current IP..."
CURRENT_IP=$(curl -s --proxy "$TOR_PROXY" https://canhazip.com)
echo "[+] Current Tor IP: $CURRENT_IP"
echo "[+] Sending request to Have I Been Pwned..."
# 'socks5h://' ensures DNS resolution happens through Tor, preventing leaks
curl -s --proxy "$TOR_PROXY" -H "hibp-api-key: YOUR_API_KEY" "$TARGET_URL"
echo -e "\n[+] Waiting for next iteration...\n"
sleep "$DELAY"
done