Fixing conflics

otp-db-change
inoshperera 1 year ago
commit 61ffd4abff

@ -0,0 +1,32 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.application.mgt.core.dao;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
public interface VppApplicationDAO {
int addVppUser(VppUserDTO userDTO, int tenantId) throws ApplicationManagementDAOException;
VppUserDTO updateVppUser(VppUserDTO userDTO, int tenantId) throws ApplicationManagementDAOException;
VppUserDTO getUserByDMUsername(String emmUsername, int tenantId) throws ApplicationManagementDAOException;
}

@ -17,7 +17,7 @@
*/ */
package io.entgra.device.mgt.core.application.mgt.core.dao.common; package io.entgra.device.mgt.core.application.mgt.core.dao.common;
import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.*;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.GenericSPApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.GenericSPApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.OracleSPApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.OracleSPApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.PostgreSQLSPApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.PostgreSQLSPApplicationDAOImpl;
@ -26,16 +26,14 @@ import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.Generi
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.OracleVisibilityDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.OracleVisibilityDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.PostgreSQLVisibilityDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.PostgreSQLVisibilityDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.SQLServerVisibilityDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.SQLServerVisibilityDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.GenericVppApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.OracleVppApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.PostgreSQLVppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.SQLServerVppApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.util.Constants; import io.entgra.device.mgt.core.application.mgt.core.util.Constants;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import io.entgra.device.mgt.core.application.mgt.common.exception.UnsupportedDatabaseEngineException; import io.entgra.device.mgt.core.application.mgt.common.exception.UnsupportedDatabaseEngineException;
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationReleaseDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.LifecycleStateDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.ReviewDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.SubscriptionDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VisibilityDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.PostgreSQLApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.PostgreSQLApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.SQLServerApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.SQLServerApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.release.OracleApplicationReleaseDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.release.OracleApplicationReleaseDAOImpl;
@ -232,4 +230,28 @@ public class ApplicationManagementDAOFactory {
} }
throw new IllegalStateException("Database engine has not initialized properly."); throw new IllegalStateException("Database engine has not initialized properly.");
} }
/**
* To get the instance of VppApplicationImplementation of the particular database engine.
* @return specific VppApplicationImplementation
*/
public static VppApplicationDAO getVppApplicationDAO() {
if (databaseEngine != null) {
switch (databaseEngine) {
case Constants.DataBaseTypes.DB_TYPE_H2:
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
return new GenericVppApplicationDAOImpl();
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
return new PostgreSQLVppApplicationDAO();
case Constants.DataBaseTypes.DB_TYPE_ORACLE:
return new OracleVppApplicationDAOImpl();
case Constants.DataBaseTypes.DB_TYPE_MSSQL:
return new SQLServerVppApplicationDAOImpl();
default:
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
}
}
throw new IllegalStateException("Database engine has not initialized properly.");
}
} }

