Coverage Report - jp.co.y_net.amm.service.Logincheck
 
Classes in this File Line Coverage Branch Coverage Complexity
Logincheck
0%
0/65
0%
0/18
0
Logincheck$LogincheckResult
0%
0/1
N/A
0
 
 1  
 package jp.co.y_net.amm.service;
 2  
 
 3  
 import java.util.Map;
 4  
 import java.util.TreeMap;
 5  
 
 6  
 import jp.co.y_net.amm.common.AppLogger;
 7  
 import jp.co.y_net.amm.common.AppUtils;
 8  
 import jp.co.y_net.amm.common.CalcHash;
 9  
 import jp.co.y_net.amm.common.ResourceReader;
 10  
 import jp.co.y_net.amm.dao.AppDef;
 11  
 import jp.co.y_net.amm.dao.Org;
 12  
 import jp.co.y_net.amm.dao.OrgDao;
 13  
 import jp.co.y_net.amm.dao.Usr;
 14  
 import jp.co.y_net.amm.dao.UsrDao;
 15  
 
 16  
 import org.springframework.beans.factory.annotation.Autowired;
 17  
 import org.springframework.beans.factory.annotation.Qualifier;
 18  
 import org.springframework.stereotype.Component;
 19  
 
 20  
 @Component("logincheck")
 21  0
 public class Logincheck {
 22  
 
 23  
     public static Map<Integer, String> errorMemo;
 24  
     public static Map<Integer, String> errorMessage;
 25  
     static {
 26  
         /* システム内で使用する補足メッセージ */
 27  0
         errorMemo = new TreeMap<Integer, String>();
 28  0
         errorMemo.put(0, "エラーなし");
 29  0
         errorMemo.put(1, "ログインIDに該当するデータなし");
 30  0
         errorMemo.put(2, "退会しているユーザー(パスワードは正しい)");
 31  
         //        errorMemo.put(3, "仮登録のユーザーです");
 32  0
         errorMemo.put(4, "ログイン停止のユーザー(パスワードは正しい)");
 33  0
         errorMemo.put(5, "現在、使用期間外(パスワードは正しい)");
 34  0
         errorMemo.put(10, "ログインIDかパスワードが正しくない");
 35  0
         errorMemo.put(999, "その他のエラー");
 36  
 
 37  
         /* 利用者へ表示するメッセージ */
 38  0
         errorMessage = new TreeMap<Integer, String>();
 39  0
         errorMessage.put(0, "");
 40  0
         errorMessage.put(1, "ログインIDかパスワードが正しくありません。"); // アカウント自体がないことはセキュリティ上、明らかにしない
 41  0
         errorMessage.put(2, "退会しています。ログインできません。");
 42  0
         errorMessage.put(4, "ログイン停止中です。ログインできません。");
 43  0
         errorMessage.put(5, "使用期間外です。ログインできません。");
 44  0
         errorMessage.put(10, "ログインIDかパスワードが正しくありません。");
 45  0
         errorMessage.put(999, "ログインできません。");
 46  0
     }
 47  
 
 48  
     @Autowired(required = true)
 49  
     @Qualifier("usrDao")
 50  
     private UsrDao usrDao;
 51  
 
 52  
     @Autowired(required = true)
 53  
     @Qualifier("orgDao")
 54  
     private OrgDao orgDao;
 55  
 
 56  
     public LogincheckResult executeFromAmm(String loginidB, String cresE, String challengeA) {
 57  0
         return execute(loginidB, cresE, challengeA, false);
 58  
     }
 59  
 
 60  
     public LogincheckResult executeFromApi(String loginidB, String cresE, String challengeA) {
 61  
         /* 2016/02/22 戻り値にuseridを追加 */
 62  
         //return execute(loginidB, cresE, challengeA, true);
 63  0
         return execute(loginidB, cresE, challengeA, true); // 認証実施
 64  
 
 65  
     }
 66  
 
 67  
     private LogincheckResult execute(String loginidB, String cresE, String challengeA, boolean チャレンジレスポンスの保存を行う) {
 68  
 
 69  0
         LogincheckResult logincheckResult = new LogincheckResult();
 70  
 
 71  0
         Usr usr = usrDao.getByLoginid(loginidB);
 72  0
         if (usr == null) {
 73  
 
 74  0
             logincheckResult.errorCode = 1;
 75  0
             return logincheckResult; // ログインIDが登録されていません
 76  
         }
 77  
 
 78  0
         String チャレンジレスポンス正解値 = CalcHash.challengeResponse(usr.getPwhash(), challengeA);
 79  
 
 80  0
         if (cresE.equals(チャレンジレスポンス正解値)) {
 81  
 
 82  0
             if (usr.getStatus() == Usr.STATUS_退会) {
 83  
 
 84  0
                 logincheckResult.errorCode = 2;
 85  0
                 return logincheckResult; // 退会
 86  
             }
 87  
             //            if(usr.getStatus() == Usr.STATUS_仮登録) { 仮登録はパスワードを持っていないため、このブロックは取り下げ
 88  
             //                return 3; // 仮登録
 89  
             //            }
 90  0
             if (usr.isログイン停止()) {
 91  0
                 logincheckResult.errorCode = 4;
 92  0
                 return logincheckResult;
 93  
             }
 94  0
             Integer orgId = usr.getOrgid();
 95  0
             Org org = orgDao.getByOrgid(orgId);
 96  0
             if (org == null) {
 97  0
                 AppLogger.error(usr.getLoginid() + "に組織情報が紐づいていません。");
 98  0
                 logincheckResult.errorCode = 999;
 99  0
                 return logincheckResult;
 100  
             }
 101  0
             if (org != null && org.is利用可能期間内() == false) {
 102  0
                 logincheckResult.errorCode = 5;
 103  0
                 return logincheckResult;
 104  
             }
 105  
 
 106  
             /* 認証成功 */
 107  
 
 108  
             /* チャレンジレスポンスの有効期限を算出 */
 109  0
             Long cresdate = -1L;
 110  0
             int offset = ResourceReader.getIntegerQuick("cresdate");
 111  0
             cresdate = AppUtils.createNowLong(offset);
 112  
 
 113  
             /* データアクセス アカウント認証結果登録 */
 114  0
             usr.setLastlogindate(AppUtils.createNowLong()); // 最終ログイン日付
 115  0
             usr.setLastlogintrydate(AppUtils.createNowLong()); // 最終ログイン試行日付
 116  0
             usr.setLoginerrorcount(0); // ログイン失敗回数
 117  
 
 118  0
             if (チャレンジレスポンスの保存を行う) {
 119  0
                 usr.setCres(cresE); // チャレンジレスポンス
 120  0
                 usr.setCresdate(cresdate); // チャレンジレスポンス有効期限    
 121  
             }
 122  
 
 123  0
             usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】
 124  
 
 125  0
             logincheckResult.errorCode = 0;
 126  0
             logincheckResult.usrid = usr.getUsrid();
 127  0
             return logincheckResult;
 128  
 
 129  
         } else {
 130  
             /* 認証失敗 */
 131  
 
 132  
             /* データアクセス アカウント認証結果登録 */
 133  0
             usr.setLastlogintrydate(AppUtils.createNowLong()); // 最終ログイン試行日付
 134  0
             if (usr.getLoginerrorcount() == null) {
 135  0
                 usr.setLoginerrorcount(1); // ログイン失敗回数                
 136  0
             } else {
 137  0
                 usr.setLoginerrorcount(usr.getLoginerrorcount() + 1); // ログイン失敗回数
 138  
             }
 139  0
             usr.setCres(null); // チャレンジレスポンス をクリア
 140  0
             usr.setCresdate(-1L); // チャレンジレスポンス有効期限 を無効化
 141  
 
 142  0
             usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】
 143  
 
 144  0
             logincheckResult.errorCode = 10;
 145  
 
 146  0
             return logincheckResult;
 147  
         }
 148  
     }
 149  
 
 150  0
     public class LogincheckResult {
 151  
         public Integer errorCode;
 152  
         public Integer usrid; /* 2016/02/22 戻り値にuseridを追加 */
 153  
     }
 154  
 }