Vorlagen ergänzt
This commit is contained in:
157
_Vorlagen/Groovy-Skripte/taskAppMigration.groovy
Normal file
157
_Vorlagen/Groovy-Skripte/taskAppMigration.groovy
Normal file
@@ -0,0 +1,157 @@
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
D3Interface d3 = getProperty( 'd3' ) as D3Interface
|
||||
|
||||
def LOG_PREFIX = 'taskAppMigration: '
|
||||
|
||||
/**
|
||||
* Angabe des Hostnamens ohne Slash am Ende.
|
||||
*/
|
||||
String hostname = ""
|
||||
|
||||
/**
|
||||
* Der API_KEY muss vor der Ausführung gesetzt werden
|
||||
**/
|
||||
String API_KEY = ""
|
||||
/**
|
||||
* Dieser User wird anstelle der gesperrten / nicht vorhandenen d.3-User in die wieder_vorlage geschrieben.
|
||||
* d.3 user-id:
|
||||
*/
|
||||
String d3ServiceUserSender = ""
|
||||
String d3ServiceUserReceiver = ""
|
||||
|
||||
def query = """\
|
||||
SELECT DISTINCT
|
||||
wv.sender wv_user,
|
||||
ben.idp_id,
|
||||
CASE
|
||||
WHEN sia.sid IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
ist_gesperrt
|
||||
FROM
|
||||
wieder_vorlage wv
|
||||
JOIN benutzer ben ON ben.benutzername = wv.sender
|
||||
LEFT OUTER JOIN sid_assign sia ON
|
||||
sia.auth_id = ben.benutzername
|
||||
AND
|
||||
sia.delete_flag = 0
|
||||
AND
|
||||
sia.sid = (
|
||||
SELECT
|
||||
sil.sid
|
||||
FROM
|
||||
sid_list sil
|
||||
WHERE
|
||||
sil.caption = 'Konto ist deaktiviert'
|
||||
)
|
||||
WHERE
|
||||
wv.wv_typ = 'W'
|
||||
AND
|
||||
wv.sender != 'd3_async'
|
||||
UNION ALL
|
||||
SELECT DISTINCT
|
||||
wv.benutzername wv_user,
|
||||
ben.idp_id,
|
||||
CASE
|
||||
WHEN sia.sid IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
ist_gesperrt
|
||||
FROM
|
||||
wieder_vorlage wv
|
||||
JOIN benutzer ben ON ben.benutzername = wv.benutzername
|
||||
LEFT OUTER JOIN sid_assign sia ON
|
||||
sia.auth_id = ben.benutzername
|
||||
AND
|
||||
sia.delete_flag = 0
|
||||
AND
|
||||
sia.sid = (
|
||||
SELECT
|
||||
sil.sid
|
||||
FROM
|
||||
sid_list sil
|
||||
WHERE
|
||||
sil.caption = 'Konto ist deaktiviert'
|
||||
)
|
||||
WHERE
|
||||
wv.wv_typ = 'W'
|
||||
""".stripIndent()
|
||||
|
||||
Closure<HttpsURLConnection> connection = { String url ->
|
||||
URL theUrl = new URL( url )
|
||||
HttpsURLConnection con = ( HttpsURLConnection ) theUrl.openConnection()
|
||||
con.addRequestProperty( 'Authorization', 'Bearer ' + API_KEY )
|
||||
con.addRequestProperty( 'Accept', 'application/json' )
|
||||
con.setDoInput( true )
|
||||
con.setDoOutput( true )
|
||||
return con
|
||||
}
|
||||
def rows = d3.sql.executeAndGet( query )
|
||||
|
||||
List<String> brokenUsers = [ ]
|
||||
|
||||
int gesperrt = 0
|
||||
int nichtinIdp = 0
|
||||
int aktiv = 0
|
||||
|
||||
rows.each{
|
||||
d3.log.error( LOG_PREFIX + it.wv_user + ": " + it.idp_id )
|
||||
d3.log.info( LOG_PREFIX + 'looking up ' + it.wv_user )
|
||||
|
||||
if( it.ist_gesperrt ){
|
||||
gesperrt++
|
||||
if( !brokenUsers.contains( it.wv_user)){
|
||||
brokenUsers.add( it.wv_user )
|
||||
}
|
||||
d3.log.info( LOG_PREFIX + "Der user '$it.wv_user' ist gesperrt." )
|
||||
return
|
||||
}
|
||||
|
||||
HttpsURLConnection con = connection( hostname + '/identityprovider/scim/users/' + it.idp_id )
|
||||
con.connect()
|
||||
if( con.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ){
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user existiert nicht als user im IDP." )
|
||||
con.disconnect()
|
||||
con = connection( hostname + '/identityprovider/scim/Groups/' + it.idp_id )
|
||||
con.connect()
|
||||
if( con.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ){
|
||||
nichtinIdp++
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user existiert nicht als Gruppe im idp." )
|
||||
if( !brokenUsers.contains( it.wv_user)){
|
||||
brokenUsers.add( it.wv_user )
|
||||
}
|
||||
con.disconnect()
|
||||
} else{
|
||||
aktiv++
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user ist eine Gruppe im idp." )
|
||||
}
|
||||
} else{
|
||||
aktiv++
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user ist im idp." )
|
||||
}
|
||||
}
|
||||
|
||||
def updateUser = 'UPDATE wieder_vorlage SET benutzername = ? WHERE benutzername = ?'
|
||||
def updateSender = 'UPDATE wieder_vorlage SET sender = ? WHERE sender = ?'
|
||||
|
||||
d3.log.info( LOG_PREFIX + "Aktualisiere Nicht-IDP-User in Tabelle wieder_vorlage...")
|
||||
brokenUsers.each{
|
||||
d3.log.info( LOG_PREFIX + "Ersetze user $it in 'benutzername' durch Service-User $d3ServiceUserReceiver")
|
||||
def changed = d3.sql.execute(updateUser, [d3ServiceUserReceiver, it])
|
||||
d3.log.info( LOG_PREFIX + "Zeilen geändert: $changed")
|
||||
d3.log.info( LOG_PREFIX + "Ersetze user $it in 'sender' durch Service-User $d3ServiceUserSender")
|
||||
changed = d3.sql.execute(updateSender, [d3ServiceUserSender, it])
|
||||
d3.log.info( LOG_PREFIX + "Zeilen geändert: $changed")
|
||||
}
|
||||
//Zur Sicherheit noch ein Commit ausführen, wenn kein Autocommit aktiv:
|
||||
d3.sql.execute( 'Commit' )
|
||||
|
||||
d3.log.info( LOG_PREFIX + 'Abgeschlossen.' )
|
||||
d3.log.info( LOG_PREFIX + "Anzahl gesperrter User: $gesperrt" )
|
||||
d3.log.info( LOG_PREFIX + "Anzahl nicht registrierter IDP-User: $nichtinIdp" )
|
||||
d3.log.info( LOG_PREFIX + "Anzahl aktiver User: $aktiv" )
|
||||
|
||||
d3.log.info( LOG_PREFIX + "Betroffene User: $brokenUsers" )
|
||||
Reference in New Issue
Block a user