001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.user.server.transfer; 018 019import com.echothree.model.control.party.server.control.PartyControl; 020import com.echothree.model.control.user.common.UserOptions; 021import com.echothree.model.control.user.common.transfer.UserLoginPasswordTransfer; 022import com.echothree.model.control.user.common.transfer.UserLoginTransfer; 023import com.echothree.model.control.user.server.control.UserControl; 024import com.echothree.model.data.user.server.entity.UserLogin; 025import com.echothree.model.data.user.server.entity.UserVisit; 026import com.echothree.util.common.transfer.MapWrapper; 027import com.echothree.util.server.persistence.Session; 028import javax.enterprise.context.RequestScoped; 029 030@RequestScoped 031public class UserLoginTransferCache 032 extends BaseUserTransferCache<UserLogin, UserLoginTransfer> { 033 034 PartyControl partyControl = Session.getModelController(PartyControl.class); 035 UserControl userControl = Session.getModelController(UserControl.class); 036 037 boolean includeUserLoginPasswords; 038 039 /** Creates a new instance of UserLoginTransferCache */ 040 protected UserLoginTransferCache() { 041 super(); 042 043 var options = session.getOptions(); 044 if(options != null) { 045 includeUserLoginPasswords = options.contains(UserOptions.UserLoginIncludeUserLoginPasswords); 046 } 047 } 048 049 public UserLoginTransfer getUserLoginTransfer(UserVisit userVisit, UserLogin userLogin) { 050 var userLoginTransfer = get(userLogin); 051 052 if(userLoginTransfer == null) { 053 var party = userLogin.getParty(); 054 var partyTransfer = partyControl.getPartyTransfer(userVisit, party); 055 var userLoginStatus = userControl.getUserLoginStatus(party); 056 var username = userLogin.getUsername(); 057 var unformattedLastLoginTime = userLoginStatus.getLastLoginTime(); 058 var lastLoginTime = formatTypicalDateTime(userVisit, unformattedLastLoginTime); 059 var failureCount = userLoginStatus.getFailureCount(); 060 var unformattedFirstFailureTime = userLoginStatus.getFirstFailureTime(); 061 var firstFailureTime = formatTypicalDateTime(userVisit, unformattedFirstFailureTime); 062 var unformattedLastFailureTime = userLoginStatus.getLastFailureTime(); 063 var lastFailureTime = formatTypicalDateTime(userVisit, unformattedLastFailureTime); 064 var expiredCount = userLoginStatus.getExpiredCount(); 065 var forceChange = userLoginStatus.getForceChange(); 066 067 userLoginTransfer = new UserLoginTransfer(partyTransfer, username, unformattedLastLoginTime, lastLoginTime, failureCount, 068 unformattedFirstFailureTime, firstFailureTime, unformattedLastFailureTime, lastFailureTime, expiredCount, forceChange); 069 put(userVisit, userLogin, userLoginTransfer); 070 071 if(includeUserLoginPasswords) { 072 var userLoginPasswordTransfers = userControl.getUserLoginPasswordTransfersByParty(userVisit, userLogin.getParty()); 073 var userLoginPasswords = new MapWrapper<UserLoginPasswordTransfer>(userLoginPasswordTransfers.size()); 074 075 userLoginPasswordTransfers.forEach((userLoginPasswordTransfer) -> { 076 userLoginPasswords.put(userLoginPasswordTransfer.getUserLoginPasswordType().getUserLoginPasswordTypeName(), userLoginPasswordTransfer); 077 }); 078 079 userLoginTransfer.setUserLoginPasswords(userLoginPasswords); 080 } 081 } 082 083 return userLoginTransfer; 084 } 085 086}