@ -0,0 +1,171 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.AbstractDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import io.entgra.device.mgt.core.application.mgt.core.exception.UnexpectedServerErrorException;
import io.entgra.device.mgt.core.application.mgt.core.util.DAOUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
public class GenericVppApplicationDAOImpl extends AbstractDAOImpl implements VppApplicationDAO {
private static final Log log = LogFactory.getLog(GenericVppApplicationDAOImpl.class);
@Override
public int addVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
int vppUserId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_USER("
+ "CLIENT_USER_ID, "
+ "DM_USERNAME, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "MANAGED_ID,"
+ "TEMP_PASSWORD) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
long currentTime = System.currentTimeMillis();
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, currentTime);
stmt.setLong(8, currentTime);
stmt.setString(9, userDTO.getManagedId());
stmt.setString(10, userDTO.getTmpPassword());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
vppUserId = rs.getInt(1);
}
}
return vppUserId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
public VppUserDTO updateVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
String sql = "UPDATE "
+ "AP_VPP_USER "
+ "SET "
+ "CLIENT_USER_ID = ?,"
+ "DM_USERNAME = ?, "
+ "TENANT_ID = ?, "
+ "EMAIL = ?, "
+ "INVITE_CODE = ?, "
+ "STATUS = ?, "
+ "LAST_UPDATED_TIME = ?, "
+ "MANAGED_ID = ?, "
+ "TEMP_PASSWORD = ? "
+ "WHERE ID = ?";
try {
Connection conn = this.getDBConnection();
long updatedTime = System.currentTimeMillis();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, updatedTime);
stmt.setString(8, userDTO.getManagedId());
stmt.setString(9, userDTO.getTmpPassword());
stmt.setInt(10, userDTO.getId());
stmt.executeUpdate();
if (stmt.executeUpdate() == 1) {
return userDTO;
}
return null;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when updating the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to updating the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
public VppUserDTO getUserByDMUsername(String emmUsername, int tenantId)
throws ApplicationManagementDAOException {
String sql = "SELECT "
+ "ID, "
+ "CLIENT_USER_ID, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS, "
+ "CREATED_TIME, "
+ "LAST_UPDATED_TIME, "
+ "MANAGED_ID, "
+ "TEMP_PASSWORD "
+ "FROM AP_VPP_USER "
+ "WHERE DM_USERNAME = ? AND TENANT_ID = ?";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, emmUsername);
stmt.setInt(2, tenantId);
try (ResultSet rs = stmt.executeQuery()) {
return DAOUtil.loadVppUser(rs);
}
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when retrieving vpp user by EMM Username.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to retrieve vpp user by EMM Username.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (UnexpectedServerErrorException e) {
String msg = "Found more than one user for: " + emmUsername;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -0,0 +1,82 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
public class OracleVppApplicationDAOImpl extends GenericVppApplicationDAOImpl {
private static final Log log = LogFactory.getLog(GenericVppApplicationDAOImpl.class);
@Override
public int addVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
int vppUserId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_USER("
+ "CLIENT_USER_ID, "
+ "DM_USERNAME, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "MANAGED_ID,"
+ "TEMP_PASSWORD) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, new String[] {"ID"})) {
long currentTime = System.currentTimeMillis();
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, currentTime);
stmt.setLong(8, currentTime);
stmt.setString(9, userDTO.getManagedId());
stmt.setString(10, userDTO.getTmpPassword());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
vppUserId = rs.getInt(1);
}
}
return vppUserId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -0,0 +1,81 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
public class PostgreSQLVppApplicationDAO extends GenericVppApplicationDAOImpl {
private static final Log log = LogFactory.getLog(GenericVppApplicationDAOImpl.class);
public int addVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
int vppUserId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_USER("
+ "CLIENT_USER_ID, "
+ "DM_USERNAME, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "MANAGED_ID,"
+ "TEMP_PASSWORD) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, new String[]{"ID"})) {
long currentTime = System.currentTimeMillis();
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, currentTime);
stmt.setLong(8, currentTime);
stmt.setString(9, userDTO.getManagedId());
stmt.setString(10, userDTO.getTmpPassword());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
vppUserId = rs.getInt(1);
}
}
return vppUserId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -0,0 +1,22 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
public class SQLServerVppApplicationDAOImpl extends GenericVppApplicationDAOImpl {
}

