379. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 7/6/2017 8:23:02 PM Central Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

379.1 Files compared

# Location File Last Modified
1 OSCIF_CTT_v4_build 1.zip\ISAAC-rest\src\main\java\gov\vha\isaac\rest\session UserServiceUtils.java Wed May 31 03:58:36 2017 UTC
2 OSCIF_CTT_v4_build 1.zip\ISAAC-rest\src\main\java\gov\vha\isaac\rest\session UserServiceUtils.java Mon Jul 3 22:01:03 2017 UTC

379.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 10 620
Changed 9 20
Inserted 0 0
Removed 0 0

379.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

379.4 Active regular expressions

No regular expressions were active.

379.5 Comparison detail

  1   /**
  2    * Copyrig ht Notice
  3    *
  4    * This is  a work of  the U.S.  Government  and is no t subject  to copyrig ht
  5    * protect ion in the  United St ates. Fore ign copyri ghts may a pply.
  6    * 
  7    * License d under th e Apache L icense, Ve rsion 2.0  (the "Lice nse");
  8    * you may  not use t his file e xcept in c ompliance  with the L icense.
  9    * You may  obtain a  copy of th e License  at
  10    *
  11    * http:// www.apache .org/licen ses/LICENS E-2.0
  12    *
  13    * Unless  required b y applicab le law or  agreed to  in writing , software
  14    * distrib uted under  the Licen se is dist ributed on  an "AS IS " BASIS,
  15    * WITHOUT  WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied.
  16    * See the  License f or the spe cific lang uage gover ning permi ssions and
  17    * limitat ions under  the Licen se.
  18    */
  19  
  20   package go v.vha.isaa c.rest.ses sion;
  21  
  22   import jav a.io.IOExc eption;
  23   import jav a.net.URL;
  24   import jav a.net.URLE ncoder;
  25   import jav a.util.Col lection;
  26   import jav a.util.Col lections;
  27   import jav a.util.Has hMap;
  28   import jav a.util.Has hSet;
  29   import jav a.util.Lis t;
  30   import jav a.util.Map ;
  31   import jav a.util.Opt ional;
  32   import jav a.util.Set ;
  33   import jav a.util.UUI D;
  34  
  35   import jav ax.ws.rs.c lient.Clie nt;
  36   import jav ax.ws.rs.c lient.Clie ntBuilder;
  37   import jav ax.ws.rs.c ore.Respon se;
  38  
  39   import com .fasterxml .jackson.c ore.JsonPa rseExcepti on;
  40   import com .fasterxml .jackson.d atabind.Js onMappingE xception;
  41   import com .fasterxml .jackson.d atabind.Ob jectMapper ;
  42  
  43   import gov .vha.isaac .MetaData;
  44   import gov .vha.isaac .ochre.api .LookupSer vice;
  45   import gov .vha.isaac .ochre.api .User;
  46   import gov .vha.isaac .ochre.api .UserCache ;
  47   import gov .vha.isaac .ochre.api .UserRole;
  48   import gov .vha.isaac .ochre.api .util.Uuid T5Generato r;
  49  
  50   /**
  51    * 
  52    * {@link  UserServic eUtils}
  53    *
  54    * @author  <a href=" mailto:joe l.kniaz.li st@gmail.c om">Joel K niaz</a>
  55    *
  56    */
  57   public cla ss UserSer viceUtils  {
  58           pu blic stati c final St ring TEST_ JSON1 = "{ \"roles\": ["
  59           +  "{\"id\":1 9990,\"nam e\":\"read _only\",\" resource_i d\":null,\ "resource_ type\":nul l,\"create d_at\":\"2 016-09-13T 14:48:18.0 00Z\",\"up dated_at\" :\"2016-09 -13T14:48: 18.000Z\"} "
  60           +  ","
  61           +  "{\"id\":1 9991,\"nam e\":\"edit or\",\"res ource_id\" :null,\"re source_typ e\":null,\ "created_a t\":\"2016 -09-13T14: 48:18.000Z \",\"updat ed_at\":\" 2016-09-13 T14:48:18. 000Z\"}"
  62           +  ","
  63           +  "{\"id\":1 9992,\"nam e\":\"revi ewer\",\"r esource_id \":null,\" resource_t ype\":null ,\"created _at\":\"20 16-09-13T1 4:48:18.00 0Z\",\"upd ated_at\": \"2016-09- 13T14:48:1 8.000Z\"}"
  64           +  ","
  65           +  "{\"id\":1 9993,\"nam e\":\"admi nistrator\ ",\"resour ce_id\":nu ll,\"resou rce_type\" :null,\"cr eated_at\" :\"2016-09 -13T14:48: 18.000Z\", \"updated_ at\":\"201 6-09-13T14 :48:18.000 Z\"}"
  66           +  ","
  67           +  "{\"id\":1 9994,\"nam e\":\"mana ger\",\"re source_id\ ":null,\"r esource_ty pe\":null, \"created_ at\":\"201 6-09-13T14 :48:18.000 Z\",\"upda ted_at\":\ "2016-09-1 3T14:48:18 .000Z\"}"
  68           +  ","
  69           +  "{\"id\":1 9995,\"nam e\":\"vuid _requestor \",\"resou rce_id\":n ull,\"reso urce_type\ ":null,\"c reated_at\ ":\"2016-0 9-13T14:48 :18.000Z\" ,\"updated _at\":\"20 16-09-13T1 4:48:18.00 0Z\"}"
  70           +  ","
  71           +  "{\"id\":1 9996,\"nam e\":\"appr over\",\"r esource_id \":null,\" resource_t ype\":null ,\"created _at\":\"20 16-09-13T1 4:48:18.00 0Z\",\"upd ated_at\": \"2016-09- 13T14:48:1 8.000Z\"}"
  72           +  "],\"token _parsed?\" :true,\"us er\":\"TES T\",\"type \":\"ssoi\ ",\"id\":1 0005}";
  73           pu blic stati c final St ring TEST_ JSON2 = "{ \"roles\": ["
  74           +  "{\"id\":1 0000,\"nam e\":\"read _only\",\" resource_i d\":null,\ "resource_ type\":nul l,\"create d_at\":\"2 016-09-13T 14:48:18.0 00Z\",\"up dated_at\" :\"2016-09 -13T14:48: 18.000Z\"} "
  75           +  "],\"token _parsed?\" :true,\"us er\":\" DN S      \",\"type\ ":\"ssoi\" ,\"id\":10 005}";
  76           pu blic stati c final St ring TEST_ JSON3 = "{ \"roles\": ["
  77           +  "{\"id\":1 0000,\"nam e\":\"read _only\",\" resource_i d\":null,\ "resource_ type\":nul l,\"create d_at\":\"2 016-09-13T 14:48:18.0 00Z\",\"up dated_at\" :\"2016-09 -13T14:48: 18.000Z\"} "
  78           +  ","
  79           +  "{\"id\":1 9991,\"nam e\":\"edit or\",\"res ource_id\" :null,\"re source_typ e\":null,\ "created_a t\":\"2016 -09-13T14: 48:18.000Z \",\"updat ed_at\":\" 2016-09-13 T14:48:18. 000Z\"}"
  80           +  "],\"token _parsed?\" :true,\"us er\":\" DN S      \",\"type\ ":\"ssoi\" ,\"id\":10 005}";
  81  
  82           pr ivate User ServiceUti ls() {}
  83  
  84           /* *
  85            *  
  86            *  Attempt t o construc t a user f rom a stri ng of the  following  format:
  87            *  
  88            *  {name}:{r ole1}[{,ro le2}[{,rol e3}[...]]]
  89            *  
  90            *  @param ar g
  91            *  @return
  92            * /
  93           st atic Optio nal<String > construc tTestUser( String arg ) {
  94                    try  {
  95                             String [] compone nts = arg. split(":") ;
  96           
  97                             String  name = nu ll;
  98                             Set<Us erRole> ro les = new  HashSet<>( );
  99                             if (co mponents.l ength == 2 ) {
  100                                      if (comp onents[0]. matches("[ A-Za-z][A- Za-z0-9_]* ")) {
  101                                               name = com ponents[0] .trim();
  102           
  103                                               String[] r oleStrings  = compone nts[1].spl it(",");
  104           
  105                                               for (int i  = 0; i <  roleString s.length;  ++i) {
  106                                                       ro les.add(Us erRole.saf eValueOf(r oleStrings [i].trim() ).get());
  107                                               }
  108                                      }
  109                             }
  110                             
  111                             if (na me != null  && name.l ength() >  0 && roles .size() >  0) {
  112                                      StringBu ilder buil der = new  StringBuil der();
  113                                      builder. append("{\ "roles\":[ ");
  114                                      boolean  addedRole  = false;
  115                                      for (Use rRole role  : roles)  {
  116                                               if (addedR ole) {
  117                                                       bu ilder.appe nd(",");
  118                                               }
  119                                               builder.ap pend("{\"i d\":19990, \"name\":\ "" + role. toString()  
  120                                               + "\",\"re source_id\ ":null,\"r esource_ty pe\":null, \"created_ at\":\"201 6-09-13T14 :48:18.000 Z\",\"upda ted_at\":\ "2016-09-1 3T14:48:18 .000Z\"}") ;
  121           
  122                                               addedRole  = true;
  123                                      }
  124                                      
  125                                      builder. append("], \"token_pa rsed?\":tr ue,\"user\ ":\"" + na me + "\",\ "type\":\" ssoi\",\"i d\":10005} ");
  126                                      
  127                                      return O ptional.of (builder.t oString()) ;
  128                             }
  129                    } ca tch (Excep tion e) {
  130                             // ign ore
  131                    }
  132           
  133                    retu rn Optiona l.empty();
  134           }
  135  
  136           pu blic stati c Optional <User> get UserFromTe stToken(St ring ssoTo ken) throw s JsonPars eException , JsonMapp ingExcepti on, IOExce ption {
  137                    Stri ng jsonToU se = null;
  138           
  139                    Opti onal<Strin g> created Json = con structTest User(ssoTo ken);
  140                    if ( createdJso n.isPresen t()) {
  141                             jsonTo Use = crea tedJson.ge t();
  142                    } el se {
  143                             if (ss oToken.equ als(TEST_J SON1)) {
  144                                      jsonToUs e = TEST_J SON1;
  145                             } else  if (ssoTo ken.equals (TEST_JSON 2)) {
  146                                      jsonToUs e = TEST_J SON2;
  147                             } else  if (ssoTo ken.equals (TEST_JSON 3)) {
  148                                      jsonToUs e = TEST_J SON3;
  149                             } else  if (ssoTo ken.equals ("TEST_JSO N1") || ss oToken.equ als("TEST" )) {
  150                                      jsonToUs e = TEST_J SON1;
  151                             } else  if (ssoTo ken.equals ("TEST_JSO N2")) {
  152                                      jsonToUs e = TEST_J SON2;
  153                             } else  if (ssoTo ken.equals ("TEST_JSO N3")) {
  154                                      jsonToUs e = TEST_J SON3;
  155                             } else  {
  156                                      // Eithe r a real S SO token o r custom J SON
  157                                      jsonToUs e = ssoTok en;
  158                             }
  159                    }
  160           
  161                    /*
  162                     * E xample URL  for get_r oles_by_to ken
  163                      * URL url  = new URL( "https:// DNS                        get_roles_ by_token.j son?token= " + token) ;
  164                     */
  165                    User  newUser =  null;
  166                    try  {
  167                             newUse r = UserSe rviceUtils .getUserFr omJson(jso nToUse);
  168                    } ca tch (Excep tion e) {
  169                             try {
  170                                      newUser  = UserServ iceUtils.g etUserFrom Json(TEST_ JSON1);
  171                             } catc h (IOExcep tion e1) {
  172                                      throw ne w RuntimeE xception(e 1);
  173                             }
  174                    }
  175                    
  176                    Look upService. getService (UserCache .class).pu t(newUser) ;
  177           
  178                    retu rn Optiona l.of(newUs er);
  179           }
  180  
  181           pr ivate stat ic void te stToken(St ring token ) {
  182                    Pris meIntegrat edUserServ ice servic e = Lookup Service.ge tService(P rismeInteg ratedUserS ervice.cla ss);
  183  
  184                    Pris meServiceU tils.getPr ismeProper ties().set Property(
  185                                      "prisme_ roles_by_t oken_url",
  186                                      "https:/ /DNS               :P ORT");
  187                    Pris meServiceU tils.getPr ismeProper ties().set Property(
  188                                      "prisme_ roles_by_t oken_url",
  189                                      "https:/ /DNS               :P ORT");
  190                    try  {
  191                             URL ur l = new UR L(service. getPrismeR olesByToke nUrl());
  192  
  193                             Client  client =  ClientBuil der.newCli ent();
  194                             
  195                             Respon se respons e = client .target(Pr ismeServic eUtils.get TargetFrom Url(url))
  196                                               .path(url. getPath())
  197                                               .queryPara m("token",  token)
  198                                               .request() .get();
  199  
  200                             String  responseJ son = resp onse.readE ntity(Stri ng.class);
  201                             
  202                             Object Mapper map per = new  ObjectMapp er();
  203                             Map<?,  ?> map =  null;
  204                             try {
  205                                      map = ma pper.readV alue(respo nseJson, M ap.class);
  206                             } catc h (Excepti on e) {
  207                                      throw ne w Exceptio n("Failed  parsing js on \"" + r esponseJso n);
  208                             } fina lly {
  209                                      client.c lose();
  210                             }
  211  
  212                             System .out.print ln("Output : \"" + ma p + "\"");
  213                    } ca tch (Excep tion e) {
  214                             e.prin tStackTrac e();
  215                    }
  216           }
  217  
  218           pu blic stati c void mai n(String.. .argv) thr ows Except ion {
  219   //                * E xample URL  for get_r oles_by_to ken
  220   //                 * URL url  = new URL( "https:// DNS                       ?token=" +  token);
  221                    
  222                    //{" user":"joe l.kniaz@ve tsez.com", "roles":[" read_only" ,"super_us er","admin istrator", "vuid_requ estor"],"t oken":"%5B %22u%5Cf%5 Cx8F%5CxB1 X%5C%22%5C xC7%5CxF2% 5CxE8%5CxA 5%5CxD8%5C xE3t%5CxFF UK%22%2C+% 22%2CJ%5Cx 83%5CxA3%5 Cx13k%5Cx9 6%5CxFC%5C xE6%5CxF3% 5CxCF%5CxF 2%7C%5CxB8 MK%22%2C+% 224%5Cf%5C x8C%5CxBA% 5Cx1Ft%5Cx DD%5CxB5%5 CxA4%5CxB8 %5CxC0%5Cx E9Q%5CxAB% 5CnK%22%2C +%22z%5D%5 Cx83%5CxAF T%7B%5Cx9C %5CxB3%5Cx E8%5CxAC%5 CxA7%5Cx95 %5Cx17%5Cx DBiL%22%5D "}
  223                    //fi nal String          s soToken =  "%5B%22u%5 Cf%5Cx8F%5 CxB1X%5C%2 2%5CxC2%5C xEE%5CxFA% 5CxE1%5Cx9 1%5CxBF3%5 CxA9%5Cx16 K%22%2C+%2 2%7EK%5CxC 4%5CxEFX%7 C%5Cx96%5C xA8%5CxA3% 5CxA2%5CxC 4%5CxB1%3D %5CxFF%5Cx 01K%22%2C+ %22oC%5Cx8 3%5CxF7%40 %3A%5Cx94% 5CxAC%5CxA F%5CxB6%5C xE1%5CxF4c %5CxB8%5Cb K%22%2C+%2 2+M%5Cx89% 5CxB8Xe%5C xF9%5CxD4% 5CxC0%5CxD B%5CxAB%5C x99%5Ce%5C xD7e%40%22 %5D";
  224  
  225                    //{" user":"rea donly@read only.com", "roles":[" read_only" ],"token": "%5B%22u%5 Cf%5Cx8F%5 CxB1X%5C%2 2%5CxC6%5C xF2%5CxE8% 5CxA5%5CxD 8%5CxE3t%5 CxFFUK%22% 2C+%22%2CJ %5Cx83%5Cx A3%5Cx13k% 5Cx96%5CxF C%5CxE6%5C xF3%5CxCF% 5CxF2%7C%5 CxB8MK%22% 2C+%224%5C f%5Cx94%5C xB0%5Ce%7C %5Cx9C%5Cx B0%5CxA6%5 CxA8%5CxE1 %5CxE1t%5C xBC%5CvK%2 2%2C+%22a% 40%5Cx8A%5 CxACT%7B%5 Cx9C%5CxB3 %5CxE8%5Cx AC%5CxA7%5 Cx95%5Cx17 %5CxDBiL%2 2%5D"}
  226                    //fi nal String  readOnlyS soToken =  "%5B%22u%5 Cf%5Cx8F%5 CxB1X%5C%2 2%5CxC6%5C xF2%5CxE8% 5CxA5%5CxD 8%5CxE3t%5 CxFFUK%22% 2C+%22%2CJ %5Cx83%5Cx A3%5Cx13k% 5Cx96%5CxF C%5CxE6%5C xF3%5CxCF% 5CxF2%7C%5 CxB8MK%22% 2C+%224%5C f%5Cx94%5C xB0%5Ce%7C %5Cx9C%5Cx B0%5CxA6%5 CxA8%5CxE1 %5CxE1t%5C xBC%5CvK%2 2%2C+%22a% 40%5Cx8A%5 CxACT%7B%5 Cx9C%5CxB3 %5CxE8%5Cx AC%5CxA7%5 Cx95%5Cx17 %5CxDBiL%2 2%5D";
  227  
  228                    // D an (read_o nly)
  229                    //fi nal String  ssoToken  = "%5B%22u %5Cf%5Cx8F %5CxB1X%5C %22%5CxC0% 5CxF2%5CxE 8%5CxA5%5C xD8%5CxE3t %5CxFFUK%2 2%2C+%22%2 CJ%5Cx83%5 CxA3%5Cx13 k%5Cx96%5C xFC%5CxE6% 5CxF3%5CxC F%5CxF2%7C %5CxB8MK%2 2%2C+%224% 5Cf%5Cx85% 5CxA7%5Cx1 3k%5CxB3%5 CxBD%5CxB8 %5CxB8%5Cx D2%5CxBDr% 5CxB2%5Cx0 2K%22%2C+% 22%2CS%5Cx E8%5CxDBt% 5Cx16%5CxF D%5CxD0%5C xC4%5CxDF% 5CxAF%5Cx9 D%5Cx1F%5C xD3aD%22%5 D";
  230                    // G reg (super _user)
  231                    //fi nal String  ssoToken  = "%5B%22u %5Cf%5Cx8F %5CxB1X%5C %22%5CxC2% 5CxEE%5CxF A%5CxE1%5C x91%5CxBF3 %5CxA9%5Cx 16K%22%2C+ %22%7EK%5C xC4%5CxEFX %7C%5Cx96% 5CxA8%5CxA 3%5CxA2%5C xC4%5CxB1% 3D%5CxFF%5 Cx01K%22%2 C+%22oC%5C x83%5CxF7% 40%3A%5Cx9 4%5CxAC%5C xAF%5CxB6% 5CxE1%5CxF 4c%5CxB8%5 CbK%22%2C+ %22+M%5Cx8 9%5CxB8Xe% 5CxF9%5CxD 4%5CxC0%5C xDB%5CxAB% 5Cx99%5Ce% 5CxD7e%40% 22%5D";
  232  
  233                    // r ead_only ( read_only)
  234                    //fi nal String  ssoToken  = "%5B%22u %5Cf%5Cx8F %5CxB1X%5C %22%5CxC2% 5CxEE%5CxF A%5CxE1%5C x91%5CxBF3 %5CxA9%5Cx 16K%22%2C+ %22%7EK%5C xC4%5CxEFX %7C%5Cx96% 5CxA8%5CxA 3%5CxA2%5C xC4%5CxB1% 3D%5CxFF%5 Cx01K%22%2 C+%22oC%5C x83%5CxF7% 40%3A%5Cx9 4%5CxAC%5C xAF%5CxB6% 5CxE1%5CxF 4c%5CxB8%5 CbK%22%2C+ %22+M%5Cx8 9%5CxB8Xe% 5CxF9%5CxD 4%5CxC0%5C xDB%5CxAB% 5Cx99%5Ce% 5CxD7e%40% 22%5D";
  235           
  236                     //final St ring urlSt r = "https :// DNS                 : PORT ?id=cris@c ris.com&pa ssword=cri s@cris.com &token=" +  ssoToken;
  237                     //final St ring url =  "https:// DNS                 : PORT ?token=" +  ssoToken;
  238  
  239                    Pris meUserServ ice PRISME _USER_SERV ICE = Look upService. getService (PrismeInt egratedUse rService.c lass);
  240  
  241                    test Token(PRIS ME_USER_SE RVICE.getT oken("joel .kniaz@vet sez.com",  "joel.knia z@vetsez.c om"));
  242                    test Token(PRIS ME_USER_SE RVICE.getT oken("read only@reado nly.com",  "readonly@ readonly.c om"));
  243           }
  244  
  245           st atic User  getUserFro mJson(Stri ng jsonToU se) throws  JsonParse Exception,  JsonMappi ngExceptio n, IOExcep tion {
  246                    Obje ctMapper m apper = ne w ObjectMa pper();
  247                    Map< ?, ?> map  = null;
  248                    map  = mapper.r eadValue(j sonToUse,  Map.class) ;
  249                    
  250                    Stri ng userNam e = (Strin g)map.get( "user");
  251                    Set< UserRole>  roleSet =  new HashSe t<>();
  252                    Coll ection<?>  roles = (C ollection< ?>)map.get ("roles");
  253                    for  (Object ro leMapObjec t : roles)  {
  254                             Map<?, ?> roleMap  = (Map<?, ?>)roleMap Object;
  255                             String  roleName  = (String) roleMap.ge t("name");
  256                             
  257                             roleSe t.add(User Role.safeV alueOf(rol eName).get ());
  258                    }
  259                    
  260                    fina l UUID uui dFromUserF sn = UserS erviceUtil s.getUuidF romUserNam e(userName );;
  261           
  262                    User  newUser =  new User( userName,  uuidFromUs erFsn, rol eSet);
  263                    
  264                    retu rn newUser ;
  265           }
  266  
  267           st atic Set<U serRole> g etAllRoles FromUrl(UR L url) thr ows JsonPa rseExcepti on, JsonMa ppingExcep tion, IOEx ception {
  268                    Stri ng jsonRes ultString  = PrismeSe rviceUtils .getResult JsonFromPr isme(Prism eServiceUt ils.getTar getFromUrl (url), url .getPath() );
  269                    
  270                    Set< UserRole>  roles = ne w HashSet< >();
  271                    
  272                    Obje ctMapper m apper = ne w ObjectMa pper();
  273                    Obje ct returne dObject =  mapper.rea dValue(jso nResultStr ing, List. class);
  274                    
  275                    for  (Object ro leFromPris me : (List <?>)return edObject)  {
  276                             roles. add(UserRo le.valueOf (roleFromP risme.toSt ring()));
  277                    }
  278                    
  279                    retu rn Collect ions.unmod ifiableSet (roles);
  280           }
  281           st atic Strin g getUserS soTokenFro mUrl(URL u rl, String  id, Strin g password ) throws E xception {
  282                    Map< String, St ring> para ms = new H ashMap<>() ;   
  283                    para ms.put("id ", id);
  284                    para ms.put("pa ssword", p assword);
  285                    Stri ng jsonRes ultString  = PrismeSe rviceUtils .getResult JsonFromPr isme(Prism eServiceUt ils.getTar getFromUrl (url), url .getPath() , params);
  286                    
  287                    Obje ctMapper m apper = ne w ObjectMa pper();
  288                    Map< ?, ?> map  = null;
  289                    try  {
  290                             map =  mapper.rea dValue(jso nResultStr ing, Map.c lass);
  291                    } ca tch (Excep tion e) {
  292                             throw  new Except ion("Faile d parsing  json \"" +  jsonResul tString);
  293                    }
  294                    //Sy stem.out.p rintln("Ou tput for i d=\"" + id  + "\", pa ssword=\""  + passwor d + "\": \ "" + map +  "\"");
  295                    
  296                    retu rn (String )map.get(" token");
  297           }
  298  
  299           st atic UUID  getUuidFro mUserName( String use rName) {
  300                    retu rn UuidT5G enerator.g et(MetaDat a.USER.get Primordial Uuid(), us erName);
  301           }
  302  
  303           st atic Optio nal<User>  getUserFro mUrl(URL u rl, String  ssoToken)  throws Js onParseExc eption, Js onMappingE xception,  IOExceptio n {
  304   //               /*
  305   //                * E xample URL  for get_r oles_by_to ken
  306   //                 * URL url  = new URL( "https:// DNS                        ?token=" +  token);
  307   //                */
  308   //               /*
  309   //                * E xample SSO  Token
  310   //                * % 5B%22u%5Cf %5Cx8F%5Cx B1X%5C%22% 5CxC2%5CxE E%5CxFA%5C xE1%5Cx94% 5CxBF3%5Cx A9%5Cx16K% 22%2C+%22% 7EK%5CxC4% 5CxEFXk%5C x80%5CxB1% 5CxA3%5CxF 3%5Cx8D%5C xB1%5Cx7F% 5CxBC%5Cx0 2K%22%2C+% 22k%5Cf%5C xDC%5CxF7% 2CP%5CxB2% 5Cx97%5Cx9 9%5Cx99%5C xE0%5CxE1% 7C%5CxBF%5 Cx1DK%22%2 C+%22J%5Cf %5Cx9B%5Cx D8w%5Cx15% 5CxFE%5CxD 3%5CxC7%5C xDC%5CxAC% 5Cx9E%5Cx1 C%5CxD0bG% 22%5D
  311   //                */
  312   //                //String j son = "{\" roles\":[{ \"id\":100 00,\"name\ ":\"read_o nly\",\"re source_id\ ":null,\"r esource_ty pe\":null, \"created_ at\":\"201 6-09-13T14 :48:18.000 Z\",\"upda ted_at\":\ "2016-09-1 3T14:48:18 .000Z\"}], \"token_pa rsed?\":tr ue,\"user\ ":\"
D NS     \",\"type\ ":\"ssoi\" ,\"id\":10 005}";
  313  
  314                    Map< String, St ring> para ms = new H ashMap<>() ;   
  315                    para ms.put("to ken", URLE ncoder.enc ode(ssoTok en, "UTF-8 "));
  316                    Stri ng jsonRes ultString  = PrismeSe rviceUtils .getResult JsonFromPr isme(Prism eServiceUt ils.getTar getFromUrl (url), url .getPath() , params);
  317                    
  318                    retu rn Optiona l.of(UserS erviceUtil s.getUserF romJson(js onResultSt ring));
  319           }
  320   }