Preserva base local aceite de identidade e acessos
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$Email,
|
||||
[Parameter(Mandatory=$true)][string]$Name,
|
||||
[Parameter(Mandatory=$true)][string]$Operator,
|
||||
[Parameter(Mandatory=$true)][string]$Reason
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$project = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..'))
|
||||
if ($project -ne 'C:\laragon\www\sgf-tempo') { throw 'Unexpected project path.' }
|
||||
Set-Location -LiteralPath $project
|
||||
$OutputEncoding = New-Object Text.UTF8Encoding $false
|
||||
[Console]::OutputEncoding = $OutputEncoding
|
||||
$sgfPhp = 'C:\laragon\tools\sgf-tempo\php-8.4.27\php.exe'
|
||||
$arguments = @('artisan','identity:provision',"--email=$Email","--name=$Name","--operator=$Operator","--reason=$Reason")
|
||||
& $sgfPhp @arguments
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Preview refused. No account created.' }
|
||||
$answer = Read-Host 'Confirma criar apenas esta conta, sem permissoes automaticas? [sim/nao]'
|
||||
if ($answer -notin @('sim','s','yes','y')) { Write-Host 'Operacao cancelada. Nada criado.'; exit 1 }
|
||||
Write-Host 'Defina a palavra-passe apenas neste terminal. Minimo 12 caracteres; maximo 72 bytes UTF-8.'
|
||||
while ($true) {
|
||||
$first = Read-Host 'Nova palavra-passe' -AsSecureString
|
||||
$repeat = Read-Host 'Repita a palavra-passe' -AsSecureString
|
||||
$firstPtr = [IntPtr]::Zero; $repeatPtr = [IntPtr]::Zero
|
||||
$plainFirst = $null; $plainRepeat = $null; $payload = $null
|
||||
try {
|
||||
$firstPtr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($first)
|
||||
$repeatPtr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($repeat)
|
||||
$plainFirst = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($firstPtr)
|
||||
$plainRepeat = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($repeatPtr)
|
||||
if ($plainFirst.Length -lt 12) { Write-Host 'Use pelo menos 12 caracteres. Tente novamente.' -ForegroundColor Yellow; continue }
|
||||
if ([Text.Encoding]::UTF8.GetByteCount($plainFirst) -gt 72) { Write-Host 'Excede 72 bytes. Tente novamente.' -ForegroundColor Yellow; continue }
|
||||
if ($plainFirst -cne $plainRepeat) { Write-Host 'As entradas nao coincidem. Tente novamente.' -ForegroundColor Yellow; continue }
|
||||
$payload = @{confirmed=$true;email=$Email.Trim().ToLowerInvariant();password=$plainFirst;confirmation=$plainRepeat} | ConvertTo-Json -Compress
|
||||
$payload | & $sgfPhp @arguments --apply --protected-stdin
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Account creation refused. Copy only the error message, never the password.' }
|
||||
Write-Host 'Conta criada sem acessos automaticos. Um gestor autorizado pode agora conceder os direitos na aplicacao.' -ForegroundColor Green
|
||||
break
|
||||
} finally {
|
||||
if ($firstPtr -ne [IntPtr]::Zero) { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($firstPtr) }
|
||||
if ($repeatPtr -ne [IntPtr]::Zero) { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($repeatPtr) }
|
||||
$plainFirst=$null; $plainRepeat=$null; $payload=$null
|
||||
$first.Dispose(); $repeat.Dispose()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user