diklabu-Seafile.psm1
$global:sftoken <# .Synopsis Anmelden an Seafile .DESCRIPTION Anmelden an Seafile .EXAMPLE login-Seafile -url http://localhost:8000 -credentails (get-cretendials admin) #> function Login-Seafile { [CmdletBinding()] Param ( # URL des Moodle Systems [Parameter(Position=0)] [String]$url, # Credentials f. das Moodle Systems [Parameter(Position=1)] [PSCredential]$credential ) Begin { if (-not $url -or -not $credential) { if ($Global:logins["seafile"]) { $url=$Global:logins["seafile"].location; $password = $Global:logins["seafile"].password | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PsCredential($Global:logins["seafile"].user,$password) } else { Write-Error "Bitte url und credentials angeben!" return; } } $base=$url $url = $url+"api2/auth-token/" $data=echo "" | Select-Object -Property "username","password" $data.username=$credential.userName $data.password=$credential.GetNetworkCredential().Password $out="username=$($data.username)&password=$($data.password)" $r=Invoke-RestMethod -Method POST -Uri $url -Body $out if ($r.token) { Write-Verbose "Login erfolgreich" $global:seafile=$base } else { Write-Verbose "Login fehlgeschlagen" } setKey "seafile" $base $credential $global:sftoken=$r.token $r } } <# .Synopsis Abfrage des Seafile Servers .DESCRIPTION Abfrage des Seafile Servers .EXAMPLE get-Seafile #> function Get-Seafile { [CmdletBinding()] Param ( ) Begin { $Global:logins["seafile"] } } <# .Synopsis Neue Gruppen anlegen .DESCRIPTION Neue Gruppen anlegen .EXAMPLE New-SFGroup -name Test Legt eine neue Gruppe mit dem Namen Test an! .EXAMPLE "Test","Test2" | New-SFGroup Legt eine neue Gruppen mit den Namen Test und Test2 an! #> function New-SFGroup { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [String]$name, [switch]$force, [switch]$whatif ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="Token "+$global:sftoken; } Process { $body="name=$name" $url = $global:seafile+"api/v2.1/groups/" try { if (-not $whatif) { if (-not $force) { $q = Read-Host "Soll eine neue Gruppe mit dem Namen $name angelegt werden? (J/N)" if ($q -ne "J") { return } } $r=Invoke-RestMethod -Method POST -Body $body -Uri $url -Headers $headers Write-Verbose "Erzeuge neue Gruppe mit dem Namen $name" $r } else { Write-Verbose "Würde neue Gruppe mit dem Namen $name erzeugen" } } catch { $errorcode = $_.Exception.Response.StatusCode.value__ if ($errorcode -eq 400) { Write-Error "400: Die Gruppe mit dem Namen $name existiert bereits"; } else { Write-Error $_ } } } } <# .Synopsis Gruppen abfragen .DESCRIPTION Gruppen abfragen .EXAMPLE Get-SFGroups #> function Get-SFGroups { [CmdletBinding()] Param ( [Parameter(Position=0)] [int]$perPage=100 ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["Authorization"]="TOKEN "+$global:sftoken; $url = $global:seafile+"api/v2.1/groups/?page=1&per_page=$perPage" $r=Invoke-RestMethod -Method GET -Uri $url -Headers $headers Write-Verbose "Abfrage alles SF Gruppen" $r } } <# .Synopsis Gruppen löschen .DESCRIPTION Gruppen in Seafile löschen .EXAMPLE Delete-SFGroup -id 1 Löscht die Gruppe mit der ID 1 .EXAMPLE 1,2,3 | Delete-SFGroup Löscht die Gruppen mit denb IDs 1,2,3 #> function Delete-SFGroup { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [int]$id, [switch]$force, [switch]$whatif ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"api/v2.1/groups/$id/" try { if (-not $whatif) { if (-not $force) { $q = Read-Host "Soll die SF Gruppe mit ID $id gelöscht werden? (J/N)?" if ($q -ne "J") { return } } $r=Invoke-RestMethod -Method DELETE -Uri $url -Headers $headers Write-Verbose "Lösche Gruppe mit ID $id" $r } else { Write-Verbose "Würde Gruppe mit ID $id löschen" } } catch { $errorcode = $_.Exception.Response.StatusCode.value__ if ($errorcode -eq 400) { Write-Error "400: Die Gruppe mit der ID $id existiert nicht"; } elseif ($errorcode -eq 404) { Write-Error "404: Die Gruppe mit der ID $id existiert nicht"; } elseif ($errorcode -eq 403) { Write-Error "403: Die Gruppe mit der ID $id kann nicht gelöscht werden"; } else { Write-Error $_ } } } } <# .Synopsis Benutzer zu einer Gruppe hinzufügen .DESCRIPTION Fügt Benutzer zu einer Seafile Gruppe hinzu .EXAMPLE Add-SFGroupmember -email tuttas@mmbbs.de -id 1 Fügt den Benutzer tuttas@mmbbs.de der Gruppe mit der ID 1 hinzu .EXAMPLE "tuttas@mmbbs.de","kemmries@mmbbs.de" | Add-SFGroupmember -id 1 Fügt die Benutzer der Gruppe mit der ID 1 hinzu #> function Add-SFGroupmember { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [String]$email, [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] [int]$id, [switch]$force, [switch]$whatif ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"api/v2.1/groups/$id/members/" $body="email=$email" try { if (-not $whatif) { if (-not $force) { $q = Read-Host "Soll Benutzer $email zur Gruppe mit ID $id hinzugefügt werden? (J/N)" if ($q -ne "J") { return } } $r=Invoke-RestMethod -Method POST -Uri $url -Body $body -Headers $headers Write-Verbose "Füge $email zur Gruppe mit ID $id hinzu" $r } else { Write-Verbose "Würde $email zur Gruppe mit ID $id hinzufügen!" } } catch { $errorcode = $_.Exception.Response.StatusCode.value__ if ($errorcode -eq 400) { Write-Error "400: Die Gruppe mit der ID $id existiert nicht, oder Benutzer mit EMail $email nicht gefunden"; } elseif ($errorcode -eq 403) { Write-Error "403: Nur Administratoren können Gruppenmitglieder hinzufügen"; } elseif ($errorcode -eq 404) { Write-Error "400: Die Gruppe mit der ID $id existiert nicht, oder Benutzer mit EMail $email nicht gefunden"; } else { Write-Error $_ } } } } <# .Synopsis Benutzer aus einer Gruppe entfernen .DESCRIPTION Entfernt einen Benutzer aus einer Seafile Gruppe .EXAMPLE Remove-SFGroupmember -email tuttas@mmbbs.de -id 1 Löscht den Benutzer tuttas@mmbbs.de aus der Gruppe mit der ID 1 .EXAMPLE "tuttas@mmbbs.de","kemmries@mmbbs.de" | Remove-SFGroupmember -id 1 Löscht die Benutzer aus der Gruppe mit der ID 1 #> function Remove-SFGroupmember { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [String]$email, [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] [int]$id, [switch]$force, [switch]$whatif ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"/api/v2.1/groups/$id/members/$email/" try { if (-not $whatif) { if (-not $force) { $q = Read-Host "Soll Benutzer $email aus der Gruppe mit der ID $id entfernt werden? (J/N)" if ($q -ne "J") { return; } } $r=Invoke-RestMethod -Method DELETE -Uri $url -Headers $headers Write-Verbose "Lösche $email aus Gruppe mit ID = $id" $r } else { Write-Verbose "Würde $email aus Gruppe mit ID = $id entfernen!" } } catch { $errorcode = $_.Exception.Response.StatusCode.value__ if ($errorcode -eq 400) { Write-Error "400: Die Gruppe mit der ID $id existiert nicht, oder Benutzer mit EMail $email nicht gefunden"; } elseif ($errorcode -eq 403) { Write-Error "403: Nur Administratoren können Gruppenmitglieder hinzufügen"; $_ } elseif ($errorcode -eq 404) { Write-Error "400: Die Gruppe mit der ID $id existiert nicht"; } else { Write-Error $_ } } } } <# .Synopsis Benutzer eine Gruppe anzeigen .DESCRIPTION Zeigt die Seafile Benutzer in einer Gruppe an .EXAMPLE Get-SFGroupmember -id 1 Zeit die Mitglieder der Gruppe mit der ID 1 .EXAMPLE 1,2 | Get-SFGroupmember Zeit die Mitglieder der Gruppe mit den IDs 1 u. 2 #> function Get-SFGroupmember { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [int]$id ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"/api/v2.1/groups/$id/members/" try { $r=Invoke-RestMethod -Method GET -Uri $url -Headers $headers Write-Verbose "Abfrage der Gruppenmitglieder der Gruppe ID=$id" $r } catch { $errorcode = $_.Exception.Response.StatusCode.value__ if ($errorcode -eq 404) { Write-Error "404: Die Gruppe mit der ID $id existiert nicht!"; } else { Write-Error $_ } } } } <# .Synopsis Neuen Seafile Benutzer anlegen .DESCRIPTION Legt einen neuen Seafile Benutzer an .EXAMPLE New-SFUser -email s3@mmbbs.de -password mmbbs Legt einen neuen Benutzer mit der EMail Adresse s3@mmbbs.de und dem Kennwort mmbbs an! .EXAMPLE "s3@mmbbs.de","s4@mmbbs.de" | New-SFUser -password mmbbs Legt die genannten Benutzer mit der EMAIL Adressen an und vergibt das Kennwort "mmbbs" #> function New-SFUser { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [String]$email, [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] [String]$password, [switch]$force, [switch]$whatif ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"/api2/accounts/$email/" try { if (-not $whatif) { if (-not $force) { $q = Read-Host "Soll neuer Benutzer mit EMail $email angelegt werden? (J/N)" if ($q -ne "J") { return; } } $body = "password=$password" $r=Invoke-RestMethod -Method PUT -Body $body -Uri $url -Headers $headers Write-Verbose "Erzeuge neuen User $email und dem Kennwoprt $password" $r } else { Write-Verbose "Würde neuen User $email und dem Kennwoprt $password erzeugen" } } catch { $errorcode = $_.Exception.Response.StatusCode.value__ Write-Error $_ } } } <# .Synopsis Seafile Benutzer löschen .DESCRIPTION Löscht einen Seafile Benutzer .EXAMPLE Delete-SFUser -email s3@mmbbs.de Löscht Benutzer mit der EMail Adresse s3@mmbbs.de ! .EXAMPLE "s3@mmbbs.de","s4@mmbbs.de" | Delete-SFUser Löscht die genannten Benutzer mit der EMAIL Adressen #> function Delete-SFUser { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [String]$email, [switch]$force, [switch]$whatif ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"/api2/accounts/$email/" try { if (-not $whatif) { if (-not $force) { $q = Read-Host "Soll neuer Benutzer mit EMail $email angelegt werden? (J/N)" if ($q -ne "J") { return; } } $r=Invoke-RestMethod -Method DELETE -Uri $url -Headers $headers Write-Verbose "Lösche User $email !" $r } else { Write-Verbose "Würde User $email löschen" } } catch { $errorcode = $_.Exception.Response.StatusCode.value__ Write-Error $_ } } } <# .Synopsis Zeigt die Seafile Benutzer an .DESCRIPTION Zeigt alle Seafile Benutzer an .EXAMPLE Get-SFUsers Zeigt die Seafile Benutzer an #> function Get-SFUsers { [CmdletBinding()] Param ( [Parameter(Position=0)] [int]$start=-1, [Parameter(Position=1)] [int]$limit=-1, [Parameter(Position=2)] [ValidateSet('LDAP','DB','LDAPImport')] [String]$scope ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; $url = $global:seafile+"/api2/accounts/" $url+="?start=$start&limit=$limit" if ($scope) { $url+="&scope=$scope" } try { $r=Invoke-RestMethod -Method GET -Uri $url -Headers $headers Write-Verbose "Abfrage aller Seafilebenutzer" $r } catch { $null } } } <# .Synopsis Zeigt Informationen zu einem User .DESCRIPTION Zeigt Informationen zu einem User .EXAMPLE Get-SFUser -email tuttas@mmbbs.de Zeigt die Informationen zum SF User tuttas@mmbbs.de an .EXAMPLE "tuttas@mmbbs.de","kemmries@mmbbs.de" | Get-SFUser Zeigt die Informationen zu den SF User tuttas@mmbbs.de und kemmries@mmbbs.de an #> function Get-SFUser { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [String]$email ) Begin { if (-not $global:sftoken) { Write-Error "Sie sind nicht an Seafile angemeldet, veruchen Sie es mit Login-Seafile" return } $headers=@{} $headers["content-Type"]="application/x-www-form-urlencoded" $headers["Authorization"]="TOKEN "+$global:sftoken; } Process { $url = $global:seafile+"api2/accounts/$email/" try { $r=Invoke-RestMethod -Method GET -Uri $url -Headers $headers Write-Verbose "Abfrage des Seafilebenutzers $email" $r } catch { $null } } } |