#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
# Ingmar Kroll <ingkr@bps-system.de>
# BPS Bildungsportal Sachsen GmbH
# http://www.bps-system.de/

# ADM-2047
import time, urllib2, cookielib, optparse, sys, socket, base64, xml.dom.minidom, urllib
exitcode=2
try:
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    response = opener.open("https://your_idp_domain/idp/profile/SAML2/Unsolicited/SSO?shire=https://your_sp_domain/Shibboleth.sso/SAML2/POST&providerId=https://your_sp_domain/shibboleth&target=https://your_sp_domain")
    params = urllib.urlencode(dict(j_username="user", j_password="pass"))
    response = opener.open("https://your_idp_domain/idp/Authn/UserPassword", params)
    params = urllib.urlencode(dict(test="bla"))
    response = opener.open("https://your_idp_domain/idp/uApprove/AttributeRelease", params)
    dom = xml.dom.minidom.parseString(response.read())
    action=dom.getElementsByTagName("form")[0].getAttribute("action")
    RelayState=dom.getElementsByTagName("input")[0].getAttribute("value")
    SAMLResponse=dom.getElementsByTagName("input")[1].getAttribute("value")
    params = urllib.urlencode(dict(RelayState=RelayState, SAMLResponse=SAMLResponse))
    response = opener.open(action, params)
    login=True
    try:
        response.read().index('user ist online')
    except StandardError, e:
        login=False
    
    if login:
        print "OK: ShibLogin mit user war erfolgreich"
        exitcode=0
    else:
        print "CRITICAL: ShibLogin mit user ist fehlgeschlagen"
except:
    print "CRITICAL: ShibLogin mit user ist fehlgeschlagen"
sys.exit(exitcode)