@ -25,6 +25,9 @@ import io.entgra.device.mgt.core.application.mgt.common.dto.ItuneAppDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.ProxyResponse; import io.entgra.device.mgt.core.application.mgt.common.dto.ProxyResponse;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppAssetDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppAssetDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppItuneUserDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppItuneUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.common.exception.TransactionManagementException;
import io.entgra.device.mgt.core.application.mgt.common.wrapper.VppItuneUserRequestWrapper;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationManagementException; import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationManagementException;
import io.entgra.device.mgt.core.application.mgt.common.services.VPPApplicationManager; import io.entgra.device.mgt.core.application.mgt.common.services.VPPApplicationManager;
@ -34,10 +37,13 @@ import io.entgra.device.mgt.core.application.mgt.common.wrapper.VppItuneUserResp
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VisibilityDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.VisibilityDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.common.ApplicationManagementDAOFactory; import io.entgra.device.mgt.core.application.mgt.core.dao.common.ApplicationManagementDAOFactory;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import io.entgra.device.mgt.core.application.mgt.core.internal.DataHolder; import io.entgra.device.mgt.core.application.mgt.core.internal.DataHolder;
import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager; import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager;
import io.entgra.device.mgt.core.application.mgt.core.util.ApplicationManagementUtil; import io.entgra.device.mgt.core.application.mgt.core.util.ApplicationManagementUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.ConnectionManagerUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.Constants; import io.entgra.device.mgt.core.application.mgt.core.util.Constants;
import io.entgra.device.mgt.core.application.mgt.core.util.VppHttpUtil; import io.entgra.device.mgt.core.application.mgt.core.util.VppHttpUtil;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -66,6 +72,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
private SPApplicationDAO spApplicationDAO; private SPApplicationDAO spApplicationDAO;
private VisibilityDAO visibilityDAO; private VisibilityDAO visibilityDAO;
private final LifecycleStateManager lifecycleStateManager; private final LifecycleStateManager lifecycleStateManager;
private VppApplicationDAO vppApplicationDAO;
public VppApplicationManagerImpl() { public VppApplicationManagerImpl() {
initDataAccessObjects(); initDataAccessObjects();
@ -76,10 +83,14 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO(); this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO();
this.visibilityDAO = ApplicationManagementDAOFactory.getVisibilityDAO(); this.visibilityDAO = ApplicationManagementDAOFactory.getVisibilityDAO();
this.spApplicationDAO = ApplicationManagementDAOFactory.getSPApplicationDAO(); this.spApplicationDAO = ApplicationManagementDAOFactory.getSPApplicationDAO();
this.vppApplicationDAO = ApplicationManagementDAOFactory.getVppApplicationDAO();
} }
@Override @Override
public VppUserDTO addUser(VppUserDTO userDTO) throws ApplicationManagementException { public VppUserDTO addUser(VppUserDTO userDTO) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
// Call the API to add // Call the API to add
try { try {
VppItuneUserDTO ituneUserDTO = userDTO; VppItuneUserDTO ituneUserDTO = userDTO;
@ -106,10 +117,30 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
.getInviteCode()); .getInviteCode());
userDTO.setStatus(vppItuneUserResponseWrapper.getUser().get(0).getStatus()); userDTO.setStatus(vppItuneUserResponseWrapper.getUser().get(0).getStatus());
log.error("userDTO " + userDTO.toString()); log.error("userDTO " + userDTO.toString());
// TODO: Save the userDTO in the DAO try {
ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.addVppUser(userDTO, tenantId) != -1) {
return userDTO; ConnectionManagerUtil.commitDBTransaction();
return userDTO;
}
ConnectionManagerUtil.rollbackDBTransaction();
return null;
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while adding the Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while executing database transaction for adding Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection for adding Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
} }
} }
@ -123,12 +154,26 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
@Override @Override
public VppUserDTO getUserByDMUsername(String emmUsername) throws ApplicationManagementException { public VppUserDTO getUserByDMUsername(String emmUsername) throws ApplicationManagementException {
// TODO: Return from DAO in a tenanted manner int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
return null; try {
ConnectionManagerUtil.openDBConnection();
return vppApplicationDAO.getUserByDMUsername(emmUsername, tenantId);
} catch (DBConnectionException e) {
String msg = "DB Connection error occurs while getting vpp User data related to EMM user " + emmUsername + ".";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (ApplicationManagementDAOException e) {
String msg = "Error occurred while getting vpp User data related to EMM user " + emmUsername + ".";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
} }
@Override @Override
public void updateUser(VppUserDTO userDTO) throws ApplicationManagementException { public void updateUser(VppUserDTO userDTO) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
VppItuneUserDTO ituneUserDTO = userDTO; VppItuneUserDTO ituneUserDTO = userDTO;
VppItuneUserRequestWrapper wrapper = new VppItuneUserRequestWrapper(); VppItuneUserRequestWrapper wrapper = new VppItuneUserRequestWrapper();
wrapper.getUser().add(ituneUserDTO); wrapper.getUser().add(ituneUserDTO);
@ -141,12 +186,35 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) {
log.error("userDTO " + userDTO.toString()); log.error("userDTO " + userDTO.toString());
// TODO: Save the userDTO in the DAO
try {
ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.updateVppUser(userDTO, tenantId) == null) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Unable to update the Vpp user " +userDTO.getId();
log.error(msg);
throw new ApplicationManagementException(msg);
}
ConnectionManagerUtil.commitDBTransaction();
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while updating the Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while executing database transaction for Vpp User update.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection for Vpp User update.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
} }
} catch (IOException e) { } catch (IOException e) {
String msg = "Error while callng VPP backend to update"; String msg = "Error while calling VPP backend to update";
log.error(msg, e); log.error(msg, e);
throw new ApplicationManagementException(msg, e); throw new ApplicationManagementException(msg, e);
} }

