1 /*******************************************************************************
2 * Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
3 *******************************************************************************/
4 package com.att.authz.gui.pages;
6 import java.io.IOException;
7 import java.net.ConnectException;
8 import java.text.ParseException;
10 import com.att.authz.env.AuthzTrans;
11 import com.att.authz.gui.AuthGUI;
12 import com.att.authz.gui.BreadCrumbs;
13 import com.att.authz.gui.NamedCode;
14 import com.att.authz.gui.Page;
15 import com.att.cadi.CadiException;
16 import com.att.cadi.client.Future;
17 import com.att.cadi.client.Rcli;
18 import com.att.cadi.client.Retryable;
19 import com.att.inno.env.APIException;
20 import com.att.inno.env.Env;
21 import com.att.inno.env.Slot;
22 import com.att.inno.env.TimeTaken;
23 import com.att.inno.env.util.Chrono;
24 import com.att.xgen.Cache;
25 import com.att.xgen.DynamicCode;
26 import com.att.xgen.html.HTMLGen;
28 import aaf.v2_0.CredRequest;
30 public class PassChangeAction extends Page {
31 public PassChangeAction(final AuthGUI gui, final Page ... breadcrumbs) throws APIException, IOException {
32 super(gui.env,"PassChange",PassChangeForm.HREF, PassChangeForm.fields,
33 new BreadCrumbs(breadcrumbs),
34 new NamedCode(true,"content") {
35 final Slot sID = gui.env.slot(PassChangeForm.NAME+'.'+PassChangeForm.fields[0]);
36 final Slot sCurrPass = gui.env.slot(PassChangeForm.NAME+'.'+PassChangeForm.fields[1]);
37 final Slot sPassword = gui.env.slot(PassChangeForm.NAME+'.'+PassChangeForm.fields[2]);
38 final Slot sPassword2 = gui.env.slot(PassChangeForm.NAME+'.'+PassChangeForm.fields[3]);
39 final Slot startDate = gui.env.slot(PassChangeForm.NAME+'.'+PassChangeForm.fields[4]);
42 public void code(Cache<HTMLGen> cache, HTMLGen hgen) throws APIException, IOException {
43 cache.dynamic(hgen, new DynamicCode<HTMLGen,AuthGUI, AuthzTrans>() {
45 public void code(final AuthGUI gui, final AuthzTrans trans,Cache<HTMLGen> cache, HTMLGen hgen) throws APIException, IOException {
46 String id = trans.get(sID,null);
47 String currPass = trans.get(sCurrPass,null);
48 String password = trans.get(sPassword,null);
49 String password2 = trans.get(sPassword2,null);
54 if (id==null || id.indexOf('@')<=0) {
55 hgen.p("Data Entry Failure: Please enter a valid ID, including domain.");
56 } else if(password == null || password2 == null || currPass == null) {
57 hgen.p("Data Entry Failure: Both Password Fields need entries.");
58 } else if(!password.equals(password2)) {
59 hgen.p("Data Entry Failure: Passwords do not match.");
60 } else { // everything else is checked by Server
61 final CredRequest cred = new CredRequest();
63 cred.setPassword(currPass);
65 fail = gui.clientAsUser(trans.getUserPrincipal(), new Retryable<Boolean>() {
67 public Boolean code(Rcli<?> client)throws CadiException, ConnectException, APIException {
70 TimeTaken tt = trans.start("Check Current Password",Env.REMOTE);
72 Future<CredRequest> fcr = client.create( // Note: Need "Post", because of hiding password in SSL Data
73 "/authn/validate",gui.credReqDF,cred);
76 if(fcr.code() == 200) {
77 hgen.p("Current Password validated");
80 hgen.p(String.format("Invalid Current Password: %d %s",fcr.code(),fcr.body()));
87 tt = trans.start("AAF Change Password",Env.REMOTE);
89 // Change over Cred to reset mode
90 cred.setPassword(password);
91 String start = trans.get(startDate, null);
94 cred.setStart(Chrono.timeStamp(Chrono.dateOnlyFmt.parse(start)));
95 } catch (ParseException e) {
96 throw new CadiException(e);
100 Future<CredRequest> fcr = client.create(
108 hgen.p("New Password has been added.");
111 gui.writeError(trans, fcr, hgen);
121 } catch (Exception e) {
122 hgen.p("Unknown Error");
129 hgen.incr("a",true,"href="+PassChangeForm.HREF+"?id="+id).text("Try again").end();
131 hgen.incr("a",true,"href="+Home.HREF).text("Home").end();