/*
* Aipo is a groupware program developed by TOWN, Inc.
* Copyright (C) 2004-2015 TOWN, Inc.
* http://www.aipo.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.aimluck.eip.modules.actions.account;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import org.apache.jetspeed.portal.portlets.VelocityPortlet;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import com.aimluck.commons.field.ALStringField;
import com.aimluck.eip.account.CellAccountEasyLoginFormData;
import com.aimluck.eip.common.ALEipConstants;
import com.aimluck.eip.common.ALEipUser;
import com.aimluck.eip.modules.actions.common.ALBaseAction;
import com.aimluck.eip.util.ALCellularUtils;
import com.aimluck.eip.util.ALEipUtils;
/**
* 個人設定用-ユーザ情報用アクションクラス
*
*/
public class CellAccountEditAction extends ALBaseAction {
/** logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(CellAccountEditAction.class.getName());
public static final String MODE_CONFIG = "config";
/**
* @param portlet
* @param context
* @param rundata
* @throws java.lang.Exception
*/
@Override
protected void buildNormalContext(VelocityPortlet portlet, Context context,
RunData rundata) throws Exception {
// if (getMode() == null) {
// doAccountedit_configlogin(rundata, context);
// }
}
/**
* 最大化表示の際の処理を記述します。 <BR>
*
* @param portlet
* @param context
* @param rundata
*/
@Override
protected void buildMaximizedContext(VelocityPortlet portlet,
Context context, RunData rundata) {
// MODEを取得
String mode = rundata.getParameters().getString(ALEipConstants.MODE);
try {
String username = null;
String key = rundata.getParameters().getString("key", "").trim();
if (key.contains("_")) {
username = key.substring(0, key.lastIndexOf("_"));
String base64value = key.substring(key.lastIndexOf("_") + 1);
// 入力されたユーザ名を検証する.
ALStringField tmpname = new ALStringField();
tmpname.setTrim(true);
tmpname.setNotNull(true);
tmpname.setCharacterType(ALStringField.TYPE_ASCII);
tmpname.limitMaxLength(16);
tmpname.setValue(username);
boolean valid = tmpname.validate(new ArrayList<String>());
int length = username.length();
for (int i1 = 0; i1 < length; i1++) {
if (isSymbol(username.charAt(i1))) {
// 使用されているのが妥当な記号であるかの確認
if (!(username.charAt(i1) == "_".charAt(0)
|| username.charAt(i1) == "-".charAt(0) || username.charAt(i1) == "."
.charAt(0))) {
valid = false;
break;
}
}
}
if (valid) {
ALEipUser eipuser = ALEipUtils.getALEipUser(username);
if (eipuser != null) {
if (!(ALCellularUtils.getCheckValueForCellLogin(username, eipuser
.getUserId()
.toString())).equals(base64value)) {
username = "";
}
} else {
username = "";
}
} else {
username = "";
}
}
context.put("username", username);
context.put("key", key);
if (MODE_CONFIG.equals(mode)) {
doAccountedit_configlogin(rundata, context);
} else if (ALEipConstants.MODE_INSERT.equals(mode)) {
doAccountedit_insert(rundata, context);
}
if (getMode() == null) {
doAccountedit_configlogin(rundata, context);
}
} catch (Exception ex) {
logger.error("CellAccountEditAction.buildMaximizedContext", ex);
}
}
/**
* 簡易ログイン設定用のフォームを表示する. <BR>
*
* @param rundata
* @param context
* @throws Exception
*/
public void doAccountedit_configlogin(RunData rundata, Context context)
throws Exception {
CellAccountEasyLoginFormData formData = new CellAccountEasyLoginFormData();
formData.initField();
formData.doViewForm(this, rundata, context);
setTemplate(rundata, "accountlogin-config");
}
/**
* 簡易ログイン用に携帯電話の固有番号を登録する. <BR>
*
* @param rundata
* @param context
* @throws Exception
*/
public void doAccountedit_insert(RunData rundata, Context context)
throws Exception {
CellAccountEasyLoginFormData formData = new CellAccountEasyLoginFormData();
formData.initField();
setTemplate(rundata, "accountlogin-config");
if (formData.doInsert(this, rundata, context)) {
doAccountedit_configlogin(rundata, context);
} else {
setTemplate(rundata, "accountlogin-config");
}
}
/**
* 簡易ログイン用に携帯電話の固有番号を削除する. <BR>
*
* @param rundata
* @param context
* @throws Exception
*/
public void doAccountedit_delete(RunData rundata, Context context)
throws Exception {
CellAccountEasyLoginFormData formData = new CellAccountEasyLoginFormData();
formData.initField();
setTemplate(rundata, "accountlogin-config");
if (formData.doDelete(this, rundata, context)) {
doAccountedit_configlogin(rundata, context);
} else {
setTemplate(rundata, "accountlogin-config");
}
}
/**
*
* 指定したchar型文字が記号であるかを判断します。
*
* @param ch
* @return
*/
protected boolean isSymbol(char ch) {
byte[] chars;
try {
chars = (Character.valueOf(ch).toString()).getBytes("shift_jis");
} catch (UnsupportedEncodingException ex) {
return false;
}
if (chars == null
|| chars.length == 2
|| Character.isDigit(ch)
|| Character.isLetter(ch)) {
return false;
} else {
return true;
}
}
}