Line feed delimited multi-value attribute

Bryan Wooten bryan.wooten at utah.edu
Tue Sep 6 19:18:35 EDT 2016


Ok, let's review what I am trying to do.

I have a existing OpenDJ multi value attribute we call uuenroll.

It looks like this when I cut and paste from Softterra:

uuenrl: Fall 2016$1181$CS$3500$001$LEC$Software Practice$4$1
uuenrl: Fall 2016$1722$CS$3500$002$DIS$Software Practice$0$2
uuenrl: Fall 2016$1182$CS$3810$001$LEC$Computer Organization$4$3
uuenrl: Fall 2016$9694$GERM$2010$001$LEC$Intrm German I$4$4

They want this:

FA16:CS:3500:001

We send this:


12:05:19.978 - INFO [edu.internet2.middleware.shibboleth.resolver.Script.eduCourseOffering:-1] - res[0]: Fall2016
12:05:19.979 - INFO [edu.internet2.middleware.shibboleth.resolver.Script.eduCourseOffering:-1] - i=3
12:05:19.979 - INFO [edu.internet2.middleware.shibboleth.resolver.Script.eduCourseOffering:-1] - offering: Fa16:CS:3810:001
12:05:19.979 - INFO [edu.internet2.middleware.shibboleth.resolver.Script.eduCourseOffering:-1] - eduCourseOfferingTemp3: [Fa16:GERM:2010:001, Fa16:CS:3500:002, Fa16:CS:3500:001, Fa16:CS:3810:001]
12:05:19.979 - INFO [edu.internet2.middleware.shibboleth.resolver.Script.eduCourseOffering:-1] - eduCourseOffering: [Fa16:GERM:2010:001, Fa16:CS:3500:002, Fa16:CS:3500:001, Fa16:CS:3810:001]
12:05:19.993 - INFO [Shibboleth-Audit:1028] - 20160906T180519Z|urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect|_f567341c2a9b7fbf4196f7cdcd5dc9c8|https://www.webassign.net/Shibboleth2|urn:mace:shibboleth:2.0:profiles:saml2:sso|urn:mace:incommon:utah.edu|urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST|_41302433972df044db2fa1000cbe5240|u0881917|urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport|eduPersonAffiliation,surname,eduPersonScopedAffiliation,uuenrl,transientId,eduCourseOffering,email,eduPersonPrincipalName,givenName,commonName,displayName,|_c65591acc53c6dabc4161813b5a3edad||


I wrote this Script:


<!-- Webassign Script to FOrmat Educourse Offering -->
 <resolver:AttributeDefinition xsi:type="Script"  xmlns="urn:mace:shibboleth:2.0:resolver:ad" id="eduCourseOffering" >
        <resolver:Dependency ref="uuenrl" />
        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="uuenrl" />
        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.6.1.1"  nameFormat="urn:oasis:names:tc:SA
ML:2.0:attrname-format:uri" friendlyName="eduCourseOffering" />
<Script><![CDATA[
          importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
          importPackage(Packages.org.slf4j);
          logger = LoggerFactory.getLogger("edu.internet2.middleware.shibboleth.resolver.Script.eduCourseOffering");
          logger.info("in eduCourseOffering Script");
          eduCourseOffering = new BasicAttribute("eduCourseOffering");
          eduCourseOfferingTemp = new BasicAttribute("eduCourseOfferingTemp");
          eduCourseOfferingTemp2 = new BasicAttribute("eduCourseOfferingTemp2");
          eduCourseOfferingTemp3 = new BasicAttribute("eduCourseOfferingTemp3");
          eduCourseOfferingTemp.getValues().add(uuenrl.getValues());
          var courses = "";
          var courses2 = "";
          courses2 = eduCourseOfferingTemp.getValues().toString().replace(' ','');
          eduCourseOfferingTemp2.getValues().add(courses2);
          courses = eduCourseOfferingTemp2.getValues().toString().replace('$',' ');
          logger.info("courses: " + courses);

          var cSplit = [];
          cSplit = courses.split(",");
          logger.info("cSplit[0]: "+cSplit[0]);
          var i;
          i = 0;
          var res=[];
          var offering ="";
          var year = ""
          len = 0;
          logger.info("eduCourseOfferings before loop: " + eduCourseOffering.getValues());
          for(;cSplit[i];){
             res = cSplit[i].split(" ");
             logger.info("res[0]: "+res[0]);
             logger.info("i="+i);
             if (i==0){
                var len=res[0].length();
                logger.info("len="+len);
                year = res[0].substring(len-2,len);
                offering = res[0].substring(3,5)+year+':'+res[2]+':'+res[3]+':'+res[4];
             }
             else{
                 var len=res[0].length();
                year = res[0].substring(len-2,len);
                offering = res[0].substring(0,2)+year+':'+res[2]+':'+res[3]+':'+res[4];
             }
             offering.replace("\\]",'');
             offering.replace("\\[",'');
             logger.info("offering: "+offering);
             eduCourseOfferingTemp3.getValues().add(offering);
             logger.info("eduCourseOfferingTemp3: " + eduCourseOfferingTemp3.getValues());
             i++;
          }
          courses = eduCourseOfferingTemp3.getValues().toString().replaceAll("[\\[\\]]+","");
          eduCourseOffering.getValues().add(courses);
          logger.info("eduCourseOffering: " + eduCourseOffering.getValues());

          ]]></Script>

 </resolver:AttributeDefinition>



That is a lot of detail.

Bottom line is this line:


eduCourseOffering.getValues().add(courses);

How can I change it to MAKE the add do Line delimitation?

Yeah is it crap code, sorry first time doing a Script. Still trying to learn.

Bryan Wooten
Tel: (801)585-9323
Email: bryan.wooten at utah.edu





-----Original Message-----
From: users [mailto:users-bounces at shibboleth.net] On Behalf Of Cantor, Scott
Sent: Tuesday, September 6, 2016 4:48 PM
To: users at shibboleth.net
Subject: [Ext] Re: Line feed delimited multi-value attribute

On 9/6/16 5:41 PM, Bryan Wooten wrote:
> 
> As I add courses they become comma delimited (reasonable) but the 
> vendor wants "line delimited" courses. Vendor is Webassign.

I think there's some confusion here over what you're doing and they're doing. There are no commas or linefeeds. Multiple values are just that, separate. You are NOT making them comma delimited. I don't know what you're seeing that makes you think that, but I would be surprised. Your logs should show it clearly either way.

Any "delimiter" is something they're inferring from their software, I think, and for the record, we use eduPersonEntitlement to carry that same value set to them, and I pass them in the normal way, separate values in SAML. They handle it fine.

-- Scott

--
To unsubscribe from this list send an email to users-unsubscribe at shibboleth.net


More information about the users mailing list