##### 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.0;0

Logincheck$LogincheckResult

0% | 0/1

N/A | N/A

0.0;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

     }