@ -32,6 +32,7 @@ import io.entgra.device.mgt.core.application.mgt.common.dto.ApplicationReleaseDT
import io.entgra.device.mgt.core.application.mgt.common.dto.DeviceSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.DeviceSubscriptionDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.ReviewDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.ReviewDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.ScheduledSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.ScheduledSubscriptionDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier; import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@ -43,6 +44,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Date;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -344,6 +346,42 @@ public class DAOUtil {
return subscriptionDTOS; return subscriptionDTOS;
} }
public static VppUserDTO loadVppUser(ResultSet rs) throws SQLException, UnexpectedServerErrorException {
List<VppUserDTO> vppUserDTOS = loadVppUsers(rs);
if (vppUserDTOS.isEmpty()) {
return null;
}
if (vppUserDTOS.size() > 1) {
String msg = "Internal server error. Found more than one vpp user for requested emmUsername";
log.error(msg);
throw new UnexpectedServerErrorException(msg);
}
return vppUserDTOS.get(0);
}
public static List<VppUserDTO> loadVppUsers (ResultSet rs) throws SQLException {
List<VppUserDTO> vppUserDTOS = new ArrayList<>();
while (rs.next()) {
VppUserDTO vppUserDTO = new VppUserDTO();
vppUserDTO.setId(rs.getInt("ID"));
vppUserDTO.setClientUserId(rs.getString("CLIENT_USER_ID"));
vppUserDTO.setTenantId(rs.getInt("TENANT_ID"));
vppUserDTO.setEmail(rs.getString("EMAIL"));
vppUserDTO.setInviteCode(rs.getString("INVITE_CODE"));
vppUserDTO.setStatus(rs.getString("STATUS"));
vppUserDTO.setManagedId(rs.getString("MANAGED_ID"));
vppUserDTO.setTmpPassword(rs.getString("TEMP_PASSWORD"));
if (rs.getLong("CREATED_TIME") != 0) {
vppUserDTO.setCreatedTime(new Date(rs.getLong(("CREATED_TIME")) * 1000).toString());
}
if (rs.getLong("LAST_UPDATED_TIME") != 0) {
vppUserDTO.setLastUpdatedTime(new Date(rs.getLong(("LAST_UPDATED_TIME")) * 1000).toString());
}
vppUserDTOS.add(vppUserDTO);
}
return vppUserDTOS;
}
/** /**
* Cleans up the statement and resultset after executing the query * Cleans up the statement and resultset after executing the query
* *

@ -455,6 +455,9 @@ public class UserManagementServiceImpl implements UserManagementService {
userList = new ArrayList<>(users.size()); userList = new ArrayList<>(users.size());
BasicUserInfo user; BasicUserInfo user;
for (String username : users) { for (String username : users) {
if (Constants.APIM_RESERVED_USER.equals(username)) {
continue;
}
user = getBasicUserInfo(username); user = getBasicUserInfo(username);
userList.add(user); userList.add(user);
} }
@ -515,6 +518,9 @@ public class UserManagementServiceImpl implements UserManagementService {
if (StringUtils.isNotEmpty(username)) { if (StringUtils.isNotEmpty(username)) {
commonUsers = getUserList(null, username); commonUsers = getUserList(null, username);
} }
if (commonUsers != null) {
commonUsers.remove(Constants.APIM_RESERVED_USER);
}
if (!skipSearch(commonUsers) && StringUtils.isNotEmpty(firstName)) { if (!skipSearch(commonUsers) && StringUtils.isNotEmpty(firstName)) {
tempList = getUserList(Constants.USER_CLAIM_FIRST_NAME, firstName); tempList = getUserList(Constants.USER_CLAIM_FIRST_NAME, firstName);
@ -689,6 +695,9 @@ public class UserManagementServiceImpl implements UserManagementService {
userList = new ArrayList<>(); userList = new ArrayList<>();
UserInfo user; UserInfo user;
for (String username : users) { for (String username : users) {
if (Constants.APIM_RESERVED_USER.equals(username)) {
continue;
}
user = new UserInfo(); user = new UserInfo();
user.setUsername(username); user.setUsername(username);
user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));

@ -30,6 +30,7 @@ public class Constants {
public static final String USER_CLAIM_MODIFIED = "http://wso2.org/claims/modified"; public static final String USER_CLAIM_MODIFIED = "http://wso2.org/claims/modified";
public static final String USER_CLAIM_DEVICES = "http://wso2.org/claims/devices"; public static final String USER_CLAIM_DEVICES = "http://wso2.org/claims/devices";
public static final String PRIMARY_USER_STORE = "PRIMARY"; public static final String PRIMARY_USER_STORE = "PRIMARY";
public static final String APIM_RESERVED_USER = "apim_reserved_user";
public static final String DEFAULT_STREAM_VERSION = "1.0.0"; public static final String DEFAULT_STREAM_VERSION = "1.0.0";
public static final String SCOPE = "scope"; public static final String SCOPE = "scope";
public static final String JDBC_USERSTOREMANAGER = "org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager"; public static final String JDBC_USERSTOREMANAGER = "org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager";

@ -18,10 +18,21 @@
package io.entgra.device.mgt.core.device.mgt.common.general; package io.entgra.device.mgt.core.device.mgt.common.general;
import java.util.Map;
public class QREnrollmentDetails { public class QREnrollmentDetails {
String ownershipType; String ownershipType;
String username; String username;
String enrollmentMode; String enrollmentMode;
Map<String, String> customValues;
public Map<String, String> getCustomValues() {
return customValues;
}
public void setCustomValues(Map<String, String> customValues) {
this.customValues = customValues;
}
public String getOwnershipType() { return ownershipType; } public String getOwnershipType() { return ownershipType; }

@ -224,7 +224,7 @@
<Scope>perm:admin:tenant:view</Scope> <Scope>perm:admin:tenant:view</Scope>
<Scope>perm:admin:metadata:view</Scope> <Scope>perm:admin:metadata:view</Scope>
<Scope>perm:admin:usage:view</Scope> <Scope>perm:admin:usage:view</Scope>
<Scope>perm:android:clear-applicatio</Scope> <Scope>perm:android:clear-application</Scope>
<Scope>perm:android:suspend-package</Scope> <Scope>perm:android:suspend-package</Scope>
<Scope>perm:android:alternate-install</Scope> <Scope>perm:android:alternate-install</Scope>
</Scopes> </Scopes>

Loading…
Cancel
Save