AuthorizeAction.java
package sk.iway.iwcm.users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.RandomStringUtils;
import sk.iway.iwcm.Adminlog;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.DBPool;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.SendMail;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.DocTools;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.stripes.RegUserAction;
/**
* Autorizácia registrovaneho navstevnika webu
*
*@Title magma-web
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2002
*@author $Author: jeeff $
*@version $Revision: 1.11 $
*@created Nedeľe, 2002, júl 7
*@modified $Date: 2004/03/08 14:53:59 $
*/
public class AuthorizeAction
{
public static boolean sendInfoEmail(int userId, Identity approveByUser, HttpServletRequest request)
{
return sendInfoEmail(userId, null, approveByUser, request);
}
/**
* Posle email o registracii s menom a heslom
* @param userId
* @param password
* @param request
* @return
*/
public static boolean sendInfoEmail(int userId, String password, Identity approveByUser, HttpServletRequest request)
{
boolean emailSend = false;
try
{
UserDetails uform = UsersDB.getUser(userId);
Logger.debug(AuthorizeAction.class, "sendInfoemail, uform: " + uform.getUserId());
boolean userGenerated = false;
if (approveByUser==null)
{
approveByUser = new Identity();
approveByUser.setLastName(Tools.getServerName(request));
approveByUser.setEmail(uform.getEmail());
userGenerated = true;
Logger.debug(AuthorizeAction.class, "approveByUser: " + approveByUser.getLastName() + " " + approveByUser.getEmail() + " generated: " + userGenerated);
}
// skus ziskat ugd pre dane ppids
UserGroupDetails userGroupDetails = null;
UserGroupDetails userGroupDetails2 = null;
try
{
StringTokenizer st = new StringTokenizer(uform.getUserGroupsIds(), ",");
int ppid;
UserGroupsDB ugDB = UserGroupsDB.getInstance();
while (st.hasMoreTokens() && userGroupDetails==null)
{
ppid = Tools.getIntValue(st.nextToken(), -1);
if (ppid > 0)
{
userGroupDetails2 = ugDB.getUserGroup(ppid);
if (userGroupDetails2!=null && userGroupDetails2.getEmailDocId()>0)
{
//ak ma grupa zadany emailDocId, pouzi
userGroupDetails = userGroupDetails2;
break;
}
}
}
}
catch (Exception e)
{
sk.iway.iwcm.Logger.error(e);
}
if (uform.getEmail().length() > 5 && uform.getEmail().indexOf('@') > 1)
{
String url = Tools.getBaseHref(request);
Prop prop = Prop.getInstance(Constants.getServletContext(), request);
String subject = Constants.getString("approveEmailSubject");
if (Tools.isEmpty(subject))
{
subject = prop.getText("iwcm.users.authorize_action.pristup_do_neverejnej_casti", url);
}
String body = Constants.getString("approveEmailText");
if (Tools.isEmpty(body))
{
body = prop.getText("iwcm.users.authorize_action.vasa_ziadost")+"\n";
body += prop.getText("iwcm.users.authorize_action.pre_pristup_pouzite")+"\n\n";
body += " "+prop.getText("iwcm.users.authorize_action.prihlasovacie_meno")+": " + uform.getLogin() + "\n";
if (!Constants.getBoolean("passwordUseHash"))
{
body += " "+prop.getText("iwcm.users.authorize_action.heslo")+": " + uform.getPassword() + "\n";
}
else if(Tools.isNotEmpty(password))
{
body += " "+prop.getText("iwcm.users.authorize_action.heslo")+": " + password + "\n";
}
body += "\n\n\n" + url;
}
else
{
if (body.startsWith("docid="))
{
int docid = Integer.parseInt(body.substring(6));
if (userGroupDetails == null)
{
userGroupDetails = new UserGroupDetails();
}
if (userGroupDetails.getEmailDocId() < 1)
{
userGroupDetails.setEmailDocId(docid);
}
}
}
//moznost specifikovat odosielatela a text mailu per formular
if(request.getAttribute("approveEmailDocId")!=null)
{
int docid = Integer.parseInt((String)request.getAttribute("approveEmailDocId"),10);
Logger.debug(AuthorizeAction.class, "sendInfoemail, approveEmailDocId: " + docid);
if(docid > 0)
{
if (userGroupDetails!=null) userGroupDetails.setEmailDocId(docid);
userGenerated =true;
}
}
if (userGroupDetails!=null && userGroupDetails.getEmailDocId()>0)
{
try
{
DocDB docDB = DocDB.getInstance(); //servlet.getServletContext(), false, DBPool.getDBName(request));
DocDetails docDetails = docDB.getDoc(userGroupDetails.getEmailDocId());
body = docDetails.getData();
subject = docDetails.getTitle();
if (userGenerated)
{
if(request.getAttribute("approveEmailDocId")!=null)
{
if(Tools.isNotEmpty(docDetails.getFieldA())) approveByUser.setLastName(docDetails.getFieldA());
if(Tools.isNotEmpty(docDetails.getFieldB())) approveByUser.setEmail(docDetails.getFieldB());
}
else
{
approveByUser.setLastName(docDetails.getAuthorName());
approveByUser.setEmail(docDetails.getAuthorEmail());
}
}
}
catch (Exception ex)
{
sk.iway.iwcm.Logger.error(ex);
}
}
if (Tools.isEmpty(body) || body.length()<10) return false;
body = updateEmailText(body, uform, password, request);
if (body.length() > 10)
{
//String body2 = new String(body.getBytes("windows-1250"));
emailSend = SendMail.send(approveByUser.getFullName(), approveByUser.getEmail(), uform.getEmail(), subject, body);
}
if (!emailSend)
{
request.setAttribute("emailSendFail", "true");
}
else
{
request.setAttribute("from", approveByUser.getFullName()+"<"+approveByUser.getEmail()+">");
request.setAttribute("to", uform.getEmail());
request.setAttribute("subject", subject);
body = Tools.replace(body, "\n", "<br>");
request.setAttribute("body", body);
}
}
}
catch (Exception ex)
{
emailSend = false;
sk.iway.iwcm.Logger.error(ex);
}
return(emailSend);
}
/**
* Update codes !LOGGED_USER_xxx with special codes like:
* !LOGGED_USER_PASSWORD!
* !APPROVER_USER_NAME!
* !APPROVER_USER_PHONE!
* !APPROVER_USER_EMAIL!
* in email text
* @param body
* @param uform
* @param password - user password or null
* @param request
* @return
*/
public static String updateEmailText(String body, UserDetails uform, String password, HttpServletRequest request) {
// replacni !BR! za \n
body = Tools.replace(body, "!BR!", "\n");
body = Tools.replace(body, "!LOGIN_NAME!", uform.getLogin());
body = Tools.replace(body, "!LOGGED_USER_LOGIN!", uform.getLogin());
if(!Constants.getBoolean("passwordUseHash"))
{
body = Tools.replace(body, "!PASSWORD!", uform.getPassword());
body = Tools.replace(body, "!LOGGED_USER_PASSWORD!", uform.getPassword());
}
else if(Tools.isNotEmpty(password))
{
body = Tools.replace(body, "!PASSWORD!", password);
body = Tools.replace(body, "!LOGGED_USER_PASSWORD!", password);
}
/* Vyuzite v SIAF - do textu emailu sa doplni tel. cislo "admina" ktory spravil import - kedze adminov je viac, vzdy chcu konkretne t.c. */
UserDetails loggedUser = UsersDB.getCurrentUser(request);
if (loggedUser != null)
{
body = Tools.replace(body, "!TASKED_USER_PHONE!", loggedUser.getPhone());
body = Tools.replace(body, "!TASKED_USER_EMAIL!", loggedUser.getEmailAddress());
body = Tools.replace(body, "!APPROVER_USER_NAME!", loggedUser.getFullName());
body = Tools.replace(body, "!APPROVER_USER_PHONE!", loggedUser.getPhone());
body = Tools.replace(body, "!APPROVER_USER_EMAIL!", loggedUser.getEmailAddress());
}
/* *** */
body = Tools.replace(body, "!TITLE!", uform.getTitle());
body = Tools.replace(body, "!NAME!", uform.getFullName());
body = Tools.replace(body, "!name!", uform.getFullName());
body = Tools.replace(body, "!FIRST_NAME!", uform.getFirstName());
body = Tools.replace(body, "!LAST_NAME!", uform.getLastName());
body = DocTools.updateUserCodes(new Identity(uform), new StringBuilder(body)).toString();
//for safety reason
body = Tools.replace(body, "!PASSWORD!", "*****");
body = Tools.replace(body, "!LOGGED_USER_PASSWORD!", "*****");
//uprav relativne cesty
body = SendMail.createAbsolutePath(body, request);
return body;
}
/**
* autorizovanie pouzivatela + vygenerovanie nahodneho hesla + poslanie emailu
* @param request
* @param user - pouzivatel, ktory autorizuje
* @param user_id - pouzivatel, ktoreho chceme autorizovat
*/
public static void authorize(HttpServletRequest request, Identity user, int user_id)
{
Connection db_conn = null;
PreparedStatement ps = null;
try
{
UserDetails uform = UsersDB.getUser(user_id);
//mame ho ;-0
if (uform.getUserId() == user_id)
{
Adminlog.add(Adminlog.TYPE_USER_AUTHORIZE, "Authorize user :"
+ "id= " + uform.getUserId()
+ " login " + uform.getLogin()
+ " name= " + uform.getFullName(), -1, -1);
String password = null;
if (uform.getFieldE().startsWith(RegUserAction.REQUIRE_AUTHORIZATION_AFTER_VERIFICATION) || Constants.getBoolean("authorizeRegeneratePassword"))
{
//vygeneruje nahodne heslo o dlzke 5 znakov, ak nevyhovuje bezpecnostnej politike, po prihlaseni sa vynuti zmena hesla
password = RandomStringUtils.randomAlphanumeric(5);
//nakolko tu nemam normaenho usera ale len nejaky form, ziskam si ho znova ako trulko
UserDetails u = UsersDB.getUser(user_id);
if (u!=null)
{
u.setPassword(password);
u.setFieldE("");
UsersDB.saveUser(u);
}
}
//posli mu mail
boolean emailSend = sendInfoEmail(uform.getUserId(), password, user, request);
if (emailSend)
{
db_conn = DBPool.getConnection();
ps = db_conn.prepareStatement("UPDATE users SET authorized=? WHERE user_id=?"+UsersDB.getDomainIdSqlWhere(true));
ps.setBoolean(1, true);
ps.setInt(2, uform.getUserId());
ps.execute();
ps.close();
ps = null;
db_conn.close();
db_conn = null;
}
}
}
catch (Exception ex)
{
sk.iway.iwcm.Logger.error(ex);
}
finally
{
try
{
if (ps != null)
ps.close();
if (db_conn != null)
db_conn.close();
}
catch (Exception ex2)
{
}
}
}
}