Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Peronnummer hämtas via attributet mittPersonnummer hämtas från källan myLDAP, anpassa efter behov.
  • Personnumret kan vara både 10 och 12 siffror.
  • Använder "sliding windows" utan offset för att dynamiskt hantera 2000-problemet.
  • Loggningen i exemplet används av Stockholms universitet men behöver troligen anpassas utifrån det specifika lärosätets faktiska förutsättningar och behov.
Code Block

// Script to handle ten position wide national identity numbers
// Create 12 position wide norEduPersonNIN from the attribute mittPersonnummer
// Change mittPersonnummer to your NIN attribute name
// The script is supplied by SU
<resolver:AttributeDefinition id="norEduPersonNIN" xsi:type="Script"
        xmlns="urn:mace:shibboleth:2.0:resolver:ad" sourceAttributeID="mittPersonnummer">
  <resolver:Dependency ref="myLDAP" />

  <resolver:AttributeEncoder xsi:type="SAML1String"
            xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
            name="urn:mace:dir:attribute-def:norEduPersonNIN" />

  <resolver:AttributeEncoder xsi:type="SAML2String"
            xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
            name="urn:oid:1.3.6.1.4.1.2428.90.1.5" friendlyName="norEduPersonNIN" />

  <Script>
    <![CDATA[
      // Script to handle ten position wide national identity numbers
      // The script is supplied by SU

      // import needed packages
      importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
      importPackage(Packages.org.slf4j);

      // Setup a logger
      logger = LoggerFactory.getLogger("se.su.it.shibboleth.idp.ninDecorator");

      //try the{
 attribute which is to be populated
  // Get a ref norEduPersonNINto =the new BasicAttribute("norEduPersonNIN");

      try {NIN received from ldap
        // GetChange amittPersonnummer ref to theyour SSNNIN receivedattribute from ldapname
        ssnnin=socialSecurityNumbermittPersonnummer.getValues().get(0);
        logger.debug("Doing decoration of ssnNIN " + ssn nin);

        // the attribute which is to be populated
        norEduPersonNIN = new BasicAttribute("norEduPersonNIN");


        // Only do decoration of SSNsNINs which are on the format YYMMDDxxxx      
        if(ssnnin.length() == 10) {
          // Create the two alternative return strings we have to choose between
          pnr19 = "19" + ssnnin;
          pnr20 = "20" + ssnnin;

          // Extract year/month/day from the SSNNIN string
          m_y = ssnnin.substring(0,2);
          m_m = ssnnin.substring(2,4);
          m_d = ssnnin.substring(4,6);

          // Create a Date object for the 20xx case
          datePnr = new Date("20" + m_y, m_m-1, m_d);

          // Create a Date object for the current date
          dateCur = new Date();

          // Some debug logging
          logger.debug("pnr19: " + pnr19);
          logger.debug("pnr20: " + pnr20);
          logger.debug("datePnr: " + datePnr);
          logger.debug("dateCur: " + dateCur);

          // Verify the value of datePnr before proceeding
          if(isNaN(datePnr.valueOf())) {
            throw("Failed to parse the SSNNIN into a Date object");
          }

          // If the 20xx case is in the future we assume 19xx for the NIN attribute
          if(datePnr>dateCur) {
            logger.info("Returning 19xx pnr since the 20xx case is in the future");
            norEduPersonNIN.getValues().add(pnr19);
          } else {
            logger.info("Returning 20xx pnr since it is closer to current date than the 19xx one.");
            norEduPersonNIN.getValues().add(pnr20);
          }
        } else if(ssnnin.length() == 12) {
          logger.info("Returning pnr as-is since it contains 12 chars");
          norEduPersonNIN.getValues().add(ssnnin);
        } else {
          throw("Not setting any norEduPersonNIN since it is bogus (length=" + ssnnin.length() + "): " + ssnnin);
        }
      }
      catch(err) {
        logger.error("Not setting any norEduPersonNIN due to exception: " + err);
      }
    ]]>
  </Script> 
</resolver:AttributeDefinition>