158 lines
5.1 KiB
Groovy
158 lines
5.1 KiB
Groovy
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" )
|