forked from community/device-mgt-core
commit
9b4c5e6adb
@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
~ Copyright (c) 2018 - 2024, 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.
|
||||
~
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>cea-mgt</artifactId>
|
||||
<version>5.0.38-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>io.entgra.device.mgt.core.cea.mgt.common</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>Entgra IoT - CEA Management Common</name>
|
||||
<description>Entgra IoT - Conditional Email Access Management Common</description>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||
<Bundle-Version>${io.entgra.device.mgt.core.version}</Bundle-Version>
|
||||
<Bundle-Description>CEA Management Common Bundle</Bundle-Description>
|
||||
<Import-Package>
|
||||
org.apache.commons.logging,
|
||||
io.entgra.device.mgt.core.device.mgt.common.*
|
||||
</Import-Package>
|
||||
<Export-Package>
|
||||
io.entgra.device.mgt.core.cea.mgt.common.*
|
||||
</Export-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.device.mgt.common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.swagger</groupId>
|
||||
<artifactId>swagger-annotations</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.DefaultAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.EmailOutlookAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.POPIMAPAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.WebOutlookAccessPolicy;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class AccessPolicy {
|
||||
private DefaultAccessPolicy defaultAccessPolicy;
|
||||
private Set<EmailOutlookAccessPolicy> emailOutlookAccessPolicy;
|
||||
private POPIMAPAccessPolicy POPIMAPAccessPolicy;
|
||||
private WebOutlookAccessPolicy webOutlookAccessPolicy;
|
||||
|
||||
public DefaultAccessPolicy getDefaultAccessPolicy() {
|
||||
return defaultAccessPolicy;
|
||||
}
|
||||
|
||||
public void setDefaultAccessPolicy(DefaultAccessPolicy defaultAccessPolicy) {
|
||||
this.defaultAccessPolicy = defaultAccessPolicy;
|
||||
}
|
||||
|
||||
public Set<EmailOutlookAccessPolicy> getEmailOutlookAccessPolicy() {
|
||||
return emailOutlookAccessPolicy;
|
||||
}
|
||||
|
||||
public void setEmailOutlookAccessPolicy(Set<EmailOutlookAccessPolicy> emailOutlookAccessPolicy) {
|
||||
this.emailOutlookAccessPolicy = emailOutlookAccessPolicy;
|
||||
}
|
||||
|
||||
public POPIMAPAccessPolicy getPOPIMAPAccessPolicy() {
|
||||
return POPIMAPAccessPolicy;
|
||||
}
|
||||
|
||||
public void setPOPIMAPAccessPolicy(POPIMAPAccessPolicy POPIMAPAccessPolicy) {
|
||||
this.POPIMAPAccessPolicy = POPIMAPAccessPolicy;
|
||||
}
|
||||
|
||||
public WebOutlookAccessPolicy getWebOutlookAccessPolicy() {
|
||||
return webOutlookAccessPolicy;
|
||||
}
|
||||
|
||||
public void setWebOutlookAccessPolicy(WebOutlookAccessPolicy webOutlookAccessPolicy) {
|
||||
this.webOutlookAccessPolicy = webOutlookAccessPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
public class ActiveSyncDevice {
|
||||
@JsonProperty(value = "DeviceID", required = true)
|
||||
private String deviceId;
|
||||
@JsonProperty(value = "FirstSyncTime", required = true)
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
|
||||
private Date firstSyncTime;
|
||||
@JsonProperty(value = "UserPrincipalName", required = true)
|
||||
private String userPrincipalName;
|
||||
@JsonProperty(value = "Identity", required = true)
|
||||
private String identity;
|
||||
|
||||
public String getDeviceId() {
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
public void setDeviceId(String deviceId) {
|
||||
this.deviceId = deviceId;
|
||||
}
|
||||
|
||||
public Date getFirstSyncTime() {
|
||||
return firstSyncTime;
|
||||
}
|
||||
|
||||
public void setFirstSyncTime(Date firstSyncTime) {
|
||||
this.firstSyncTime = firstSyncTime;
|
||||
}
|
||||
|
||||
public String getIdentity() {
|
||||
return identity;
|
||||
}
|
||||
|
||||
public void setIdentity(String identity) {
|
||||
this.identity = identity;
|
||||
}
|
||||
|
||||
public String getUserPrincipalName() {
|
||||
return userPrincipalName;
|
||||
}
|
||||
|
||||
public void setUserPrincipalName(String userPrincipalName) {
|
||||
this.userPrincipalName = userPrincipalName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ActiveSyncDevice)) return false;
|
||||
ActiveSyncDevice that = (ActiveSyncDevice) o;
|
||||
return Objects.equals(deviceId, that.deviceId)
|
||||
&& Objects.equals(userPrincipalName, that.userPrincipalName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(deviceId, userPrincipalName, identity);
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
@ApiModel(value = "ActiveSyncServer", description = "Active sync server properties")
|
||||
public class ActiveSyncServer {
|
||||
@JsonProperty(value = "key", required = true)
|
||||
@ApiModelProperty(name = "key", value = "Key describing the server type according to cea-config.xml", required = true)
|
||||
private String key;
|
||||
|
||||
@JsonProperty(value = "gatewayUrl", required = true)
|
||||
@ApiModelProperty(name = "gatewayUrl", value = "Gateway URL of the active sync server", required = true)
|
||||
private String gatewayUrl;
|
||||
|
||||
@JsonProperty(value = "client", required = true)
|
||||
@ApiModelProperty(name = "client", value = "Client identifier", required = true)
|
||||
private String client;
|
||||
@JsonProperty(value = "secret", required = true)
|
||||
@ApiModelProperty(name = "secret", value = "Client secret", required = true)
|
||||
private String secret;
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String getGatewayUrl() {
|
||||
return gatewayUrl;
|
||||
}
|
||||
|
||||
public void setGatewayUrl(String gatewayUrl) {
|
||||
this.gatewayUrl = gatewayUrl;
|
||||
}
|
||||
|
||||
public String getClient() {
|
||||
return client;
|
||||
}
|
||||
|
||||
public void setClient(String client) {
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
public String getSecret() {
|
||||
return secret;
|
||||
}
|
||||
|
||||
public void setSecret(String secret) {
|
||||
this.secret = secret;
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
public class ActiveSyncServerUIConfiguration {
|
||||
private String name;
|
||||
private String description;
|
||||
private String key;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
public class AndroidEASIdentifier {
|
||||
private String identifier;
|
||||
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
public void setIdentifier(String identifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
public class CEAPolicy implements Serializable {
|
||||
private static final long serialVersionUID = -4578284769501447L;
|
||||
private ActiveSyncServer activeSyncServer;
|
||||
private AccessPolicy accessPolicy;
|
||||
private GracePeriod gracePeriod;
|
||||
private Date created;
|
||||
private Date lastUpdated;
|
||||
private Date lastSynced;
|
||||
private boolean isSynced;
|
||||
private int tenantId;
|
||||
|
||||
public boolean isSynced() {
|
||||
return isSynced;
|
||||
}
|
||||
|
||||
public void setSynced(boolean synced) {
|
||||
isSynced = synced;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public void setCreated(Date created) {
|
||||
this.created = created;
|
||||
}
|
||||
|
||||
public Date getLastUpdated() {
|
||||
return lastUpdated;
|
||||
}
|
||||
|
||||
public void setLastUpdated(Date lastUpdated) {
|
||||
this.lastUpdated = lastUpdated;
|
||||
}
|
||||
|
||||
public Date getLastSynced() {
|
||||
return lastSynced;
|
||||
}
|
||||
|
||||
public void setLastSynced(Date lastSynced) {
|
||||
this.lastSynced = lastSynced;
|
||||
}
|
||||
|
||||
public AccessPolicy getAccessPolicy() {
|
||||
return accessPolicy;
|
||||
}
|
||||
|
||||
public void setAccessPolicy(AccessPolicy accessPolicy) {
|
||||
this.accessPolicy = accessPolicy;
|
||||
}
|
||||
|
||||
public GracePeriod getGracePeriod() {
|
||||
return gracePeriod;
|
||||
}
|
||||
|
||||
public void setGracePeriod(GracePeriod gracePeriod) {
|
||||
this.gracePeriod = gracePeriod;
|
||||
}
|
||||
|
||||
public ActiveSyncServer getActiveSyncServer() {
|
||||
return activeSyncServer;
|
||||
}
|
||||
|
||||
public void setActiveSyncServer(ActiveSyncServer activeSyncServer) {
|
||||
this.activeSyncServer = activeSyncServer;
|
||||
}
|
||||
|
||||
public int getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public void setTenantId(int tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CEAPolicyEASWrapper {
|
||||
private List<ActiveSyncDevice> activeSyncDevices;
|
||||
private CEAPolicy ceaPolicy;
|
||||
|
||||
public List<ActiveSyncDevice> getActiveSyncDevices() {
|
||||
return activeSyncDevices;
|
||||
}
|
||||
|
||||
public void setActiveSyncDevices(List<ActiveSyncDevice> activeSyncDevices) {
|
||||
this.activeSyncDevices = activeSyncDevices;
|
||||
}
|
||||
|
||||
public CEAPolicy getCeaPolicy() {
|
||||
return ceaPolicy;
|
||||
}
|
||||
|
||||
public void setCeaPolicy(CEAPolicy ceaPolicy) {
|
||||
this.ceaPolicy = ceaPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.GraceAllowedPolicy;
|
||||
|
||||
public class GracePeriod {
|
||||
private int gracePeriod;
|
||||
private GraceAllowedPolicy graceAllowedPolicy;
|
||||
|
||||
public int getGracePeriod() {
|
||||
return gracePeriod;
|
||||
}
|
||||
|
||||
public void setGracePeriod(int gracePeriod) {
|
||||
this.gracePeriod = gracePeriod;
|
||||
}
|
||||
|
||||
public GraceAllowedPolicy getGraceAllowedPolicy() {
|
||||
return graceAllowedPolicy;
|
||||
}
|
||||
|
||||
public void setGraceAllowedPolicy(GraceAllowedPolicy graceAllowedPolicy) {
|
||||
this.graceAllowedPolicy = graceAllowedPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class MailboxProfile {
|
||||
private final Set<String> activeSyncAllowedEASIdentifiers = new HashSet<>();
|
||||
private final Set<String> activeSyncBlockedEASIdentifiers = new HashSet<>();
|
||||
private String identity;
|
||||
|
||||
public Set<String> getActiveSyncAllowedEASIdentifiers() {
|
||||
return activeSyncAllowedEASIdentifiers;
|
||||
}
|
||||
|
||||
public Set<String> getActiveSyncBlockedEASIdentifiers() {
|
||||
return activeSyncBlockedEASIdentifiers;
|
||||
}
|
||||
|
||||
public void addActiveSyncAllowedEASIdentifier(String EASIdentifier) {
|
||||
activeSyncAllowedEASIdentifiers.add(EASIdentifier);
|
||||
}
|
||||
|
||||
public void addActiveSyncBlockEASIdentifier(String EASIdentifier) {
|
||||
activeSyncBlockedEASIdentifiers.add(EASIdentifier);
|
||||
}
|
||||
|
||||
public String getIdentity() {
|
||||
return identity;
|
||||
}
|
||||
|
||||
public void setIdentity(String identity) {
|
||||
this.identity = identity;
|
||||
}
|
||||
|
||||
public String getAllowedEASIdentifierString() {
|
||||
String add = "", remove = "";
|
||||
if (!activeSyncAllowedEASIdentifiers.isEmpty()) {
|
||||
Set<String> processedEASIdentifiers = new HashSet<>();
|
||||
for (String activeSyncAllowedEASIdentifier : activeSyncAllowedEASIdentifiers) {
|
||||
processedEASIdentifiers.add("'" + activeSyncAllowedEASIdentifier + "'");
|
||||
}
|
||||
add = String.join(",", processedEASIdentifiers);
|
||||
}
|
||||
|
||||
if (!activeSyncBlockedEASIdentifiers.isEmpty()) {
|
||||
Set<String> processedEASIdentifiers = new HashSet<>();
|
||||
for (String activeSyncBlockedEASIdentifier : activeSyncBlockedEASIdentifiers) {
|
||||
processedEASIdentifiers.add("'" + activeSyncBlockedEASIdentifier + "'");
|
||||
}
|
||||
remove = String.join(",", processedEASIdentifiers);
|
||||
}
|
||||
|
||||
String begin = "@{", end = "}";
|
||||
if (!add.isEmpty()) {
|
||||
begin = begin + "Add=" + add + ";";
|
||||
}
|
||||
if (!remove.isEmpty()) {
|
||||
begin = begin + "Remove=" + remove + ";";
|
||||
}
|
||||
return begin + end;
|
||||
}
|
||||
|
||||
public String getBlockedEASIdentifierString() {
|
||||
String add = "", remove = "";
|
||||
if (!activeSyncAllowedEASIdentifiers.isEmpty()) {
|
||||
Set<String> processedEASIdentifiers = new HashSet<>();
|
||||
for (String activeSyncAllowedEASIdentifier : activeSyncAllowedEASIdentifiers) {
|
||||
processedEASIdentifiers.add("'" + activeSyncAllowedEASIdentifier + "'");
|
||||
}
|
||||
remove = String.join(",", processedEASIdentifiers);
|
||||
}
|
||||
|
||||
if (!activeSyncBlockedEASIdentifiers.isEmpty()) {
|
||||
Set<String> processedEASIdentifiers = new HashSet<>();
|
||||
for (String activeSyncBlockedEASIdentifier : activeSyncBlockedEASIdentifiers) {
|
||||
processedEASIdentifiers.add("'" + activeSyncBlockedEASIdentifier + "'");
|
||||
}
|
||||
add = String.join(",", processedEASIdentifiers);
|
||||
}
|
||||
|
||||
String begin = "@{", end = "}";
|
||||
if (!add.isEmpty()) {
|
||||
begin = begin + "Add=" + add + ";";
|
||||
}
|
||||
if (!remove.isEmpty()) {
|
||||
begin = begin + "Remove=" + remove + ";";
|
||||
}
|
||||
return begin + end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof MailboxProfile)) return false;
|
||||
MailboxProfile that = (MailboxProfile) o;
|
||||
return Objects.equals(identity, that.identity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(identity);
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.enums;
|
||||
|
||||
public enum DefaultAccessPolicy {
|
||||
ALLOW("ALLOW"),
|
||||
QUARANTINE("QUARANTINE"),
|
||||
BLOCK("BLOCK");
|
||||
|
||||
private final String name;
|
||||
|
||||
DefaultAccessPolicy(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean equalsName(String thatName) {
|
||||
return name.equals(thatName);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.enums;
|
||||
|
||||
public enum EmailOutlookAccessPolicy {
|
||||
MOBILE_OUTLOOK_BLOCK("MOBILE_OUTLOOK_BLOCK"),
|
||||
WINDOWS_OUTLOOK_BLOCK("WINDOWS_OUTLOOK_BLOCK"),
|
||||
MAC_OUTLOOK_BLOCK("MAC_OUTLOOK_BLOCK"),
|
||||
MAC_OLD_OUTLOOK_BLOCK("MAC_OLD_OUTLOOK_BLOCK"),
|
||||
NOT_CONFIGURED("NOT_CONFIGURED");
|
||||
|
||||
private final String name;
|
||||
|
||||
EmailOutlookAccessPolicy(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean equalsName(String thatName) {
|
||||
return name.equals(thatName);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.enums;
|
||||
|
||||
public enum GraceAllowedPolicy {
|
||||
NEW_AND_EXISTING("NEW_AND_EXISTING"),
|
||||
EXISTING_ONLY("EXISTING_ONLY"),
|
||||
NEW_ONLY("NEW_ONLY"),
|
||||
NOT_ALLOWED("NOT_ALLOWED");
|
||||
|
||||
private final String name;
|
||||
|
||||
GraceAllowedPolicy(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean equalsName(String thatName) {
|
||||
return name.equals(thatName);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.enums;
|
||||
|
||||
public enum POPIMAPAccessPolicy {
|
||||
ALLOW("ALLOW"),
|
||||
BLOCK("BLOCK"),
|
||||
NOT_CONFIGURED("NOT_CONFIGURED");
|
||||
|
||||
private final String name;
|
||||
|
||||
POPIMAPAccessPolicy(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean equalsName(String thatName) {
|
||||
return name.equals(thatName);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.enums;
|
||||
|
||||
public enum WebOutlookAccessPolicy {
|
||||
ALLOW("ALLOW"),
|
||||
BLOCK("BLOCK"),
|
||||
NOT_CONFIGURED("NOT_CONFIGURED");
|
||||
|
||||
private final String name;
|
||||
|
||||
WebOutlookAccessPolicy(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean equalsName(String thatName) {
|
||||
return name.equals(thatName);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement(name = "CEAPolicyUIConfiguration")
|
||||
public class CEAPolicyUIConfiguration {
|
||||
private List<ServerUIConfiguration> serverUIConfigurations;
|
||||
|
||||
public List<ServerUIConfiguration> getServerConfigurations() {
|
||||
return serverUIConfigurations;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "ServerUIConfigurations", required = true)
|
||||
@XmlElement(name = "ServerUIConfiguration")
|
||||
public void setServerConfigurations(List<ServerUIConfiguration> serverUIConfigurations) {
|
||||
this.serverUIConfigurations = serverUIConfigurations;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Checkbox")
|
||||
public class Checkbox {
|
||||
private String label;
|
||||
private String value;
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Label", required = true)
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Value", required = true)
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement(name = "CheckboxGroup")
|
||||
public class CheckboxGroup {
|
||||
private String name;
|
||||
private List<Checkbox> checkboxes;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Name", required = true)
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<Checkbox> getCheckboxes() {
|
||||
return checkboxes;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "Checkboxes", required = true)
|
||||
@XmlElement(name = "Checkbox")
|
||||
public void setCheckboxes(List<Checkbox> checkboxes) {
|
||||
this.checkboxes = checkboxes;
|
||||
}
|
||||
}
|
@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Entry")
|
||||
public class Entry {
|
||||
private String code;
|
||||
private boolean required;
|
||||
private String label;
|
||||
private String tooltip;
|
||||
private boolean hidden;
|
||||
private Supportability supportability;
|
||||
private String docLink;
|
||||
private Input input;
|
||||
private Select select;
|
||||
private CheckboxGroup checkboxGroup;
|
||||
private Switch inputSwitch;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Code", required = true)
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public boolean isRequired() {
|
||||
return required;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Required", defaultValue = "false")
|
||||
public void setRequired(boolean required) {
|
||||
this.required = required;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Label", required = true)
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public String getTooltip() {
|
||||
return tooltip;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Tooltip")
|
||||
public void setTooltip(String tooltip) {
|
||||
this.tooltip = tooltip;
|
||||
}
|
||||
|
||||
public boolean isHidden() {
|
||||
return hidden;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Hidden", defaultValue = "false")
|
||||
public void setHidden(boolean hidden) {
|
||||
this.hidden = hidden;
|
||||
}
|
||||
|
||||
public Supportability getSupportability() {
|
||||
return supportability;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Supportability")
|
||||
public void setSupportability(Supportability supportability) {
|
||||
this.supportability = supportability;
|
||||
}
|
||||
|
||||
public String getDocLink() {
|
||||
return docLink;
|
||||
}
|
||||
|
||||
@XmlElement(name = "DocLink")
|
||||
public void setDocLink(String docLink) {
|
||||
this.docLink = docLink;
|
||||
}
|
||||
|
||||
public Input getInput() {
|
||||
return input;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Input", nillable = true)
|
||||
public void setInput(Input input) {
|
||||
this.input = input;
|
||||
}
|
||||
|
||||
public Select getSelect() {
|
||||
return select;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Select", nillable = true)
|
||||
public void setSelect(Select select) {
|
||||
this.select = select;
|
||||
}
|
||||
|
||||
public CheckboxGroup getCheckboxGroup() {
|
||||
return checkboxGroup;
|
||||
}
|
||||
|
||||
@XmlElement(name = "CheckboxGroup", nillable = true)
|
||||
public void setCheckboxGroup(CheckboxGroup checkboxGroup) {
|
||||
this.checkboxGroup = checkboxGroup;
|
||||
}
|
||||
|
||||
public Switch getInputSwitch() {
|
||||
return inputSwitch;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Switch", nillable = true)
|
||||
public void setInputSwitch(Switch inputSwitch) {
|
||||
this.inputSwitch = inputSwitch;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Input")
|
||||
public class Input {
|
||||
private String name;
|
||||
private String placeholder;
|
||||
private String type;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Name", required = true)
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPlaceholder() {
|
||||
return placeholder;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Placeholder", required = true)
|
||||
public void setPlaceholder(String placeholder) {
|
||||
this.placeholder = placeholder;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Type", required = true)
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Option")
|
||||
public class Option {
|
||||
private String value;
|
||||
private String label;
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Value", required = true)
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Label", required = true)
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement(name = "PolicyEntries")
|
||||
public class PolicyEntries {
|
||||
private List<Entry> activeSyncServerEntries;
|
||||
private List<Entry> conditionalAccessPolicyEntries;
|
||||
private List<Entry> gracePeriodEntries;
|
||||
|
||||
public List<Entry> getActiveSyncServerEntries() {
|
||||
return activeSyncServerEntries;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "ActiveSyncServerEntries", required = true)
|
||||
@XmlElement(name = "Entry", required = true)
|
||||
public void setActiveSyncServerEntries(List<Entry> activeSyncServerEntries) {
|
||||
this.activeSyncServerEntries = activeSyncServerEntries;
|
||||
}
|
||||
|
||||
public List<Entry> getConditionalAccessPolicyEntries() {
|
||||
return conditionalAccessPolicyEntries;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "ConditionalAccessPolicyEntries", required = true)
|
||||
@XmlElement(name = "Entry", required = true)
|
||||
public void setConditionalAccessPolicyEntries(List<Entry> conditionalAccessPolicyEntries) {
|
||||
this.conditionalAccessPolicyEntries = conditionalAccessPolicyEntries;
|
||||
}
|
||||
|
||||
public List<Entry> getGracePeriodEntries() {
|
||||
return gracePeriodEntries;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "GracePeriodEntries", required = true)
|
||||
@XmlElement(name = "Entry", required = true)
|
||||
public void setGracePeriodEntries(List<Entry> gracePeriodEntries) {
|
||||
this.gracePeriodEntries = gracePeriodEntries;
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement(name = "Select")
|
||||
public class Select {
|
||||
private String name;
|
||||
private String placeholder;
|
||||
private List<Option> options;
|
||||
|
||||
public String getPlaceholder() {
|
||||
return placeholder;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Placeholder", required = true)
|
||||
public void setPlaceholder(String placeholder) {
|
||||
this.placeholder = placeholder;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Name", required = true)
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<Option> getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "Options", required = true)
|
||||
@XmlElement(name = "Option")
|
||||
public void setOptions(List<Option> options) {
|
||||
this.options = options;
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "ServerUIConfiguration")
|
||||
public class ServerUIConfiguration {
|
||||
private String name;
|
||||
private String key;
|
||||
private String description;
|
||||
private PolicyEntries policyEntries;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Name", required = true)
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Key", required = true)
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Description")
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public PolicyEntries getPolicyEntries() {
|
||||
return policyEntries;
|
||||
}
|
||||
|
||||
@XmlElement(name = "PolicyEntries")
|
||||
public void setPolicyEntries(PolicyEntries policyEntries) {
|
||||
this.policyEntries = policyEntries;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Supportability")
|
||||
public class Supportability {
|
||||
private boolean support;
|
||||
private String infoText;
|
||||
private String defaultValue;
|
||||
|
||||
public boolean isSupport() {
|
||||
return support;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Support", defaultValue = "true")
|
||||
public void setSupport(boolean support) {
|
||||
this.support = support;
|
||||
}
|
||||
|
||||
public String getInfoText() {
|
||||
return infoText;
|
||||
}
|
||||
|
||||
@XmlElement(name = "InfoText")
|
||||
public void setInfoText(String infoText) {
|
||||
this.infoText = infoText;
|
||||
}
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
@XmlElement(name = "DefaultValue")
|
||||
public void setDefaultValue(String defaultValue) {
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Switch")
|
||||
public class Switch {
|
||||
private String name;
|
||||
private Toggle toggle;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Name", required = true)
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Toggle getToggle() {
|
||||
return toggle;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Toggle", required = true)
|
||||
public void setToggle(Toggle toggle) {
|
||||
this.toggle = toggle;
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.bean.ui;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "Toggle")
|
||||
public class Toggle {
|
||||
private String toggleOnValue;
|
||||
private String toggleOffValue;
|
||||
private String toggleOnLabel;
|
||||
private String toggleOffLabel;
|
||||
|
||||
public String getToggleOnValue() {
|
||||
return toggleOnValue;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ToggleOnValue", required = true)
|
||||
public void setToggleOnValue(String toggleOnValue) {
|
||||
this.toggleOnValue = toggleOnValue;
|
||||
}
|
||||
|
||||
public String getToggleOffValue() {
|
||||
return toggleOffValue;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ToggleOffValue", required = true)
|
||||
public void setToggleOffValue(String toggleOffValue) {
|
||||
this.toggleOffValue = toggleOffValue;
|
||||
}
|
||||
|
||||
public String getToggleOnLabel() {
|
||||
return toggleOnLabel;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ToggleOnLabel", required = true)
|
||||
public void setToggleOnLabel(String toggleOnLabel) {
|
||||
this.toggleOnLabel = toggleOnLabel;
|
||||
}
|
||||
|
||||
public String getToggleOffLabel() {
|
||||
return toggleOffLabel;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ToggleOffLabel", required = true)
|
||||
public void setToggleOffLabel(String toggleOffLabel) {
|
||||
this.toggleOffLabel = toggleOffLabel;
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.exception;
|
||||
|
||||
public class CEAConfigManagerException extends Exception {
|
||||
public CEAConfigManagerException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public CEAConfigManagerException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.exception;
|
||||
|
||||
public class CEAEnforcementException extends Exception {
|
||||
public CEAEnforcementException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public CEAEnforcementException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.exception;
|
||||
|
||||
public class CEAManagementException extends Exception {
|
||||
public CEAManagementException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public CEAManagementException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
|
||||
public CEAManagementException() {
|
||||
super();
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.exception;
|
||||
|
||||
public class CEAPolicyAlreadyExistsException extends Exception {
|
||||
public CEAPolicyAlreadyExistsException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.exception;
|
||||
|
||||
public class CEAPolicyNotFoundException extends Exception {
|
||||
public CEAPolicyNotFoundException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.exception;
|
||||
|
||||
public class EnforcementServiceManagerException extends Exception {
|
||||
public EnforcementServiceManagerException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public EnforcementServiceManagerException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.service;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAEnforcementException;
|
||||
|
||||
public interface CEAEnforcementService {
|
||||
/**
|
||||
* Sync default access policy with active sync server
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @throws CEAEnforcementException Throws when error occurred while enforcing the policy
|
||||
*/
|
||||
void enforceDefaultAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException;
|
||||
|
||||
/**
|
||||
* Enforce email outlook access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @throws CEAEnforcementException Throws when error occurred while enforcing the policy
|
||||
*/
|
||||
void enforceEmailOutlookAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException;
|
||||
|
||||
/**
|
||||
* Enforce POP/IMAP access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @throws CEAEnforcementException Throws when error occurred while enforcing the policy
|
||||
*/
|
||||
void enforcePOPIMAPAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException;
|
||||
|
||||
/**
|
||||
* Enforce web outlook access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @throws CEAEnforcementException Throws when error occurred while enforcing the policy
|
||||
*/
|
||||
void enforceWebOutlookAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException;
|
||||
|
||||
/**
|
||||
* Enforce conditional email access policy honoring to the grace period
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @throws CEAEnforcementException Throws when error occurred while enforcing the policy
|
||||
*/
|
||||
void enforceConditionalAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException;
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.service;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.CEAPolicyUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAManagementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyNotFoundException;
|
||||
|
||||
public interface CEAManagementService {
|
||||
/**
|
||||
* Retrieve conditional access policy UI configuration
|
||||
*
|
||||
* @return {@link CEAPolicyUIConfiguration}
|
||||
* @throws CEAManagementException Throws when retrieving UI configurations
|
||||
*/
|
||||
CEAPolicyUIConfiguration getCEAPolicyUIConfiguration() throws CEAManagementException;
|
||||
|
||||
/**
|
||||
* Create conditional access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @return {@link CEAPolicy} Created conditional access policy
|
||||
* @throws CEAManagementException Throws when error occurred while creating the policy
|
||||
* @throws CEAPolicyAlreadyExistsException Throws when conflict occurs
|
||||
*/
|
||||
CEAPolicy createCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException, CEAPolicyAlreadyExistsException;
|
||||
|
||||
/**
|
||||
* Retrieve conditional access policy for the tenant
|
||||
*
|
||||
* @return {@link CEAPolicy}
|
||||
* @throws CEAManagementException Throws when error occurred while retrieving the policy
|
||||
*/
|
||||
CEAPolicy retrieveCEAPolicy() throws CEAManagementException;
|
||||
|
||||
/**
|
||||
* Update conditional access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @return {@link CEAPolicy} Returns update conditional access policy
|
||||
* @throws CEAManagementException Throws when error occurred while updating the policy
|
||||
* @throws CEAPolicyNotFoundException Throws when policy doesn't exist
|
||||
*/
|
||||
CEAPolicy updateCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException, CEAPolicyNotFoundException;
|
||||
|
||||
/**
|
||||
* Delete the conditional access policy
|
||||
*
|
||||
* @throws CEAManagementException Throws when error occurred while deleting the policy
|
||||
* @throws CEAPolicyNotFoundException Throws when a conditional access policy doesn't exist
|
||||
*/
|
||||
void deleteCEAPolicy() throws CEAManagementException, CEAPolicyNotFoundException;
|
||||
|
||||
/**
|
||||
* Trigger sync task with active sync server
|
||||
*
|
||||
* @throws CEAManagementException Throws when error occurred while triggering the sync operation
|
||||
*/
|
||||
void syncNow() throws CEAManagementException;
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.service;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.EnforcementServiceManagerException;
|
||||
|
||||
public interface EnforcementServiceManager {
|
||||
/**
|
||||
* Return enforcement service implementation for the specified enforcement service class name
|
||||
*
|
||||
* @param enforcementServiceClassName Enforcement service class name
|
||||
* @return Return enforcement service implementation
|
||||
* @throws EnforcementServiceManagerException Throws when error occurred while generating enforcement service
|
||||
*/
|
||||
CEAEnforcementService getEnforcementService(String enforcementServiceClassName)
|
||||
throws EnforcementServiceManagerException;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.util;
|
||||
|
||||
public class Constants {
|
||||
public static final String EAS_KEY = "ENTGRA";
|
||||
public static final int MAX_GRACE_PERIOD_IN_DAYS = 30;
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.common.util;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.AndroidEASIdentifier;
|
||||
|
||||
public class EASMgtUtil {
|
||||
public static AndroidEASIdentifier generateAndroidEASIdentifier(String androidId) {
|
||||
AndroidEASIdentifier androidEASIdentifier = new AndroidEASIdentifier();
|
||||
androidEASIdentifier.setIdentifier((Constants.EAS_KEY + androidId).toUpperCase());
|
||||
return androidEASIdentifier;
|
||||
}
|
||||
|
||||
public static boolean isManageByUEM(AndroidEASIdentifier androidEASIdentifier) {
|
||||
if (androidEASIdentifier == null)
|
||||
throw new IllegalArgumentException("Null retrieved for Android EAS Identifier");
|
||||
return androidEASIdentifier.getIdentifier().startsWith(Constants.EAS_KEY);
|
||||
}
|
||||
|
||||
public static boolean isManageByUEM(String androidEASIdentifier) {
|
||||
if (androidEASIdentifier == null)
|
||||
throw new IllegalArgumentException("Null retrieved for Android EAS Identifier");
|
||||
return androidEASIdentifier.startsWith(Constants.EAS_KEY);
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2018 - 2024, 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.
|
||||
~
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>cea-mgt</artifactId>
|
||||
<version>5.0.38-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>io.entgra.device.mgt.core.cea.mgt.core</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>Entgra IoT - CEA Management Core</name>
|
||||
<description>Entgra IoT - Conditional Email Access Management Core</description>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||
<Bundle-Version>${io.entgra.device.mgt.core.version}</Bundle-Version>
|
||||
<Bundle-Description>CEA Management Core Bundle</Bundle-Description>
|
||||
<Private-Package>io.entgra.device.mgt.core.cea.mgt.core.internal</Private-Package>
|
||||
<Import-Package>
|
||||
org.osgi.framework.*;version="${imp.package.version.osgi.framework}",
|
||||
org.osgi.service.*;version="${imp.package.version.osgi.service}",
|
||||
org.apache.commons.logging,
|
||||
org.wso2.carbon.utils,
|
||||
org.wso2.carbon.context.*,
|
||||
org.wso2.carbon.ndatasource.core,
|
||||
io.entgra.device.mgt.core.cea.mgt.enforce.*,
|
||||
io.entgra.device.mgt.core.cea.mgt.common.*,
|
||||
io.entgra.device.mgt.core.device.mgt.common.*,
|
||||
io.entgra.device.mgt.core.device.mgt.core.*,
|
||||
org.wso2.carbon.ntask.*
|
||||
</Import-Package>
|
||||
<Export-Package>
|
||||
!io.entgra.device.mgt.core.cea.mgt.core.internal,
|
||||
io.entgra.device.mgt.core.cea.mgt.core.*
|
||||
</Export-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.cea.mgt.common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.cea.mgt.enforce</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.device.mgt.common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.ndatasource.core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.commons</groupId>
|
||||
<artifactId>org.wso2.carbon.ntask.core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.device.mgt.core</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.bean;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "ActiveSyncServerConfiguration")
|
||||
public class ActiveSyncServerConfiguration {
|
||||
private String key;
|
||||
private String gatewayService;
|
||||
private String enforcementService;
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
@XmlElement(name = "Key", required = true)
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String getGatewayService() {
|
||||
return gatewayService;
|
||||
}
|
||||
|
||||
@XmlElement(name = "GatewayService", required = true)
|
||||
public void setGatewayService(String gatewayService) {
|
||||
this.gatewayService = gatewayService;
|
||||
}
|
||||
|
||||
public String getEnforcementService() {
|
||||
return enforcementService;
|
||||
}
|
||||
|
||||
@XmlElement(name = "EnforcementService", required = true)
|
||||
public void setEnforcementService(String enforcementService) {
|
||||
this.enforcementService = enforcementService;
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.bean;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@XmlRootElement(name = "CEAConfiguration")
|
||||
public class CEAConfiguration {
|
||||
private List<ActiveSyncServerConfiguration> activeSyncServerConfigurations;
|
||||
private MonitoringConfiguration monitoringConfiguration;
|
||||
|
||||
public List<ActiveSyncServerConfiguration> getActiveSyncServerConfigurations() {
|
||||
return activeSyncServerConfigurations;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "ActiveSyncServerConfigurations", required = true)
|
||||
@XmlElement(name = "ActiveSyncServerConfiguration", required = true)
|
||||
public void setActiveSyncServerConfigurations(List<ActiveSyncServerConfiguration> activeSyncServerConfigurations) {
|
||||
this.activeSyncServerConfigurations = activeSyncServerConfigurations;
|
||||
}
|
||||
|
||||
public ActiveSyncServerConfiguration getActiveSyncServerConfiguration(ActiveSyncServer activeSyncServer) {
|
||||
ActiveSyncServerConfiguration activeSyncServerConfiguration = null;
|
||||
for (ActiveSyncServerConfiguration config : activeSyncServerConfigurations) {
|
||||
if (Objects.equals(config.getKey(), activeSyncServer.getKey())) {
|
||||
activeSyncServerConfiguration = config;
|
||||
}
|
||||
}
|
||||
return activeSyncServerConfiguration;
|
||||
}
|
||||
|
||||
public boolean isServerSupport(ActiveSyncServer activeSyncServer) {
|
||||
for (ActiveSyncServerConfiguration config : activeSyncServerConfigurations) {
|
||||
if (Objects.equals(config.getKey(), activeSyncServer.getKey())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public MonitoringConfiguration getMonitoringConfiguration() {
|
||||
return monitoringConfiguration;
|
||||
}
|
||||
|
||||
@XmlElement(name = "MonitoringConfiguration", required = true)
|
||||
public void setMonitoringConfiguration(MonitoringConfiguration monitoringConfiguration) {
|
||||
this.monitoringConfiguration = monitoringConfiguration;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.bean;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "MonitoringConfiguration")
|
||||
public class MonitoringConfiguration {
|
||||
private boolean monitoringEnable;
|
||||
private long monitoringFrequency;
|
||||
private String monitoringClazz;
|
||||
|
||||
public boolean isMonitoringEnable() {
|
||||
return monitoringEnable;
|
||||
}
|
||||
|
||||
@XmlElement(name = "MonitoringEnable", required = true)
|
||||
public void setMonitoringEnable(boolean monitoringEnable) {
|
||||
this.monitoringEnable = monitoringEnable;
|
||||
}
|
||||
|
||||
public long getMonitoringFrequency() {
|
||||
return monitoringFrequency;
|
||||
}
|
||||
|
||||
@XmlElement(name = "MonitoringFrequency", required = true)
|
||||
public void setMonitoringFrequency(long monitoringFrequency) {
|
||||
this.monitoringFrequency = monitoringFrequency;
|
||||
}
|
||||
|
||||
public String getMonitoringClazz() {
|
||||
return monitoringClazz;
|
||||
}
|
||||
|
||||
@XmlElement(name = "MonitoringClazz", required = true)
|
||||
public void setMonitoringClazz(String monitoringClazz) {
|
||||
this.monitoringClazz = monitoringClazz;
|
||||
}
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.config;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.CEAPolicyUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAConfigManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.bean.CEAConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.datasource.CEADeviceMgtConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.datasource.CEAPolicyManagementRepository;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.util.Constants;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.utils.CarbonUtils;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
import java.io.File;
|
||||
|
||||
public class CEAConfigManager {
|
||||
private static final Log log = LogFactory.getLog(CEAConfigManager.class);
|
||||
|
||||
private static final String CDM_CONFIG_PATH = CarbonUtils.getCarbonConfigDirPath() + File.separator +
|
||||
Constants.CDM_CONFIG_FILE_NAME;
|
||||
private static final String CEA_UI_CONFIG_PATH = CarbonUtils.getCarbonConfigDirPath() + File.separator +
|
||||
Constants.CEA_POLICY_UI_FILE_NAME;
|
||||
private static final String CEA_CONFIG_PATH = CarbonUtils.getCarbonConfigDirPath() + File.separator +
|
||||
Constants.CEA_CONFIG_FILE_NAME;
|
||||
private CEAPolicyManagementRepository ceaPolicyManagementRepository;
|
||||
private CEAConfiguration ceaConfiguration;
|
||||
private CEAPolicyUIConfiguration ceaPolicyUIConfiguration;
|
||||
|
||||
CEAConfigManager() {
|
||||
}
|
||||
|
||||
public static CEAConfigManager getInstance() {
|
||||
return CEAConfigManagerHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private <T> T initConfig(String docPath, Class<T> configClass) throws JAXBException {
|
||||
File doc = new File(docPath);
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(configClass);
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
return configClass.cast(jaxbUnmarshaller.unmarshal(doc));
|
||||
}
|
||||
|
||||
private void initDatasourceConfig() throws JAXBException {
|
||||
ceaPolicyManagementRepository = initConfig(CDM_CONFIG_PATH, CEADeviceMgtConfiguration.class)
|
||||
.getCeaPolicyManagementRepository();
|
||||
}
|
||||
|
||||
private void initCEAPConfig() throws JAXBException {
|
||||
ceaConfiguration = initConfig(CEA_CONFIG_PATH, CEAConfiguration.class);
|
||||
}
|
||||
|
||||
private void initCEAPolicyUIConfig() throws JAXBException {
|
||||
ceaPolicyUIConfiguration = initConfig(CEA_UI_CONFIG_PATH, CEAPolicyUIConfiguration.class);
|
||||
}
|
||||
|
||||
public CEAPolicyManagementRepository getCeaPolicyManagementRepository() throws CEAConfigManagerException {
|
||||
try {
|
||||
if (ceaPolicyManagementRepository == null) {
|
||||
initDatasourceConfig();
|
||||
}
|
||||
return ceaPolicyManagementRepository;
|
||||
} catch (JAXBException e) {
|
||||
String msg = "Error occurred while initializing datasource configuration";
|
||||
throw new CEAConfigManagerException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public CEAConfiguration getCeaConfiguration() throws CEAConfigManagerException {
|
||||
try {
|
||||
if (ceaConfiguration == null) {
|
||||
initCEAPConfig();
|
||||
}
|
||||
return ceaConfiguration;
|
||||
} catch (JAXBException e) {
|
||||
String msg = "Error occurred while initializing CEA configuration";
|
||||
throw new CEAConfigManagerException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public CEAPolicyUIConfiguration getCeaPolicyUIConfiguration() throws CEAConfigManagerException {
|
||||
try {
|
||||
if (ceaPolicyUIConfiguration == null) {
|
||||
initCEAPolicyUIConfig();
|
||||
}
|
||||
return ceaPolicyUIConfiguration;
|
||||
} catch (JAXBException e) {
|
||||
String msg = "Error occurred while initializing policy UI configuration";
|
||||
throw new CEAConfigManagerException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
private static class CEAConfigManagerHolder {
|
||||
public static final CEAConfigManager INSTANCE = new CEAConfigManager();
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.config.datasource;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "DataSourceConfiguration")
|
||||
public class CEADatasourceConfiguration {
|
||||
private JNDILookupDefinition jndiLookupDefinition;
|
||||
|
||||
public JNDILookupDefinition getJndiLookupDefinition() {
|
||||
return jndiLookupDefinition;
|
||||
}
|
||||
|
||||
@XmlElement(name = "JndiLookupDefinition", nillable = true)
|
||||
public void setJndiLookupDefinition(JNDILookupDefinition jndiLookupDefinition) {
|
||||
this.jndiLookupDefinition = jndiLookupDefinition;
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.config.datasource;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "DeviceMgtConfiguration")
|
||||
public class CEADeviceMgtConfiguration {
|
||||
private CEAPolicyManagementRepository ceaPolicyManagementRepository;
|
||||
|
||||
public CEAPolicyManagementRepository getCeaPolicyManagementRepository() {
|
||||
return ceaPolicyManagementRepository;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ManagementRepository", nillable = false)
|
||||
public void setCeaPolicyManagementRepository(CEAPolicyManagementRepository ceaPolicyManagementRepository) {
|
||||
this.ceaPolicyManagementRepository = ceaPolicyManagementRepository;
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.config.datasource;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "ManagementRepository")
|
||||
public class CEAPolicyManagementRepository {
|
||||
private CEADatasourceConfiguration ceaDatasourceConfiguration;
|
||||
|
||||
@XmlElement(name = "DataSourceConfiguration", nillable = false)
|
||||
public CEADatasourceConfiguration getDataSourceConfig() {
|
||||
return ceaDatasourceConfiguration;
|
||||
}
|
||||
|
||||
public void setDataSourceConfig(CEADatasourceConfiguration ceaDatasourceConfiguration) {
|
||||
this.ceaDatasourceConfiguration = ceaDatasourceConfiguration;
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.config.datasource;
|
||||
|
||||
import javax.xml.bind.annotation.*;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement(name = "JndiLookupDefinition")
|
||||
public class JNDILookupDefinition {
|
||||
private String jndiName;
|
||||
private List<JNDIProperty> jndiProperties;
|
||||
|
||||
@XmlElement(name = "Name", nillable = false)
|
||||
public String getJndiName() {
|
||||
return jndiName;
|
||||
}
|
||||
|
||||
public void setJndiName(String jndiName) {
|
||||
this.jndiName = jndiName;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "Environment", nillable = false)
|
||||
@XmlElement(name = "Property", nillable = false)
|
||||
public List<JNDIProperty> getJndiProperties() {
|
||||
return jndiProperties;
|
||||
}
|
||||
|
||||
public void setJndiProperties(List<JNDIProperty> jndiProperties) {
|
||||
this.jndiProperties = jndiProperties;
|
||||
}
|
||||
|
||||
@XmlRootElement(name = "Property")
|
||||
public static class JNDIProperty {
|
||||
|
||||
private String name;
|
||||
|
||||
private String value;
|
||||
|
||||
@XmlAttribute(name = "Name")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@XmlValue
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.dao;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyManagementDAOException;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* DAO class for Conditional Email Access management
|
||||
*/
|
||||
public interface CEAPolicyDAO {
|
||||
/**
|
||||
* Create CEA policy for a tenant if a CEA policy not already exists
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @return Created CEA policy
|
||||
* @throws CEAPolicyManagementDAOException Throws when error occurred while creating CEA policy
|
||||
*/
|
||||
CEAPolicy createCEAPolicy(CEAPolicy ceaPolicy) throws CEAPolicyManagementDAOException;
|
||||
|
||||
/**
|
||||
* Retrieve CEA policy
|
||||
* @return {@link CEAPolicy}
|
||||
* @throws CEAPolicyManagementDAOException Throws when error occurred while retrieving CEA policy
|
||||
*/
|
||||
CEAPolicy retrieveCEAPolicy() throws CEAPolicyManagementDAOException;
|
||||
|
||||
/**
|
||||
* Retrieve all available CEA policies
|
||||
* @return List of CEA policies
|
||||
* @throws CEAPolicyManagementDAOException Throws when error occurred while retrieving CEA policies
|
||||
*/
|
||||
List<CEAPolicy> retrieveAllCEAPolicies() throws CEAPolicyManagementDAOException;
|
||||
|
||||
/**
|
||||
* Update CEA policy
|
||||
* @param existingCEAPolicy Existing CEA policy
|
||||
* @param ceaPolicy Updated CEA policy
|
||||
* @return Updated CEA policy
|
||||
* @throws CEAPolicyManagementDAOException Throws when error occurred while updating CEA policy
|
||||
*/
|
||||
CEAPolicy updateCEAPolicy(CEAPolicy existingCEAPolicy, CEAPolicy ceaPolicy) throws CEAPolicyManagementDAOException;
|
||||
|
||||
/**
|
||||
* Update last sync time with the active sync server
|
||||
* @param status True on a successful sync, otherwise false
|
||||
* @param syncedTime Synced time stamp
|
||||
* @throws CEAPolicyManagementDAOException Throws when error occurred while updating sync time
|
||||
*/
|
||||
void updateLastSyncedTime(boolean status, Date syncedTime) throws CEAPolicyManagementDAOException;
|
||||
|
||||
/**
|
||||
* Delete CEA policy
|
||||
* @throws CEAPolicyManagementDAOException Throws when error occurred while deleting CEA policy
|
||||
*/
|
||||
void deleteCEAPolicy() throws CEAPolicyManagementDAOException;
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.dao.factory;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.datasource.CEADatasourceConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.datasource.JNDILookupDefinition;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.CEAPolicyDAO;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.impl.GenericCEAPolicyDAO;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyManagementDAOException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.DeviceManagementConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.IllegalTransactionStateException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.UnsupportedDatabaseEngineException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import javax.naming.InitialContext;
|
||||
import javax.naming.NamingException;
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
|
||||
public class CEAPolicyManagementDAOFactory {
|
||||
private static final Log log = LogFactory.getLog(CEAPolicyManagementDAOFactory.class);
|
||||
private static final ThreadLocal<Connection> currentConnection = new ThreadLocal<>();
|
||||
private static DataSource dataSource;
|
||||
private static String productName;
|
||||
|
||||
public static void init(CEADatasourceConfiguration ceaDatasourceConfiguration) {
|
||||
dataSource = resolveDatasource(ceaDatasourceConfiguration);
|
||||
if (dataSource == null) {
|
||||
throw new IllegalStateException("Datasource is not initialized properly");
|
||||
}
|
||||
try {
|
||||
productName = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while initializing database product name");
|
||||
}
|
||||
}
|
||||
|
||||
private static DataSource resolveDatasource(CEADatasourceConfiguration ceaDatasourceConfiguration) {
|
||||
if (ceaDatasourceConfiguration == null) {
|
||||
throw new IllegalArgumentException("Null is retrieved for Datasource configuration");
|
||||
}
|
||||
JNDILookupDefinition jndiLookupDefinition = ceaDatasourceConfiguration.getJndiLookupDefinition();
|
||||
if (jndiLookupDefinition == null) {
|
||||
throw new IllegalArgumentException("Null is retrieved for JNDI lookup definition");
|
||||
}
|
||||
String datasourceName = jndiLookupDefinition.getJndiName();
|
||||
List<JNDILookupDefinition.JNDIProperty> jndiProperties = ceaDatasourceConfiguration.getJndiLookupDefinition().getJndiProperties();
|
||||
|
||||
if (jndiProperties == null || jndiProperties.isEmpty()) {
|
||||
return lookupDatasource(datasourceName);
|
||||
}
|
||||
Hashtable<Object, Object> jndiPropertiesTable = new Hashtable<>();
|
||||
for (JNDILookupDefinition.JNDIProperty property : jndiProperties) {
|
||||
jndiPropertiesTable.put(property.getName(), property.getValue());
|
||||
}
|
||||
return lookupDatasource(datasourceName, jndiPropertiesTable);
|
||||
}
|
||||
|
||||
private static DataSource lookupDatasource(String datasourceName) {
|
||||
try {
|
||||
return InitialContext.doLookup(datasourceName);
|
||||
} catch (NamingException e) {
|
||||
String msg = "Error occurred while JNDI lookup for the datasource";
|
||||
throw new IllegalStateException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
private static DataSource lookupDatasource(String datasourceName, Hashtable<Object, Object> jndiProperties) {
|
||||
try {
|
||||
InitialContext initialContext = new InitialContext(jndiProperties);
|
||||
return (DataSource) initialContext.lookup(datasourceName);
|
||||
} catch (NamingException e) {
|
||||
String msg = "Error occurred while JNDI lookup for the datasource";
|
||||
throw new IllegalStateException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static CEAPolicyDAO getCEAPolicyDAO() {
|
||||
if (productName == null) {
|
||||
throw new IllegalStateException("Database is not initialized properly");
|
||||
}
|
||||
|
||||
switch (productName) {
|
||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL:
|
||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:
|
||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE:
|
||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_DB2:
|
||||
return new GenericCEAPolicyDAO();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database product " + productName);
|
||||
}
|
||||
}
|
||||
|
||||
public static void openConnection() throws CEAPolicyManagementDAOException {
|
||||
Connection connection = currentConnection.get();
|
||||
if (connection != null) {
|
||||
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
|
||||
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
|
||||
"transaction is already active is a sign of improper transaction handling");
|
||||
}
|
||||
try {
|
||||
connection = dataSource.getConnection();
|
||||
currentConnection.set(connection);
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error encountered while acquiring connection from the datasource";
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Connection getConnection() {
|
||||
Connection connection = currentConnection.get();
|
||||
if (connection == null) {
|
||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
||||
"'beginTransaction'/'openConnection' methods");
|
||||
}
|
||||
return connection;
|
||||
}
|
||||
|
||||
public static void closeConnection() {
|
||||
Connection connection = currentConnection.get();
|
||||
if (connection == null) {
|
||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
||||
"'beginTransaction'/'openConnection' methods");
|
||||
}
|
||||
try {
|
||||
connection.close();
|
||||
} catch (SQLException e) {
|
||||
log.warn("Error encountered while closing the connection", e);
|
||||
}
|
||||
currentConnection.remove();
|
||||
}
|
||||
|
||||
public static void beginTransaction() throws CEAPolicyManagementDAOException {
|
||||
Connection connection = currentConnection.get();
|
||||
if (connection == null) {
|
||||
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
|
||||
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
|
||||
"transaction is already active is a sign of improper transaction handling");
|
||||
}
|
||||
try {
|
||||
connection = dataSource.getConnection();
|
||||
connection.setAutoCommit(false);
|
||||
currentConnection.set(connection);
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error encountered while acquiring connection from the datasource";
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void rollbackTransaction() {
|
||||
Connection connection = currentConnection.get();
|
||||
if (connection == null) {
|
||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
||||
"'beginTransaction'/'openConnection' methods");
|
||||
}
|
||||
try {
|
||||
connection.rollback();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error encountered while performing rollback operation on transaction", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void commitTransaction() {
|
||||
Connection connection = currentConnection.get();
|
||||
if (connection == null) {
|
||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
||||
"'beginTransaction'/'openConnection' methods");
|
||||
}
|
||||
try {
|
||||
connection.commit();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error encountered while committing the transaction", e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.dao.impl;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.CEAPolicyDAO;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.factory.CEAPolicyManagementDAOFactory;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dto.CEAPolicyContent;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dto.CEAPolicyDTO;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyManagementDAOException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class AbstractCEAPolicyDAO implements CEAPolicyDAO {
|
||||
private static final Log log = LogFactory.getLog(AbstractCEAPolicyDAO.class);
|
||||
private static final Gson gson = new Gson();
|
||||
|
||||
@Override
|
||||
public CEAPolicy createCEAPolicy(CEAPolicy ceaPolicy) throws CEAPolicyManagementDAOException {
|
||||
ceaPolicy.setCreated(new Date());
|
||||
ceaPolicy.setLastUpdated(new Date());
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
ceaPolicy.setTenantId(tenantId);
|
||||
CEAPolicyDTO ceaPolicyDTO = toCEAPolicyDTO(ceaPolicy);
|
||||
String query = "INSERT INTO DM_CEA_POLICIES " +
|
||||
"(POLICY_CONTENT, " +
|
||||
"CREATED_TIMESTAMP, " +
|
||||
"UPDATED_TIMESTAMP, " +
|
||||
"TENANT_ID) VALUES (?, ?, ?, ?)";
|
||||
Connection connection = CEAPolicyManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
|
||||
preparedStatement.setString(1, ceaPolicyDTO.getPolicyContent());
|
||||
preparedStatement.setTimestamp(2, ceaPolicyDTO.getCreatedTimestamp());
|
||||
preparedStatement.setTimestamp(3, ceaPolicyDTO.getUpdatedTimestamp());
|
||||
preparedStatement.setInt(4, tenantId);
|
||||
preparedStatement.execute();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while creating CEA policy for tenant id : " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
return ceaPolicy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy retrieveCEAPolicy() throws CEAPolicyManagementDAOException {
|
||||
CEAPolicy ceaPolicy = null;
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
String query = "SELECT POLICY_CONTENT, " +
|
||||
"CREATED_TIMESTAMP, " +
|
||||
"UPDATED_TIMESTAMP, " +
|
||||
"LAST_SYNCED_TIMESTAMP, " +
|
||||
"IS_SYNCED " +
|
||||
"FROM DM_CEA_POLICIES WHERE TENANT_ID = ?";
|
||||
Connection connection = CEAPolicyManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
try (ResultSet resultSet = preparedStatement.executeQuery()) {
|
||||
CEAPolicyDTO ceaPolicyDTO;
|
||||
while (resultSet.next()) {
|
||||
ceaPolicyDTO = new CEAPolicyDTO();
|
||||
ceaPolicyDTO.setPolicyContent(resultSet.getString("POLICY_CONTENT"));
|
||||
ceaPolicyDTO.setCreatedTimestamp(resultSet.getTimestamp("CREATED_TIMESTAMP"));
|
||||
ceaPolicyDTO.setUpdatedTimestamp(resultSet.getTimestamp("UPDATED_TIMESTAMP"));
|
||||
ceaPolicyDTO.setLastSyncedTimestamp(resultSet.getTimestamp("LAST_SYNCED_TIMESTAMP"));
|
||||
ceaPolicyDTO.setSynced(resultSet.getBoolean("IS_SYNCED"));
|
||||
ceaPolicyDTO.setTenantId(tenantId);
|
||||
ceaPolicy = toCEAPolicy(ceaPolicyDTO);
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while retrieving CEA policy for tenant id : " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
return ceaPolicy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CEAPolicy> retrieveAllCEAPolicies() throws CEAPolicyManagementDAOException {
|
||||
List<CEAPolicy> ceaPolicies = new ArrayList<>();
|
||||
String query = "SELECT POLICY_CONTENT, " +
|
||||
"CREATED_TIMESTAMP, " +
|
||||
"UPDATED_TIMESTAMP, " +
|
||||
"LAST_SYNCED_TIMESTAMP, " +
|
||||
"IS_SYNCED, " +
|
||||
"TENANT_ID FROM DM_CEA_POLICIES";
|
||||
Connection connection = CEAPolicyManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
|
||||
try (ResultSet resultSet = preparedStatement.executeQuery()) {
|
||||
CEAPolicyDTO ceaPolicyDTO;
|
||||
while (resultSet.next()) {
|
||||
ceaPolicyDTO = new CEAPolicyDTO();
|
||||
ceaPolicyDTO.setPolicyContent(resultSet.getString("POLICY_CONTENT"));
|
||||
ceaPolicyDTO.setCreatedTimestamp(resultSet.getTimestamp("CREATED_TIMESTAMP"));
|
||||
ceaPolicyDTO.setUpdatedTimestamp(resultSet.getTimestamp("UPDATED_TIMESTAMP"));
|
||||
ceaPolicyDTO.setLastSyncedTimestamp(resultSet.getTimestamp("LAST_SYNCED_TIMESTAMP"));
|
||||
ceaPolicyDTO.setSynced(resultSet.getBoolean("IS_SYNCED"));
|
||||
ceaPolicyDTO.setTenantId(resultSet.getInt("TENANT_ID"));
|
||||
ceaPolicies.add(toCEAPolicy(ceaPolicyDTO));
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while retrieving All CEA policies";
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
return ceaPolicies;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy updateCEAPolicy(CEAPolicy existingCEAPolicy, CEAPolicy ceaPolicy) throws CEAPolicyManagementDAOException {
|
||||
ceaPolicy.setCreated(existingCEAPolicy.getCreated());
|
||||
ceaPolicy.setSynced(existingCEAPolicy.isSynced());
|
||||
ceaPolicy.setLastSynced(existingCEAPolicy.getLastSynced());
|
||||
ceaPolicy.setLastUpdated(new Date());
|
||||
CEAPolicyDTO ceaPolicyDTO = toCEAPolicyDTO(ceaPolicy);
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
String query = "UPDATE DM_CEA_POLICIES " +
|
||||
"SET POLICY_CONTENT = ?, " +
|
||||
"UPDATED_TIMESTAMP = ? " +
|
||||
"WHERE TENANT_ID = ?";
|
||||
Connection connection = CEAPolicyManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
|
||||
preparedStatement.setString(1, ceaPolicyDTO.getPolicyContent());
|
||||
preparedStatement.setTimestamp(2, ceaPolicyDTO.getUpdatedTimestamp());
|
||||
preparedStatement.setInt(3, tenantId);
|
||||
preparedStatement.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while updating CEA policy for tenant id : " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
return ceaPolicy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLastSyncedTime(boolean status, Date syncedTime) throws CEAPolicyManagementDAOException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
String query = "UPDATE DM_CEA_POLICIES " +
|
||||
"SET LAST_SYNCED_TIMESTAMP = ?, " +
|
||||
"IS_SYNCED = ? " +
|
||||
"WHERE TENANT_ID = ?";
|
||||
Connection connection = CEAPolicyManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
|
||||
preparedStatement.setTimestamp(1, new Timestamp(syncedTime.getTime()));
|
||||
preparedStatement.setBoolean(2, status);
|
||||
preparedStatement.setInt(3, tenantId);
|
||||
preparedStatement.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while updating CEA policy last sync timestamp for tenant id : " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteCEAPolicy() throws CEAPolicyManagementDAOException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
String query = "DELETE FROM DM_CEA_POLICIES WHERE TENANT_ID = ?";
|
||||
Connection connection = CEAPolicyManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
preparedStatement.execute();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while deleting CEA policy for tenant id : " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
private CEAPolicyDTO toCEAPolicyDTO(CEAPolicy ceaPolicy) throws CEAPolicyManagementDAOException {
|
||||
if (ceaPolicy == null) {
|
||||
throw new CEAPolicyManagementDAOException("CEAPolicy can't be null");
|
||||
}
|
||||
CEAPolicyDTO ceaPolicyDTO = new CEAPolicyDTO();
|
||||
CEAPolicyContent ceaPolicyContent = new CEAPolicyContent();
|
||||
ActiveSyncServer activeSyncServer = new ActiveSyncServer();
|
||||
activeSyncServer.setSecret(Base64.getEncoder().
|
||||
encodeToString(ceaPolicy.getActiveSyncServer().getSecret().getBytes(StandardCharsets.UTF_8)));
|
||||
activeSyncServer.setClient(ceaPolicy.getActiveSyncServer().getClient());
|
||||
activeSyncServer.setKey(ceaPolicy.getActiveSyncServer().getKey());
|
||||
activeSyncServer.setGatewayUrl(ceaPolicy.getActiveSyncServer().getGatewayUrl());
|
||||
ceaPolicyContent.setAccessPolicy(ceaPolicy.getAccessPolicy());
|
||||
ceaPolicyContent.setGracePeriod(ceaPolicy.getGracePeriod());
|
||||
ceaPolicyContent.setActiveSyncServer(activeSyncServer);
|
||||
ceaPolicyDTO.setPolicyContent(gson.toJson(ceaPolicyContent));
|
||||
ceaPolicyDTO.setSynced(ceaPolicy.isSynced());
|
||||
ceaPolicyDTO.setCreatedTimestamp(new Timestamp(ceaPolicy.getCreated().getTime()));
|
||||
ceaPolicyDTO.setUpdatedTimestamp(new Timestamp(ceaPolicy.getLastUpdated().getTime()));
|
||||
ceaPolicyDTO.setTenantId(ceaPolicy.getTenantId());
|
||||
if (ceaPolicy.getLastSynced() != null) {
|
||||
ceaPolicyDTO.setLastSyncedTimestamp(new Timestamp(ceaPolicy.getLastSynced().getTime()));
|
||||
}
|
||||
return ceaPolicyDTO;
|
||||
}
|
||||
|
||||
private CEAPolicy toCEAPolicy(CEAPolicyDTO ceaPolicyDTO) throws CEAPolicyManagementDAOException{
|
||||
if (ceaPolicyDTO == null) {
|
||||
throw new CEAPolicyManagementDAOException("CEAPolicyDTO can't be null");
|
||||
}
|
||||
CEAPolicy ceaPolicy = new CEAPolicy();
|
||||
CEAPolicyContent ceaPolicyContent = gson.fromJson(ceaPolicyDTO.getPolicyContent(), CEAPolicyContent.class);
|
||||
ActiveSyncServer activeSyncServer = ceaPolicyContent.getActiveSyncServer();
|
||||
activeSyncServer.setSecret(new String(Base64.getDecoder().decode(activeSyncServer.getSecret())));
|
||||
ceaPolicy.setActiveSyncServer(activeSyncServer);
|
||||
ceaPolicy.setAccessPolicy(ceaPolicyContent.getAccessPolicy());
|
||||
ceaPolicy.setGracePeriod(ceaPolicyContent.getGracePeriod());
|
||||
ceaPolicy.setLastUpdated(new Date(ceaPolicyDTO.getUpdatedTimestamp().getTime()));
|
||||
ceaPolicy.setSynced(ceaPolicyDTO.isSynced());
|
||||
ceaPolicy.setTenantId(ceaPolicyDTO.getTenantId());
|
||||
if (ceaPolicyDTO.getLastSyncedTimestamp() != null) {
|
||||
ceaPolicy.setLastSynced(new Date(ceaPolicyDTO.getLastSyncedTimestamp().getTime()));
|
||||
}
|
||||
ceaPolicy.setCreated(new Date(ceaPolicyDTO.getCreatedTimestamp().getTime()));
|
||||
return ceaPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.dao.impl;
|
||||
|
||||
public class GenericCEAPolicyDAO extends AbstractCEAPolicyDAO {
|
||||
public GenericCEAPolicyDAO() {
|
||||
super();
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.dto;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.AccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.GracePeriod;
|
||||
|
||||
public class CEAPolicyContent {
|
||||
private ActiveSyncServer activeSyncServer;
|
||||
private GracePeriod gracePeriod;
|
||||
private AccessPolicy accessPolicy;
|
||||
|
||||
public ActiveSyncServer getActiveSyncServer() {
|
||||
return activeSyncServer;
|
||||
}
|
||||
|
||||
public void setActiveSyncServer(ActiveSyncServer activeSyncServer) {
|
||||
this.activeSyncServer = activeSyncServer;
|
||||
}
|
||||
|
||||
public GracePeriod getGracePeriod() {
|
||||
return gracePeriod;
|
||||
}
|
||||
|
||||
public void setGracePeriod(GracePeriod gracePeriod) {
|
||||
this.gracePeriod = gracePeriod;
|
||||
}
|
||||
|
||||
public AccessPolicy getAccessPolicy() {
|
||||
return accessPolicy;
|
||||
}
|
||||
|
||||
public void setAccessPolicy(AccessPolicy accessPolicy) {
|
||||
this.accessPolicy = accessPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.dto;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
|
||||
public class CEAPolicyDTO {
|
||||
private String policyContent;
|
||||
private Timestamp createdTimestamp;
|
||||
private Timestamp updatedTimestamp;
|
||||
private Timestamp lastSyncedTimestamp;
|
||||
private boolean isSynced;
|
||||
private int tenantId;
|
||||
|
||||
public String getPolicyContent() {
|
||||
return policyContent;
|
||||
}
|
||||
|
||||
public void setPolicyContent(String policyContent) {
|
||||
this.policyContent = policyContent;
|
||||
}
|
||||
|
||||
public Timestamp getCreatedTimestamp() {
|
||||
return createdTimestamp;
|
||||
}
|
||||
|
||||
public void setCreatedTimestamp(Timestamp createdTimestamp) {
|
||||
this.createdTimestamp = createdTimestamp;
|
||||
}
|
||||
|
||||
public Timestamp getUpdatedTimestamp() {
|
||||
return updatedTimestamp;
|
||||
}
|
||||
|
||||
public void setUpdatedTimestamp(Timestamp updatedTimestamp) {
|
||||
this.updatedTimestamp = updatedTimestamp;
|
||||
}
|
||||
|
||||
public Timestamp getLastSyncedTimestamp() {
|
||||
return lastSyncedTimestamp;
|
||||
}
|
||||
|
||||
public void setLastSyncedTimestamp(Timestamp lastSyncedTimestamp) {
|
||||
this.lastSyncedTimestamp = lastSyncedTimestamp;
|
||||
}
|
||||
|
||||
public boolean isSynced() {
|
||||
return isSynced;
|
||||
}
|
||||
|
||||
public void setSynced(boolean synced) {
|
||||
isSynced = synced;
|
||||
}
|
||||
|
||||
public int getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public void setTenantId(int tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.exception;
|
||||
|
||||
public class CEAPolicyManagementDAOException extends Exception {
|
||||
public CEAPolicyManagementDAOException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public CEAPolicyManagementDAOException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.exception;
|
||||
|
||||
public class CEAPolicyMonitoringTaskManagerException extends Exception {
|
||||
public CEAPolicyMonitoringTaskManagerException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public CEAPolicyMonitoringTaskManagerException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.impl;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.CEAPolicyUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAManagementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyNotFoundException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.CEAManagementService;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.mgt.CEAManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.mgt.impl.CEAManagerImpl;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class CEAManagementServiceImpl implements CEAManagementService {
|
||||
private static final Log log = LogFactory.getLog(CEAManagementServiceImpl.class);
|
||||
|
||||
private final CEAManager ceaManager;
|
||||
|
||||
public CEAManagementServiceImpl() {
|
||||
ceaManager = CEAManagerImpl.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicyUIConfiguration getCEAPolicyUIConfiguration() throws CEAManagementException {
|
||||
return ceaManager.getCEAPolicyUIConfiguration();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy createCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException,
|
||||
CEAPolicyAlreadyExistsException {
|
||||
return ceaManager.createCEAPolicy(ceaPolicy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy retrieveCEAPolicy() throws CEAManagementException {
|
||||
return ceaManager.retrieveCEAPolicy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy updateCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException, CEAPolicyNotFoundException {
|
||||
return ceaManager.updateCEAPolicy(ceaPolicy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteCEAPolicy() throws CEAManagementException, CEAPolicyNotFoundException {
|
||||
ceaManager.deleteCEAPolicy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncNow() throws CEAManagementException {
|
||||
ceaManager.syncNow();
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.internal;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.EnforcementServiceManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.task.CEAPolicyMonitoringTaskManager;
|
||||
import org.wso2.carbon.ntask.core.service.TaskService;
|
||||
|
||||
public class CEAManagementDataHolder {
|
||||
private EnforcementServiceManager enforcementServiceManager;
|
||||
private TaskService taskService;
|
||||
private CEAPolicyMonitoringTaskManager ceaPolicyMonitoringTaskManager;
|
||||
|
||||
private CEAManagementDataHolder() {}
|
||||
|
||||
public static CEAManagementDataHolder getInstance() {
|
||||
return CEAManagementDataHolderRegistry.INSTANCE;
|
||||
}
|
||||
|
||||
public EnforcementServiceManager getEnforcementServiceManager() {
|
||||
return enforcementServiceManager;
|
||||
}
|
||||
|
||||
public void setEnforcementServiceManager(EnforcementServiceManager enforcementServiceManager) {
|
||||
this.enforcementServiceManager = enforcementServiceManager;
|
||||
}
|
||||
|
||||
public TaskService getTaskService() {
|
||||
return taskService;
|
||||
}
|
||||
|
||||
public void setTaskService(TaskService taskService) {
|
||||
this.taskService = taskService;
|
||||
}
|
||||
|
||||
public CEAPolicyMonitoringTaskManager getCeaPolicyMonitoringTaskManager() {
|
||||
return ceaPolicyMonitoringTaskManager;
|
||||
}
|
||||
|
||||
public void setCeaPolicyMonitoringTaskManager(CEAPolicyMonitoringTaskManager ceaPolicyMonitoringTaskManager) {
|
||||
this.ceaPolicyMonitoringTaskManager = ceaPolicyMonitoringTaskManager;
|
||||
}
|
||||
|
||||
private static class CEAManagementDataHolderRegistry {
|
||||
public static final CEAManagementDataHolder INSTANCE = new CEAManagementDataHolder();
|
||||
}
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.internal;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.CEAManagementService;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.EnforcementServiceManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.CEAConfigManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.factory.CEAPolicyManagementDAOFactory;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.impl.CEAManagementServiceImpl;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.task.CEAPolicyMonitoringTaskManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.task.CEAPolicyMonitoringTaskManagerImpl;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.ndatasource.core.DataSourceService;
|
||||
import org.wso2.carbon.ntask.core.service.TaskService;
|
||||
|
||||
/**
|
||||
* @scr.component name="io.entgra.device.mgt.core.cea.mgt.core.CEAManagementServiceComponent" immediate="true"
|
||||
* @scr.reference name="org.wso2.carbon.ndatasource"
|
||||
* interface="org.wso2.carbon.ndatasource.core.DataSourceService"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setDataSourceService"
|
||||
* unbind="unsetDataSourceService"
|
||||
* @scr.reference name="io.entgra.device.mgt.core.cea.mgt.enforcementServiceManager"
|
||||
* interface="io.entgra.device.mgt.core.cea.mgt.common.service.EnforcementServiceManager"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setEnforcementServiceManager"
|
||||
* unbind="unsetEnforcementServiceManager"
|
||||
* @scr.reference name="ntask.component"
|
||||
* interface="org.wso2.carbon.ntask.core.service.TaskService"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setTaskService"
|
||||
* unbind="unsetTaskService"
|
||||
*/
|
||||
|
||||
public class CEAManagementServiceComponent {
|
||||
private static final Log log = LogFactory.getLog(CEAManagementServiceComponent.class);
|
||||
|
||||
protected void activate(ComponentContext componentContext) {
|
||||
try {
|
||||
CEAConfigManager ceaConfigManager = CEAConfigManager.getInstance();
|
||||
CEAPolicyManagementDAOFactory.init(ceaConfigManager.getCeaPolicyManagementRepository().getDataSourceConfig());
|
||||
CEAManagementService ceaManagementService = new CEAManagementServiceImpl();
|
||||
componentContext.getBundleContext().registerService(CEAManagementService.class.getName(),
|
||||
ceaManagementService, null);
|
||||
CEAPolicyMonitoringTaskManager ceaPolicyMonitoringTaskManager = new CEAPolicyMonitoringTaskManagerImpl();
|
||||
CEAManagementDataHolder.getInstance().setCeaPolicyMonitoringTaskManager(ceaPolicyMonitoringTaskManager);
|
||||
} catch (Throwable t) {
|
||||
String msg = "Error occurred while activating " + CEAManagementServiceComponent.class.getName();
|
||||
log.error(msg, t);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setDataSourceService(DataSourceService dataSourceService) {
|
||||
// This is to avoid cea management component getting initialized before the underlying datasource registered
|
||||
}
|
||||
|
||||
protected void unsetDataSourceService(DataSourceService dataSourceService) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
protected void setEnforcementServiceManager(EnforcementServiceManager enforcementServiceManager) {
|
||||
CEAManagementDataHolder.getInstance().setEnforcementServiceManager(enforcementServiceManager);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Enforcement service manager is set successfully");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetEnforcementServiceManager(EnforcementServiceManager enforcementServiceManager) {
|
||||
CEAManagementDataHolder.getInstance().setEnforcementServiceManager(null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Enforcement service manager is unset successfully");
|
||||
}
|
||||
}
|
||||
|
||||
protected void setTaskService(TaskService taskService) {
|
||||
CEAManagementDataHolder.getInstance().setTaskService(taskService);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Task service is set successfully");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetTaskService(TaskService taskService) {
|
||||
CEAManagementDataHolder.getInstance().setTaskService(null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Task service is unset successfully");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.mgt;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.CEAPolicyUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAManagementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyNotFoundException;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public interface CEAManager {
|
||||
/**
|
||||
* Retrieve conditional access policy UI configuration
|
||||
*
|
||||
* @return {@link CEAPolicyUIConfiguration}
|
||||
* @throws CEAManagementException Throws when retrieving UI configurations
|
||||
*/
|
||||
CEAPolicyUIConfiguration getCEAPolicyUIConfiguration() throws CEAManagementException;
|
||||
|
||||
/**
|
||||
* Trigger sync task with active sync server
|
||||
*
|
||||
* @throws CEAManagementException Throws when error occurred while triggering the sync operation
|
||||
*/
|
||||
void syncNow() throws CEAManagementException;
|
||||
|
||||
/**
|
||||
* Create conditional access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @return {@link CEAPolicy} Created conditional access policy
|
||||
* @throws CEAManagementException Throws when error occurred while creating the policy
|
||||
* @throws CEAPolicyAlreadyExistsException Throws when conflict occurs
|
||||
*/
|
||||
CEAPolicy createCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException, CEAPolicyAlreadyExistsException;
|
||||
|
||||
/**
|
||||
* Retrieve conditional access policy for the tenant
|
||||
*
|
||||
* @return {@link CEAPolicy}
|
||||
* @throws CEAManagementException Throws when error occurred while retrieving the policy
|
||||
*/
|
||||
CEAPolicy retrieveCEAPolicy() throws CEAManagementException;
|
||||
|
||||
/**
|
||||
* Retrieve all conditional access policies
|
||||
*
|
||||
* @return List of conditional access policies
|
||||
* @throws CEAManagementException Throws when error occurred while retrieving policies
|
||||
*/
|
||||
List<CEAPolicy> retrieveAllCEAPolicies() throws CEAManagementException;
|
||||
|
||||
/**
|
||||
* Update conditional access policy
|
||||
*
|
||||
* @param ceaPolicy {@link CEAPolicy}
|
||||
* @return {@link CEAPolicy} Returns update conditional access policy
|
||||
* @throws CEAManagementException Throws when error occurred while updating the policy
|
||||
* @throws CEAPolicyNotFoundException Throws when policy doesn't exist
|
||||
*/
|
||||
CEAPolicy updateCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException, CEAPolicyNotFoundException;
|
||||
|
||||
/**
|
||||
* Delete the conditional access policy
|
||||
*
|
||||
* @throws CEAManagementException Throws when error occurred while deleting the policy
|
||||
* @throws CEAPolicyNotFoundException Throws when a conditional access policy doesn't exist
|
||||
*/
|
||||
void deleteCEAPolicy() throws CEAManagementException, CEAPolicyNotFoundException;
|
||||
|
||||
/**
|
||||
* Update sync status of the conditional access policy
|
||||
*
|
||||
* @param status Whether the sync success or not
|
||||
* @param syncedTime Synced timestamp
|
||||
* @throws CEAManagementException Throws when error occurred while updating the status
|
||||
*/
|
||||
void updateSyncStatus(boolean status, Date syncedTime) throws CEAManagementException;
|
||||
}
|
@ -0,0 +1,199 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.mgt.impl;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.CEAPolicyUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAConfigManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAManagementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyNotFoundException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.bean.CEAConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.CEAConfigManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.CEAPolicyDAO;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.dao.factory.CEAPolicyManagementDAOFactory;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyManagementDAOException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyMonitoringTaskManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.internal.CEAManagementDataHolder;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.mgt.CEAManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.task.CEAPolicyMonitoringTaskManager;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class CEAManagerImpl implements CEAManager {
|
||||
private static final Log log = LogFactory.getLog(CEAManagerImpl.class);
|
||||
private final CEAPolicyDAO ceaPolicyDAO;
|
||||
|
||||
private CEAManagerImpl() {
|
||||
ceaPolicyDAO = CEAPolicyManagementDAOFactory.getCEAPolicyDAO();
|
||||
}
|
||||
|
||||
public static CEAManagerImpl getInstance() {
|
||||
return CEAManagerHolder.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicyUIConfiguration getCEAPolicyUIConfiguration() throws CEAManagementException {
|
||||
CEAPolicyUIConfiguration ceaPolicyUIConfiguration;
|
||||
try {
|
||||
ceaPolicyUIConfiguration = CEAConfigManager.getInstance().getCeaPolicyUIConfiguration();
|
||||
} catch (CEAConfigManagerException e) {
|
||||
String msg = "Error occurred while retrieving CEA ui configs";
|
||||
throw new CEAManagementException(msg, e);
|
||||
}
|
||||
return ceaPolicyUIConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncNow() throws CEAManagementException {
|
||||
try {
|
||||
CEAPolicyMonitoringTaskManager ceaPolicyMonitoringTaskManager = CEAManagementDataHolder.
|
||||
getInstance().getCeaPolicyMonitoringTaskManager();
|
||||
if (ceaPolicyMonitoringTaskManager == null) {
|
||||
throw new IllegalStateException("CEA policy monitoring task manager not initialized properly");
|
||||
}
|
||||
CEAConfigManager ceaConfigManager = CEAConfigManager.getInstance();
|
||||
CEAConfiguration ceaConfiguration = ceaConfigManager.getCeaConfiguration();
|
||||
ceaPolicyMonitoringTaskManager.stopTask();
|
||||
ceaPolicyMonitoringTaskManager.startTask(ceaConfiguration.getMonitoringConfiguration().getMonitoringFrequency());
|
||||
} catch (CEAConfigManagerException e) {
|
||||
String msg = "Error occurred while retrieving CEA configurations";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} catch (CEAPolicyMonitoringTaskManagerException e) {
|
||||
String msg = "Error occurred while triggering CEA policy monitoring task";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy createCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException,
|
||||
CEAPolicyAlreadyExistsException {
|
||||
try {
|
||||
CEAPolicyManagementDAOFactory.openConnection();
|
||||
if (ceaPolicyDAO.retrieveCEAPolicy() != null) {
|
||||
throw new CEAPolicyAlreadyExistsException("CEA policy already exists");
|
||||
}
|
||||
return ceaPolicyDAO.createCEAPolicy(ceaPolicy);
|
||||
} catch (CEAPolicyManagementDAOException e) {
|
||||
String msg = "Error occurred while creating CEA policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} finally {
|
||||
CEAPolicyManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy retrieveCEAPolicy() throws CEAManagementException {
|
||||
try {
|
||||
CEAPolicyManagementDAOFactory.openConnection();
|
||||
return ceaPolicyDAO.retrieveCEAPolicy();
|
||||
} catch (CEAPolicyManagementDAOException e) {
|
||||
String msg = "Error occurred while retrieving CEA policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} finally {
|
||||
CEAPolicyManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CEAPolicy> retrieveAllCEAPolicies() throws CEAManagementException {
|
||||
try {
|
||||
CEAPolicyManagementDAOFactory.openConnection();
|
||||
return ceaPolicyDAO.retrieveAllCEAPolicies();
|
||||
} catch (CEAPolicyManagementDAOException e) {
|
||||
String msg = "Error occurred while retrieving CEA policies";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} finally {
|
||||
CEAPolicyManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEAPolicy updateCEAPolicy(CEAPolicy ceaPolicy) throws CEAManagementException, CEAPolicyNotFoundException {
|
||||
try {
|
||||
CEAPolicyManagementDAOFactory.openConnection();
|
||||
CEAPolicy existingCeaPolicy = ceaPolicyDAO.retrieveCEAPolicy();
|
||||
if (existingCeaPolicy == null) {
|
||||
throw new CEAPolicyNotFoundException("CEA policy not found");
|
||||
}
|
||||
return ceaPolicyDAO.updateCEAPolicy(existingCeaPolicy, ceaPolicy);
|
||||
} catch (CEAPolicyManagementDAOException e) {
|
||||
String msg = "Error occurred while updating CEA policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} finally {
|
||||
CEAPolicyManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteCEAPolicy() throws CEAManagementException, CEAPolicyNotFoundException {
|
||||
try {
|
||||
CEAPolicyManagementDAOFactory.openConnection();
|
||||
CEAPolicyMonitoringTaskManager ceaPolicyMonitoringTaskManager = CEAManagementDataHolder.
|
||||
getInstance().getCeaPolicyMonitoringTaskManager();
|
||||
if (ceaPolicyMonitoringTaskManager == null) {
|
||||
String msg = "CEA policy monitoring task manager not initialized properly, " +
|
||||
"hence aborting CEA policy deleting procedure";
|
||||
throw new IllegalStateException(msg);
|
||||
}
|
||||
CEAPolicy existingCeaPolicy = ceaPolicyDAO.retrieveCEAPolicy();
|
||||
if (existingCeaPolicy == null) throw new CEAPolicyNotFoundException("CEA policy not found");
|
||||
ceaPolicyDAO.deleteCEAPolicy();
|
||||
ceaPolicyMonitoringTaskManager.stopTask();
|
||||
} catch (CEAPolicyManagementDAOException e) {
|
||||
String msg = "Error occurred while deleting CEA policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} catch (CEAPolicyMonitoringTaskManagerException e) {
|
||||
String msg = "Error occurred while stopping CEA policy monitoring task";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} finally {
|
||||
CEAPolicyManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSyncStatus(boolean status, Date syncedTime) throws CEAManagementException {
|
||||
try {
|
||||
CEAPolicyManagementDAOFactory.openConnection();
|
||||
ceaPolicyDAO.updateLastSyncedTime(status, syncedTime);
|
||||
} catch (CEAPolicyManagementDAOException e) {
|
||||
String msg = "Error occurred while updating sync status";
|
||||
log.error(msg, e);
|
||||
throw new CEAManagementException(msg, e);
|
||||
} finally {
|
||||
CEAPolicyManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
private static class CEAManagerHolder {
|
||||
public static final CEAManagerImpl INSTANCE = new CEAManagerImpl();
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.task;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAConfigManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAManagementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.EnforcementServiceManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.EnforcementServiceManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.bean.ActiveSyncServerConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.bean.CEAConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.CEAConfigManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.internal.CEAManagementDataHolder;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.mgt.CEAManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.mgt.impl.CEAManagerImpl;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.util.Constants;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.Impl.CEAPolicyOperationImpl;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.CEAPolicyOperationException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.service.CEAPolicyOperation;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.task.impl.DynamicPartitionedScheduleTask;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.base.MultitenantConstants;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
public class CEAPolicyMonitoringTask extends DynamicPartitionedScheduleTask {
|
||||
private static final Log log = LogFactory.getLog(CEAPolicyMonitoringTask.class);
|
||||
|
||||
private CEAManager ceaManager;
|
||||
private CEAConfigManager ceaConfigManager;
|
||||
private EnforcementServiceManager enforcementServiceManager;
|
||||
|
||||
@Override
|
||||
protected void executeDynamicTask() {
|
||||
int tenantId = Integer.parseInt(Objects.requireNonNull(getProperty(Constants.TENANT_ID_KEY)));
|
||||
try {
|
||||
CEAConfiguration ceaConfiguration = ceaConfigManager.getCeaConfiguration();
|
||||
CEAPolicy ceaPolicy = ceaManager.retrieveCEAPolicy();
|
||||
ActiveSyncServerConfiguration activeSyncServerConfiguration = ceaConfiguration.
|
||||
getActiveSyncServerConfiguration(ceaPolicy.getActiveSyncServer());
|
||||
if (MultitenantConstants.SUPER_TENANT_ID == tenantId) {
|
||||
enforce(ceaPolicy, activeSyncServerConfiguration);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
PrivilegedCarbonContext.startTenantFlow();
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(tenantId, true);
|
||||
enforce(ceaPolicy, activeSyncServerConfiguration);
|
||||
} finally {
|
||||
PrivilegedCarbonContext.endTenantFlow();
|
||||
}
|
||||
|
||||
} catch (CEAManagementException e) {
|
||||
log.error("Error occurred while executing dynamic partitioned task for the CEA policy monitoring", e);
|
||||
} catch (CEAConfigManagerException e) {
|
||||
log.error("Error occurred while retrieving CEA configuration", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void enforce(CEAPolicy ceaPolicy, ActiveSyncServerConfiguration activeSyncServerConfiguration) {
|
||||
boolean status = false;
|
||||
Date syncedStartTime = new Date();
|
||||
CEAPolicyOperation ceaPolicyOperation;
|
||||
try {
|
||||
ceaPolicyOperation = new CEAPolicyOperationImpl(enforcementServiceManager.
|
||||
getEnforcementService(activeSyncServerConfiguration.getEnforcementService()), ceaPolicy);
|
||||
ceaPolicyOperation.enforce();
|
||||
status = true;
|
||||
} catch (EnforcementServiceManagerException | CEAPolicyOperationException e) {
|
||||
log.error("Error occurred while enforcing the CEA access policy for the tenant id" + ceaPolicy.getTenantId(), e);
|
||||
} finally {
|
||||
logbackEnforcementStatus(status, syncedStartTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void logbackEnforcementStatus(boolean status, Date syncedStartTime) {
|
||||
try {
|
||||
ceaManager.updateSyncStatus(status, syncedStartTime);
|
||||
} catch (CEAManagementException e) {
|
||||
log.error("Error occurred while recording sync status", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setup() {
|
||||
ceaManager = CEAManagerImpl.getInstance();
|
||||
ceaConfigManager = CEAConfigManager.getInstance();
|
||||
enforcementServiceManager = CEAManagementDataHolder.getInstance().getEnforcementServiceManager();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.task;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyMonitoringTaskManagerException;
|
||||
|
||||
public interface CEAPolicyMonitoringTaskManager {
|
||||
void startTask(long monitoringFrequency) throws CEAPolicyMonitoringTaskManagerException;
|
||||
|
||||
void stopTask() throws CEAPolicyMonitoringTaskManagerException;
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.task;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAConfigManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.bean.CEAConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.config.CEAConfigManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.exception.CEAPolicyMonitoringTaskManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.internal.CEAManagementDataHolder;
|
||||
import io.entgra.device.mgt.core.cea.mgt.core.util.Constants;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.ntask.common.TaskException;
|
||||
import org.wso2.carbon.ntask.core.TaskInfo;
|
||||
import org.wso2.carbon.ntask.core.TaskManager;
|
||||
import org.wso2.carbon.ntask.core.service.TaskService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CEAPolicyMonitoringTaskManagerImpl implements CEAPolicyMonitoringTaskManager {
|
||||
private static final Log log = LogFactory.getLog(CEAPolicyMonitoringTaskManagerImpl.class);
|
||||
|
||||
@Override
|
||||
public void startTask(long monitoringFrequency) throws CEAPolicyMonitoringTaskManagerException {
|
||||
if (monitoringFrequency <= 0) {
|
||||
throw new CEAPolicyMonitoringTaskManagerException("Invalid monitoring frequency");
|
||||
}
|
||||
TaskService taskService = CEAManagementDataHolder.getInstance().getTaskService();
|
||||
if (taskService == null) {
|
||||
throw new IllegalStateException("Task service is not initialized");
|
||||
}
|
||||
try {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
CEAConfiguration ceaConfiguration = CEAConfigManager.getInstance().getCeaConfiguration();
|
||||
boolean isMonitoringEnable = ceaConfiguration.getMonitoringConfiguration().isMonitoringEnable();
|
||||
|
||||
if (!isMonitoringEnable) {
|
||||
log.warn("CEA policy monitoring is disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
taskService.registerTaskType(Constants.CEA_MONITORING_TASK_TYPE);
|
||||
|
||||
TaskManager taskManager = taskService.getTaskManager(Constants.CEA_MONITORING_TASK_TYPE);
|
||||
|
||||
TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo();
|
||||
triggerInfo.setIntervalMillis(monitoringFrequency);
|
||||
triggerInfo.setRepeatCount(-1);
|
||||
|
||||
Map<String, String> properties = new HashMap<>();
|
||||
properties.put(Constants.TENANT_ID_KEY, String.valueOf(tenantId));
|
||||
if (!taskManager.isTaskScheduled(Constants.CEA_MONITORING_TASK_NAME + tenantId)) {
|
||||
TaskInfo taskInfo = new TaskInfo(Constants.CEA_MONITORING_TASK_NAME + tenantId,
|
||||
ceaConfiguration.getMonitoringConfiguration().getMonitoringClazz(), properties, triggerInfo);
|
||||
taskManager.registerTask(taskInfo);
|
||||
taskManager.rescheduleTask(taskInfo.getName());
|
||||
} else {
|
||||
throw new CEAPolicyMonitoringTaskManagerException("CEA policy monitoring task is already active");
|
||||
}
|
||||
} catch (CEAConfigManagerException e) {
|
||||
String msg = "Error occurred while retrieving CEA config";
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyMonitoringTaskManagerException(msg, e);
|
||||
} catch (TaskException e) {
|
||||
String msg = "Error occurred while scheduling task for CEA policy monitoring";
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyMonitoringTaskManagerException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopTask() throws CEAPolicyMonitoringTaskManagerException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
try {
|
||||
TaskService taskService = CEAManagementDataHolder.getInstance().getTaskService();
|
||||
if (taskService != null && taskService.isServerInit()) {
|
||||
TaskManager taskManager = taskService.getTaskManager(Constants.CEA_MONITORING_TASK_TYPE);
|
||||
taskManager.deleteTask(Constants.CEA_MONITORING_TASK_NAME + tenantId);
|
||||
}
|
||||
} catch (TaskException e) {
|
||||
String msg = "Error occurred while stopping the " + Constants.CEA_MONITORING_TASK_NAME + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyMonitoringTaskManagerException(msg, e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.core.util;
|
||||
|
||||
public class Constants {
|
||||
public static final String CDM_CONFIG_FILE_NAME = "cdm-config.xml";
|
||||
public static final String CEA_POLICY_UI_FILE_NAME = "cea-ui-config.xml";
|
||||
public static final String CEA_CONFIG_FILE_NAME = "cea-config.xml";
|
||||
public static final String CEA_MONITORING_TASK_TYPE = "CEA_MONITORING_TASK";
|
||||
public static final String CEA_MONITORING_TASK_NAME = "CEA_MONITORING_TASK";
|
||||
public static final String TENANT_ID_KEY = "TENANT_ID";
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2018 - 2024, 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.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>cea-mgt</artifactId>
|
||||
<version>5.0.38-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>io.entgra.device.mgt.core.cea.mgt.enforce</artifactId>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>bundle</packaging>
|
||||
<name>Entgra IoT - CEA Management Enforcement Service</name>
|
||||
<description>Entgra IoT - Conditional Email Access Management Enforcement Service</description>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||
<Bundle-Version>${io.entgra.device.mgt.core.version}</Bundle-Version>
|
||||
<Bundle-Description>CEA Management Enforcement Service Bundle</Bundle-Description>
|
||||
<Import-Package>
|
||||
org.osgi.framework.*;version="${imp.package.version.osgi.framework}",
|
||||
org.osgi.service.*;version="${imp.package.version.osgi.service}",
|
||||
org.wso2.carbon.utils,
|
||||
org.wso2.carbon.context.*,
|
||||
org.apache.commons.logging,
|
||||
com.google.gson.*,
|
||||
io.entgra.device.mgt.core.device.mgt.common.*,
|
||||
io.entgra.device.mgt.core.cea.mgt.common.*,
|
||||
io.entgra.device.mgt.core.device.mgt.core.service,
|
||||
org.wso2.carbon.user.api,
|
||||
org.wso2.carbon.user.core.service
|
||||
</Import-Package>
|
||||
<Export-Package>
|
||||
io.entgra.device.mgt.core.cea.mgt.enforce.*
|
||||
</Export-Package>
|
||||
<DynamicImport-Package>*</DynamicImport-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.cea.mgt.common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.device.mgt.core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.user.api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.user.core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.microsoft.azure</groupId>
|
||||
<artifactId>msal4j</artifactId>
|
||||
<version>1.14.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.Impl;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.CEAEnforcementService;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.CEAPolicyOperationException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.service.CEAPolicyOperation;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.annotation.Enforce;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class CEAPolicyOperationImpl implements CEAPolicyOperation {
|
||||
private static final Log log = LogFactory.getLog(CEAPolicyOperationImpl.class);
|
||||
private final CEAEnforcementService ceaEnforcementService;
|
||||
private final CEAPolicy ceaPolicy;
|
||||
|
||||
public CEAPolicyOperationImpl(CEAEnforcementService ceaEnforcementService, CEAPolicy ceaPolicy) {
|
||||
this.ceaEnforcementService = ceaEnforcementService;
|
||||
this.ceaPolicy = ceaPolicy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enforce() throws CEAPolicyOperationException {
|
||||
try {
|
||||
Method[] methods = ceaEnforcementService.getClass().getMethods();
|
||||
for (Method method : methods) {
|
||||
if (method.isAnnotationPresent(Enforce.class)) {
|
||||
method.setAccessible(true);
|
||||
method.invoke(ceaEnforcementService, ceaPolicy);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String msg = "Error occurred while invoking CEA enforcement service";
|
||||
log.error(msg, e);
|
||||
throw new CEAPolicyOperationException(msg, e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.Impl;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.EnforcementServiceManagerException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.CEAEnforcementService;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.EnforcementServiceManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.Constants;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class EnforcementServiceManagerImpl implements EnforcementServiceManager {
|
||||
private static final Log log = LogFactory.getLog(EnforcementServiceManagerImpl.class);
|
||||
|
||||
@Override
|
||||
public CEAEnforcementService getEnforcementService(String enforcementServiceClassName) throws EnforcementServiceManagerException {
|
||||
try {
|
||||
Class<?> enforcementServiceClass = Class.forName(enforcementServiceClassName);
|
||||
Method method = enforcementServiceClass.getMethod(Constants.METHOD_NAME_GET_INSTANCE);
|
||||
return (CEAEnforcementService) method.invoke(null);
|
||||
} catch (ClassNotFoundException e) {
|
||||
String msg = enforcementServiceClassName + " not found";
|
||||
log.error(msg, e);
|
||||
throw new EnforcementServiceManagerException(msg, e);
|
||||
} catch (NoSuchMethodException e) {
|
||||
String msg = Constants.METHOD_NAME_GET_INSTANCE + " not found in " + enforcementServiceClassName;
|
||||
log.error(msg, e);
|
||||
throw new EnforcementServiceManagerException(msg, e);
|
||||
} catch (InvocationTargetException e) {
|
||||
String msg = "Error occurred while invoking " + Constants.METHOD_NAME_GET_INSTANCE + " in "
|
||||
+ enforcementServiceClassName;
|
||||
log.error(msg, e);
|
||||
throw new EnforcementServiceManagerException(msg, e);
|
||||
} catch (IllegalAccessException e) {
|
||||
String msg = "Can't access the method " + Constants.METHOD_NAME_GET_INSTANCE + " in "
|
||||
+ enforcementServiceClassName;
|
||||
log.error(msg, e);
|
||||
throw new EnforcementServiceManagerException(msg, e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,629 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.Impl;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncDevice;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.GracePeriod;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.MailboxProfile;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.EmailOutlookAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.GraceAllowedPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.WebOutlookAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAEnforcementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.CEAEnforcementService;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.util.Constants;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.util.EASMgtUtil;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.Impl.gateway.ExchangeOnlineGatewayServiceImpl;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.ExoPowershellCommand;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellCommand;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellRequest;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellResponse;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.GatewayServiceException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.PowershellExecutionException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.UnsupportedOsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.service.gateway.GatewayService;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.DeviceMgtUtil;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.annotation.Enforce;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.shell.Powershell;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.shell.parser.Parser;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class ExchangeOnlineCEAEnforcementServiceImpl implements CEAEnforcementService {
|
||||
private static final Log log = LogFactory.getLog(ExchangeOnlineCEAEnforcementServiceImpl.class);
|
||||
private static volatile ExchangeOnlineCEAEnforcementServiceImpl INSTANCE;
|
||||
private final GatewayService gatewayService;
|
||||
private final Powershell powershell;
|
||||
|
||||
ExchangeOnlineCEAEnforcementServiceImpl() throws UnsupportedOsException {
|
||||
gatewayService = new ExchangeOnlineGatewayServiceImpl();
|
||||
powershell = Powershell.getPowershell();
|
||||
}
|
||||
|
||||
public static ExchangeOnlineCEAEnforcementServiceImpl getInstance() throws UnsupportedOsException {
|
||||
if (INSTANCE == null) {
|
||||
synchronized (ExchangeOnlineCEAEnforcementServiceImpl.class) {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new ExchangeOnlineCEAEnforcementServiceImpl();
|
||||
}
|
||||
}
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Enforce
|
||||
public void enforceDefaultAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException {
|
||||
try {
|
||||
PowershellCommand setActiveSyncOrganizationSettings = getCommand(Parser.
|
||||
COMMAND_SetActiveSyncOrganizationSettings.COMMAND, ceaPolicy.getActiveSyncServer());
|
||||
setActiveSyncOrganizationSettings.addOption(Parser.COMMAND_SetActiveSyncOrganizationSettings.
|
||||
PARAMETER_DefaultAccessLevel,
|
||||
Parser.COMMAND_SetActiveSyncOrganizationSettings.POLICY_TO_VALUE.
|
||||
get(ceaPolicy.getAccessPolicy().getDefaultAccessPolicy().toString()));
|
||||
PowershellResponse powershellResponse = powershell.execute(getPowershellRequest(setActiveSyncOrganizationSettings));
|
||||
if (powershellResponse.isSuccess()) {
|
||||
log.info("Default access policy successfully enforced for " + ceaPolicy.getTenantId());
|
||||
} else {
|
||||
log.error("Default access policy enforcement procedure failed for " + ceaPolicy.getTenantId());
|
||||
}
|
||||
} catch (GatewayServiceException e) {
|
||||
String msg = "Active sync gateway service failed while enforcing default CEA access policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
} catch (PowershellExecutionException e) {
|
||||
String msg = "Error occurred while executing powershell command for enforcing " +
|
||||
"CEA access policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Enforce
|
||||
public void enforceEmailOutlookAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException {
|
||||
Set<EmailOutlookAccessPolicy> emailOutlookAccessPolicies = ceaPolicy.getAccessPolicy().getEmailOutlookAccessPolicy();
|
||||
if (emailOutlookAccessPolicies.contains(EmailOutlookAccessPolicy.NOT_CONFIGURED)) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("CEA email outlook policy not configured, but the support is available in " +
|
||||
ExchangeOnlineCEAEnforcementServiceImpl.class);
|
||||
}
|
||||
return;
|
||||
}
|
||||
ActiveSyncServer activeSyncServer = ceaPolicy.getActiveSyncServer();
|
||||
try {
|
||||
PowershellCommand setCASMailbox = getCommand(Parser.COMMAND_SetCASMailbox.COMMAND,
|
||||
activeSyncServer);
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_Identity, "$_.Identity");
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_OutlookMobileEnabled, Parser.TRUE);
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_MacOutlookEnabled, Parser.TRUE);
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_OneWinNativeOutlookEnabled, Parser.TRUE);
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_EwsAllowMacOutlook, Parser.TRUE);
|
||||
|
||||
if (emailOutlookAccessPolicies.contains(EmailOutlookAccessPolicy.MOBILE_OUTLOOK_BLOCK)) {
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_OutlookMobileEnabled,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(EmailOutlookAccessPolicy.MOBILE_OUTLOOK_BLOCK.toString()));
|
||||
}
|
||||
|
||||
if (emailOutlookAccessPolicies.contains(EmailOutlookAccessPolicy.MAC_OUTLOOK_BLOCK)) {
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_MacOutlookEnabled,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(EmailOutlookAccessPolicy.MAC_OUTLOOK_BLOCK.toString()));
|
||||
}
|
||||
|
||||
if (emailOutlookAccessPolicies.contains(EmailOutlookAccessPolicy.WINDOWS_OUTLOOK_BLOCK)) {
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_OneWinNativeOutlookEnabled,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(EmailOutlookAccessPolicy.WINDOWS_OUTLOOK_BLOCK.toString()));
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_EwsAllowMacOutlook,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(EmailOutlookAccessPolicy.MAC_OLD_OUTLOOK_BLOCK.toString()));
|
||||
}
|
||||
|
||||
PowershellResponse powershellResponse = powershell.execute(getPowershellRequest(
|
||||
toAllMailboxesCommand(setCASMailbox, activeSyncServer)));
|
||||
if (powershellResponse.isSuccess()) {
|
||||
log.info("Email outlook access policy successfully enforced for " + ceaPolicy.getTenantId());
|
||||
} else {
|
||||
log.error("Email outlook access policy enforcement procedure failed for " + ceaPolicy.getTenantId());
|
||||
}
|
||||
} catch (GatewayServiceException e) {
|
||||
String msg = "Active sync auth service failed while enforcing default " +
|
||||
"CEA email outlook access policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
} catch (PowershellExecutionException e) {
|
||||
String msg = "Error occurred while executing powershell command for enforcing " +
|
||||
"CEA email outlook access policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Enforce
|
||||
public void enforcePOPIMAPAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException {
|
||||
if (ceaPolicy.getAccessPolicy().getPOPIMAPAccessPolicy().
|
||||
equalsName(EmailOutlookAccessPolicy.NOT_CONFIGURED.name())) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("CEA POP/IMAP policy not configured, but support is available in " +
|
||||
ExchangeOnlineCEAEnforcementServiceImpl.class);
|
||||
}
|
||||
return;
|
||||
}
|
||||
ActiveSyncServer activeSyncServer = ceaPolicy.getActiveSyncServer();
|
||||
try {
|
||||
PowershellCommand setCASMailbox = getCommand(Parser.COMMAND_SetCASMailbox.COMMAND,
|
||||
activeSyncServer);
|
||||
String POPIMAPPolicy = ceaPolicy.getAccessPolicy().getPOPIMAPAccessPolicy().toString();
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_Identity, "$_.Identity");
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_ImapEnabled,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(POPIMAPPolicy));
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_PopEnabled,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(POPIMAPPolicy));
|
||||
PowershellResponse powershellResponse = powershell.execute(getPowershellRequest(
|
||||
toAllMailboxesCommand(setCASMailbox, activeSyncServer)));
|
||||
if (powershellResponse.isSuccess()) {
|
||||
log.info("POP/IMAP access policy successfully enforced for " + ceaPolicy.getTenantId());
|
||||
} else {
|
||||
log.error("POP/IMAP access policy enforcement procedure failed for " + ceaPolicy.getTenantId());
|
||||
}
|
||||
} catch (GatewayServiceException e) {
|
||||
String msg = "Active sync auth service failed while enforcing default CEA POP/IMAP policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
} catch (PowershellExecutionException e) {
|
||||
String msg = "Error occurred while executing powershell command for enforcing " +
|
||||
"CEA POP/IMAP policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Enforce
|
||||
public void enforceWebOutlookAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException {
|
||||
if (ceaPolicy.getAccessPolicy().getWebOutlookAccessPolicy().
|
||||
equalsName(WebOutlookAccessPolicy.NOT_CONFIGURED.name())) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("CEA Outlook web access policy not configured, but support is available in " +
|
||||
ExchangeOnlineCEAEnforcementServiceImpl.class);
|
||||
}
|
||||
return;
|
||||
}
|
||||
ActiveSyncServer activeSyncServer = ceaPolicy.getActiveSyncServer();
|
||||
try {
|
||||
PowershellCommand setCASMailbox = getCommand(Parser.COMMAND_SetCASMailbox.COMMAND,
|
||||
activeSyncServer);
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_Identity, "$_.Identity");
|
||||
setCASMailbox.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_OWAEnabled,
|
||||
Parser.COMMAND_SetCASMailbox.POLICY_TO_VALUE.get(ceaPolicy.getAccessPolicy().
|
||||
getWebOutlookAccessPolicy().toString()));
|
||||
PowershellResponse powershellResponse = powershell.execute(getPowershellRequest(
|
||||
toAllMailboxesCommand(setCASMailbox, activeSyncServer)));
|
||||
if (powershellResponse.isSuccess()) {
|
||||
log.info("Web outlook access policy successfully enforced for " + ceaPolicy.getTenantId());
|
||||
} else {
|
||||
log.error("Web outlook access policy enforcement procedure failed for " + ceaPolicy.getTenantId());
|
||||
}
|
||||
} catch (GatewayServiceException e) {
|
||||
String msg = "Active sync auth service failed while enforcing CEA web outlook access policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
} catch (PowershellExecutionException e) {
|
||||
String msg = "Error occurred while executing powershell command for enforcing " +
|
||||
"CEA web outlook access policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Enforce
|
||||
public void enforceConditionalAccessPolicy(CEAPolicy ceaPolicy) throws CEAEnforcementException {
|
||||
GracePeriod gracePeriod = ceaPolicy.getGracePeriod();
|
||||
ActiveSyncServer activeSyncServer = ceaPolicy.getActiveSyncServer();
|
||||
boolean isSynced = ceaPolicy.isSynced();
|
||||
Date created = ceaPolicy.getCreated();
|
||||
Date lastSynced = ceaPolicy.getLastSynced();
|
||||
|
||||
/*
|
||||
* Here we are filtering the devices(active sync devices) which are communicating
|
||||
* with the exchange online server into valid and not valid categories.
|
||||
* Valid category can contain devices which are currently managed by UEM or devices
|
||||
* which are syncing with the exchange online server under a grace period.
|
||||
* */
|
||||
|
||||
try {
|
||||
/* Get the devices based on the last sync timestamp or cea policy created
|
||||
* time to avoid unnecessary device bulks.
|
||||
* */
|
||||
List<ActiveSyncDevice> validActiveSyncDevices = isSynced ? DeviceMgtUtil.
|
||||
getEnrolledActiveSyncDevices(lastSynced, false) :
|
||||
DeviceMgtUtil.getEnrolledActiveSyncDevices(new Date(), true);
|
||||
List<ActiveSyncDevice> notValidActiveSyncDevices = new ArrayList<>();
|
||||
|
||||
List<ActiveSyncDevice> connectedActiveSyncDevices = isSynced ?
|
||||
getConnectedActiveSyncDevicesAfter(lastSynced, activeSyncServer) :
|
||||
getAllConnectedActiveSyncDevices(activeSyncServer);
|
||||
for (ActiveSyncDevice activeSyncDevice : connectedActiveSyncDevices) {
|
||||
if (!EASMgtUtil.isManageByUEM(activeSyncDevice.getDeviceId())
|
||||
&& !validActiveSyncDevices.contains(activeSyncDevice)) {
|
||||
notValidActiveSyncDevices.add(activeSyncDevice);
|
||||
} else {
|
||||
validActiveSyncDevices.add(activeSyncDevice);
|
||||
}
|
||||
}
|
||||
|
||||
if (gracePeriod.getGraceAllowedPolicy().equalsName(GraceAllowedPolicy.NOT_ALLOWED.name())) {
|
||||
// Block grace offered new devices if exists
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DAY_OF_MONTH, -Constants.MAX_GRACE_PERIOD_IN_DAYS);
|
||||
List<ActiveSyncDevice> graceExceededNewlyConnectedActiveSyncDevices =
|
||||
getConnectedActiveSyncDevicesAfter(calendar.getTime(), activeSyncServer);
|
||||
List<ActiveSyncDevice> managedDevices = DeviceMgtUtil.getEnrolledActiveSyncDevices(calendar.getTime(), false);
|
||||
categorizeDevices(validActiveSyncDevices, notValidActiveSyncDevices,
|
||||
graceExceededNewlyConnectedActiveSyncDevices, managedDevices, gracePeriod, false);
|
||||
|
||||
// Block grace offered existing devices if exists
|
||||
List<ActiveSyncDevice> connectedActiveSyncDevicesBeforeTheCreationOfCEAPolicy =
|
||||
getConnectedActiveSyncDevicesBefore(created, activeSyncServer);
|
||||
categorizeDevices(validActiveSyncDevices, notValidActiveSyncDevices,
|
||||
connectedActiveSyncDevicesBeforeTheCreationOfCEAPolicy, validActiveSyncDevices, gracePeriod, false);
|
||||
}
|
||||
|
||||
if (gracePeriod.getGraceAllowedPolicy().equalsName(GraceAllowedPolicy.NEW_AND_EXISTING.name()) ||
|
||||
gracePeriod.getGraceAllowedPolicy().equalsName(GraceAllowedPolicy.NEW_ONLY.name())) {
|
||||
|
||||
List<ActiveSyncDevice> newlyConnectedActiveSyncDevices =
|
||||
getConnectedActiveSyncDevicesAfter(isSynced ? lastSynced : created, activeSyncServer);
|
||||
categorizeDevices(validActiveSyncDevices, notValidActiveSyncDevices,
|
||||
newlyConnectedActiveSyncDevices, validActiveSyncDevices, gracePeriod, true);
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DAY_OF_MONTH, -Constants.MAX_GRACE_PERIOD_IN_DAYS);
|
||||
List<ActiveSyncDevice> graceExceededNewlyConnectedActiveSyncDevices =
|
||||
getConnectedActiveSyncDevicesAfter(calendar.getTime(), activeSyncServer);
|
||||
List<ActiveSyncDevice> managedDevices = DeviceMgtUtil.getEnrolledActiveSyncDevices(calendar.getTime(), false);
|
||||
categorizeDevices(validActiveSyncDevices, notValidActiveSyncDevices,
|
||||
graceExceededNewlyConnectedActiveSyncDevices, managedDevices, gracePeriod, true);
|
||||
}
|
||||
|
||||
if (gracePeriod.getGraceAllowedPolicy().equalsName(GraceAllowedPolicy.NEW_AND_EXISTING.name()) ||
|
||||
gracePeriod.getGraceAllowedPolicy().equalsName(GraceAllowedPolicy.EXISTING_ONLY.name())) {
|
||||
List<ActiveSyncDevice> connectedActiveSyncDevicesBeforeTheCreationOfCEAPolicy =
|
||||
getConnectedActiveSyncDevicesBefore(created, activeSyncServer);
|
||||
categorizeDevices(validActiveSyncDevices, notValidActiveSyncDevices,
|
||||
connectedActiveSyncDevicesBeforeTheCreationOfCEAPolicy, validActiveSyncDevices, gracePeriod, true);
|
||||
}
|
||||
|
||||
List<MailboxProfile> mailboxProfiles = generateMailboxProfiles(validActiveSyncDevices,
|
||||
notValidActiveSyncDevices);
|
||||
for (MailboxProfile mailboxProfile : mailboxProfiles) {
|
||||
PowershellCommand powershellCommand = getCommand(Parser.COMMAND_SetCASMailbox.COMMAND, activeSyncServer);
|
||||
powershellCommand.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_Identity, mailboxProfile.getIdentity());
|
||||
powershellCommand.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_ActiveSyncAllowedDeviceIDs,
|
||||
mailboxProfile.getAllowedEASIdentifierString());
|
||||
powershellCommand.addOption(Parser.COMMAND_SetCASMailbox.PARAMETER_ActiveSyncBlockedDeviceIDs,
|
||||
mailboxProfile.getBlockedEASIdentifierString());
|
||||
powershell.execute(getPowershellRequest(powershellCommand));
|
||||
}
|
||||
} catch (GatewayServiceException e) {
|
||||
String msg = "Active sync auth service failed while enforcing CEA policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
} catch (PowershellExecutionException e) {
|
||||
String msg = "Error occurred while executing powershell command for enforcing CEA policy";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
} catch (DeviceManagementException | UserStoreException e) {
|
||||
String msg = "Error occurred while retrieving active sync devices";
|
||||
log.error(msg, e);
|
||||
throw new CEAEnforcementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Categorize active sync devices into valid and not valid
|
||||
* @param validActiveSyncDevices Valid active sync devices
|
||||
* @param notValidActiveSyncDevices Not valid active sync devices
|
||||
* @param deviceList Device list to filter
|
||||
* @param managedList Already managing devices from UEM
|
||||
* @param gracePeriod Grace period to consider
|
||||
* @param allowGrace Whether to allow grace or not
|
||||
*/
|
||||
private void categorizeDevices(List<ActiveSyncDevice> validActiveSyncDevices, List<ActiveSyncDevice> notValidActiveSyncDevices,
|
||||
List<ActiveSyncDevice> deviceList, List<ActiveSyncDevice> managedList, GracePeriod gracePeriod, boolean allowGrace) {
|
||||
for (ActiveSyncDevice activeSyncDevice : deviceList) {
|
||||
if (!EASMgtUtil.isManageByUEM(activeSyncDevice.getDeviceId())
|
||||
&& !managedList.contains(activeSyncDevice)) {
|
||||
if (allowGrace) {
|
||||
filterDeviceBasedOnGrace(activeSyncDevice, validActiveSyncDevices, notValidActiveSyncDevices, gracePeriod);
|
||||
} else {
|
||||
validActiveSyncDevices.remove(activeSyncDevice);
|
||||
notValidActiveSyncDevices.add(activeSyncDevice);
|
||||
}
|
||||
} else {
|
||||
// These devices are managed by UEM, so add to the valid category
|
||||
notValidActiveSyncDevices.remove(activeSyncDevice);
|
||||
validActiveSyncDevices.add(activeSyncDevice);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter active sync device based on grace period
|
||||
* @param activeSyncDevice Active sync device
|
||||
* @param validActiveSyncDevices Valid active sync device list
|
||||
* @param notValidActiveSyncDevices Not valid active sync device list
|
||||
* @param gracePeriod Grace period to consider
|
||||
*/
|
||||
private void filterDeviceBasedOnGrace(ActiveSyncDevice activeSyncDevice, List<ActiveSyncDevice> validActiveSyncDevices,
|
||||
List<ActiveSyncDevice> notValidActiveSyncDevices, GracePeriod gracePeriod) {
|
||||
long timeDiff = Math.abs(new Date().getTime() - activeSyncDevice.getFirstSyncTime().getTime());
|
||||
// Enforce the grace period if the device not exceeds the grace limit
|
||||
if (TimeUnit.DAYS.convert(timeDiff, TimeUnit.MILLISECONDS) < gracePeriod.getGracePeriod()) {
|
||||
notValidActiveSyncDevices.remove(activeSyncDevice);
|
||||
validActiveSyncDevices.add(activeSyncDevice);
|
||||
} else {
|
||||
validActiveSyncDevices.remove(activeSyncDevice);
|
||||
notValidActiveSyncDevices.add(activeSyncDevice);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate powershell command {@link PowershellCommand} from command string
|
||||
* @param command Powershell command string
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return {@link PowershellCommand}
|
||||
* @throws GatewayServiceException Throws when error occurred while retrieving access token
|
||||
*/
|
||||
private PowershellCommand getCommand(String command, ActiveSyncServer activeSyncServer)
|
||||
throws GatewayServiceException {
|
||||
String[] urlParts = activeSyncServer.getGatewayUrl().split("/");
|
||||
ExoPowershellCommand.ExoPowershellCommandBuilder commandBuilder =
|
||||
new ExoPowershellCommand.ExoPowershellCommandBuilder(command);
|
||||
commandBuilder.accessToken(gatewayService.acquireAccessToken(activeSyncServer))
|
||||
.organization(urlParts[urlParts.length - 1]);
|
||||
return commandBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap powershell command to effect all mailboxes in active sync server
|
||||
* @param command {@link PowershellCommand} command to wrap
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return {@link PowershellCommand}
|
||||
* @throws GatewayServiceException Throws when error occurred while retrieving access token
|
||||
*/
|
||||
private PowershellCommand toAllMailboxesCommand(PowershellCommand command,
|
||||
ActiveSyncServer activeSyncServer) throws GatewayServiceException {
|
||||
PowershellCommand getEXOMailbox = getCommand(Parser.COMMAND_GetEXOMailbox.COMMAND, activeSyncServer);
|
||||
getEXOMailbox.addOption(Parser.COMMAND_GetEXOMailbox.PARAMETER_ResultSize, "unlimited");
|
||||
PowershellCommand forEach = getCommand(Parser.COMMAND_ForEach.COMMAND, activeSyncServer);
|
||||
forEach.addOption(Parser.COMMAND_ForEach.PARAMETER_Begin, "$upn = $_.UserPrincipalName;" + command.constructFullCommand());
|
||||
forEach.addOption(Parser.COMMAND_ForEach.PARAMETER_End, "");
|
||||
getEXOMailbox.pipe(forEach);
|
||||
getEXOMailbox.setConvertToJson(false);
|
||||
return getEXOMailbox;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new powershell request to execute via powershell binaries
|
||||
* @param command {@link PowershellCommand}
|
||||
* @return {@link PowershellRequest}
|
||||
*/
|
||||
private PowershellRequest getPowershellRequest(PowershellCommand command) {
|
||||
PowershellRequest powershellRequest = new PowershellRequest();
|
||||
powershellRequest.setCommand(command);
|
||||
return powershellRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate mailbox profiles from active sync block and allowed devices
|
||||
* @param activeSyncAllowedDevices Active sync allowed device list
|
||||
* @param activeSyncBlockedDevices Active sync blocked device list
|
||||
* @return List of {@link MailboxProfile}
|
||||
*/
|
||||
private List<MailboxProfile> generateMailboxProfiles(List<ActiveSyncDevice> activeSyncAllowedDevices,
|
||||
List<ActiveSyncDevice> activeSyncBlockedDevices) {
|
||||
List<MailboxProfile> mailboxProfiles = new ArrayList<>();
|
||||
MailboxProfile mailboxProfile;
|
||||
for (ActiveSyncDevice activeSyncDevice : activeSyncAllowedDevices) {
|
||||
mailboxProfile = new MailboxProfile();
|
||||
mailboxProfile.setIdentity(activeSyncDevice.getUserPrincipalName());
|
||||
if (mailboxProfiles.contains(mailboxProfile)) {
|
||||
MailboxProfile existingMailboxProfile = mailboxProfiles.get(mailboxProfiles.indexOf(mailboxProfile));
|
||||
existingMailboxProfile.addActiveSyncAllowedEASIdentifier(activeSyncDevice.getDeviceId());
|
||||
} else {
|
||||
mailboxProfile.addActiveSyncAllowedEASIdentifier(activeSyncDevice.getDeviceId());
|
||||
mailboxProfiles.add(mailboxProfile);
|
||||
}
|
||||
}
|
||||
|
||||
for (ActiveSyncDevice activeSyncDevice : activeSyncBlockedDevices) {
|
||||
mailboxProfile = new MailboxProfile();
|
||||
mailboxProfile.setIdentity(activeSyncDevice.getUserPrincipalName());
|
||||
if (mailboxProfiles.contains(mailboxProfile)) {
|
||||
MailboxProfile existingMailboxProfile = mailboxProfiles.get(mailboxProfiles.indexOf(mailboxProfile));
|
||||
existingMailboxProfile.addActiveSyncBlockEASIdentifier(activeSyncDevice.getDeviceId());
|
||||
} else {
|
||||
mailboxProfile.addActiveSyncBlockEASIdentifier(activeSyncDevice.getDeviceId());
|
||||
mailboxProfiles.add(mailboxProfile);
|
||||
}
|
||||
}
|
||||
return mailboxProfiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct active sync device list from powershell response
|
||||
* @param powershellResponse Shell response return from powershell binary
|
||||
* @return List of {@link ActiveSyncDevice}
|
||||
* @throws CEAEnforcementException Throws when error occurred while generating the device list
|
||||
*/
|
||||
private List<ActiveSyncDevice> constructActiveSyncDeviceList(PowershellResponse powershellResponse)
|
||||
throws CEAEnforcementException {
|
||||
if (powershellResponse == null) {
|
||||
throw new CEAEnforcementException("Powershell response can't be null");
|
||||
}
|
||||
|
||||
if (!powershellResponse.isSuccess()) {
|
||||
throw new CEAEnforcementException("Powershell request failed while getting active sync devices");
|
||||
}
|
||||
|
||||
if (powershellResponse.getResponseBody() == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
if (!powershellResponse.getResponseBody().isJsonArray()) {
|
||||
throw new CEAEnforcementException("Unexpected result retrieve when getting active sync devices");
|
||||
}
|
||||
|
||||
SimpleDateFormat powershellDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||
List<ActiveSyncDevice> activeSyncDevices = new ArrayList<>();
|
||||
|
||||
JsonArray elements = powershellResponse.getResponseBody().getAsJsonArray();
|
||||
JsonObject deviceJsonObject;
|
||||
ActiveSyncDevice activeSyncDevice;
|
||||
for (JsonElement element : elements) {
|
||||
try {
|
||||
deviceJsonObject = element.getAsJsonObject();
|
||||
activeSyncDevice = new ActiveSyncDevice();
|
||||
activeSyncDevice.setUserPrincipalName(deviceJsonObject.get("UserPrincipalName").getAsString());
|
||||
activeSyncDevice.setDeviceId(deviceJsonObject.get("DeviceID").getAsString());
|
||||
activeSyncDevice.setIdentity(deviceJsonObject.get("Identity").getAsString());
|
||||
activeSyncDevice.setFirstSyncTime(powershellDateFormat.parse(deviceJsonObject.get("FirstSyncTime").getAsString()));
|
||||
activeSyncDevices.add(activeSyncDevice);
|
||||
} catch (ParseException e) {
|
||||
throw new CEAEnforcementException("Error occurred while parsing active sync device json element");
|
||||
}
|
||||
}
|
||||
return activeSyncDevices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active sync devices, which are connected with active sync server after a certain timestamp
|
||||
* @param after Timestamp to retrieve connected devices
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return List of {@link ActiveSyncDevice}
|
||||
* @throws GatewayServiceException Throws when error occurred while retrieving access token
|
||||
* @throws PowershellExecutionException Throws when error occurred while executing the powershell command
|
||||
* @throws CEAEnforcementException Throws when error occurred while constructing device list
|
||||
*/
|
||||
private List<ActiveSyncDevice> getConnectedActiveSyncDevicesAfter(Date after, ActiveSyncServer activeSyncServer)
|
||||
throws GatewayServiceException, PowershellExecutionException, CEAEnforcementException {
|
||||
SimpleDateFormat powershellDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||
PowershellCommand getEXOMobileDeviceStatistics = getCommand(Parser.COMMAND_GetEXOMobileDeviceStatistics.COMMAND,
|
||||
activeSyncServer);
|
||||
getEXOMobileDeviceStatistics.addOption(Parser.COMMAND_GetEXOMobileDeviceStatistics.PARAMETER_ActiveSync, "");
|
||||
getEXOMobileDeviceStatistics.addOption(
|
||||
Parser.COMMAND_GetEXOMobileDeviceStatistics.PARAMETER_Mailbox, "$_.Identity");
|
||||
|
||||
PowershellCommand selectObject = getCommand(Parser.COMMAND_SelectObject.COMMAND, activeSyncServer);
|
||||
selectObject.addOption("@{label='UserPrincipalName' ; expression={$upn}},FirstSyncTime, DeviceID, Identity", "");
|
||||
|
||||
PowershellCommand whereObject = getCommand(Parser.COMMAND_WhereObject.COMMAND, activeSyncServer);
|
||||
whereObject.addOption(Parser.COMMAND_WhereObject.PARAMETER_Begin, "$_.FirstSyncTime -gt "
|
||||
+ "'" + powershellDateFormat.format(after) + "'");
|
||||
whereObject.addOption(Parser.COMMAND_WhereObject.PARAMETER_End, "");
|
||||
|
||||
PowershellCommand convertToJson = getCommand(Parser.COMMAND_ConvertToJson.COMMAND, activeSyncServer);
|
||||
convertToJson.addOption(Parser.COMMAND_ConvertToJson.PARAMETER_AsArray, "");
|
||||
getEXOMobileDeviceStatistics.pipe(selectObject).pipe(whereObject).pipe(convertToJson);
|
||||
|
||||
PowershellCommand toAllMailboxes = toAllMailboxesCommand(getEXOMobileDeviceStatistics, activeSyncServer);
|
||||
PowershellRequest powershellRequest = getPowershellRequest(toAllMailboxes);
|
||||
PowershellResponse powershellResponse = powershell.execute(powershellRequest);
|
||||
return constructActiveSyncDeviceList(powershellResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active sync devices, which are connected with active sync server before a certain timestamp
|
||||
* @param before Timestamp to retrieve connected devices
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return List of {@link ActiveSyncDevice}
|
||||
* @throws GatewayServiceException Throws when error occurred while retrieving access token
|
||||
* @throws PowershellExecutionException Throws when error occurred while executing the powershell command
|
||||
* @throws CEAEnforcementException Throws when error occurred while constructing device list
|
||||
*/
|
||||
private List<ActiveSyncDevice> getConnectedActiveSyncDevicesBefore(Date before, ActiveSyncServer activeSyncServer)
|
||||
throws GatewayServiceException, PowershellExecutionException, CEAEnforcementException {
|
||||
SimpleDateFormat powershellDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||
PowershellCommand getEXOMobileDeviceStatistics = getCommand(Parser.COMMAND_GetEXOMobileDeviceStatistics.COMMAND,
|
||||
activeSyncServer);
|
||||
getEXOMobileDeviceStatistics.addOption(Parser.COMMAND_GetEXOMobileDeviceStatistics.PARAMETER_ActiveSync, "");
|
||||
getEXOMobileDeviceStatistics.addOption(
|
||||
Parser.COMMAND_GetEXOMobileDeviceStatistics.PARAMETER_Mailbox, "$_.Identity");
|
||||
|
||||
PowershellCommand selectObject = getCommand(Parser.COMMAND_SelectObject.COMMAND, activeSyncServer);
|
||||
selectObject.addOption("@{label='UserPrincipalName' ; expression={$upn}},FirstSyncTime, DeviceID, Identity", "");
|
||||
|
||||
PowershellCommand whereObject = getCommand(Parser.COMMAND_WhereObject.COMMAND, activeSyncServer);
|
||||
whereObject.addOption(Parser.COMMAND_WhereObject.PARAMETER_Begin, "$_.FirstSyncTime -lt "
|
||||
+ "'" + powershellDateFormat.format(before) + "'");
|
||||
whereObject.addOption(Parser.COMMAND_WhereObject.PARAMETER_End, "");
|
||||
|
||||
PowershellCommand convertToJson = getCommand(Parser.COMMAND_ConvertToJson.COMMAND, activeSyncServer);
|
||||
convertToJson.addOption(Parser.COMMAND_ConvertToJson.PARAMETER_AsArray, "");
|
||||
getEXOMobileDeviceStatistics.pipe(selectObject).pipe(whereObject).pipe(convertToJson);
|
||||
|
||||
PowershellCommand toAllMailboxes = toAllMailboxesCommand(getEXOMobileDeviceStatistics, activeSyncServer);
|
||||
PowershellRequest powershellRequest = getPowershellRequest(toAllMailboxes);
|
||||
PowershellResponse powershellResponse = powershell.execute(powershellRequest);
|
||||
return constructActiveSyncDeviceList(powershellResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all connected active sync devices from active sync server
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return List of {@link ActiveSyncDevice}
|
||||
* @throws GatewayServiceException Throws when error occurred while retrieving access token
|
||||
* @throws PowershellExecutionException Throws when error occurred while executing the powershell command
|
||||
* @throws CEAEnforcementException Throws when error occurred while constructing device list
|
||||
*/
|
||||
private List<ActiveSyncDevice> getAllConnectedActiveSyncDevices(ActiveSyncServer activeSyncServer)
|
||||
throws GatewayServiceException, PowershellExecutionException, CEAEnforcementException {
|
||||
PowershellCommand getEXOMobileDeviceStatistics = getCommand(Parser.COMMAND_GetEXOMobileDeviceStatistics.COMMAND,
|
||||
activeSyncServer);
|
||||
getEXOMobileDeviceStatistics.addOption(Parser.COMMAND_GetEXOMobileDeviceStatistics.PARAMETER_ActiveSync, "");
|
||||
getEXOMobileDeviceStatistics.addOption(
|
||||
Parser.COMMAND_GetEXOMobileDeviceStatistics.PARAMETER_Mailbox, "$_.Identity");
|
||||
|
||||
PowershellCommand convertToJson = getCommand(Parser.COMMAND_ConvertToJson.COMMAND, activeSyncServer);
|
||||
convertToJson.addOption(Parser.COMMAND_ConvertToJson.PARAMETER_AsArray, "");
|
||||
|
||||
PowershellCommand selectObject = getCommand(Parser.COMMAND_SelectObject.COMMAND, activeSyncServer);
|
||||
selectObject.addOption("@{label='UserPrincipalName' ; expression={$upn}},FirstSyncTime, DeviceID, Identity", "");
|
||||
|
||||
getEXOMobileDeviceStatistics.pipe(selectObject).pipe(convertToJson);
|
||||
|
||||
PowershellCommand toAllMailboxes = toAllMailboxesCommand(getEXOMobileDeviceStatistics, activeSyncServer);
|
||||
PowershellRequest powershellRequest = getPowershellRequest(toAllMailboxes);
|
||||
PowershellResponse powershellResponse = powershell.execute(powershellRequest);
|
||||
return constructActiveSyncDeviceList(powershellResponse);
|
||||
}
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.Impl.gateway;
|
||||
|
||||
import com.microsoft.aad.msal4j.ClientCredentialFactory;
|
||||
import com.microsoft.aad.msal4j.ClientCredentialParameters;
|
||||
import com.microsoft.aad.msal4j.ConfidentialClientApplication;
|
||||
import com.microsoft.aad.msal4j.IAuthenticationResult;
|
||||
import com.microsoft.aad.msal4j.IClientCredential;
|
||||
import com.microsoft.aad.msal4j.IConfidentialClientApplication;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.GatewayServiceException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.service.gateway.GatewayService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class ExchangeOnlineGatewayServiceImpl implements GatewayService {
|
||||
private static final Log log = LogFactory.getLog(ExchangeOnlineGatewayServiceImpl.class);
|
||||
private static final Set<String> SCOPES = new HashSet<>(Collections.singletonList("https://outlook.office365.com/.default"));
|
||||
private static final Map<String, IConfidentialClientApplication> confidentialClientApplications = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public String acquireAccessToken(ActiveSyncServer activeSyncServer) throws GatewayServiceException {
|
||||
try {
|
||||
IConfidentialClientApplication confidentialClientApplication = getOrCreateConfidentialClientApplication(
|
||||
activeSyncServer.getClient(), activeSyncServer.getSecret(), activeSyncServer.getGatewayUrl());
|
||||
ClientCredentialParameters clientCredentialParameters = ClientCredentialParameters.builder(SCOPES).build();
|
||||
IAuthenticationResult result = confidentialClientApplication.acquireToken(clientCredentialParameters).get();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Access token acquiring process is successful");
|
||||
}
|
||||
return result.accessToken();
|
||||
} catch (MalformedURLException e) {
|
||||
String msg = "Error occurred while constructing confidential client application";
|
||||
log.error(msg, e);
|
||||
throw new GatewayServiceException(msg, e);
|
||||
} catch (InterruptedException e) {
|
||||
String msg = "Error occurred while acquiring access token";
|
||||
log.error(msg, e);
|
||||
throw new GatewayServiceException(msg, e);
|
||||
} catch (ExecutionException e) {
|
||||
String msg = "Error occurred while executing token acquiring access token";
|
||||
log.error(msg, e);
|
||||
throw new GatewayServiceException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate(ActiveSyncServer activeSyncServer) throws GatewayServiceException {
|
||||
try {
|
||||
IConfidentialClientApplication confidentialClientApplication = getOrCreateConfidentialClientApplication(
|
||||
activeSyncServer.getClient(), activeSyncServer.getSecret(), activeSyncServer.getGatewayUrl());
|
||||
return confidentialClientApplication.validateAuthority();
|
||||
} catch (MalformedURLException e) {
|
||||
String msg = "Error occurred while constructing confidential client application";
|
||||
log.error(msg, e);
|
||||
throw new GatewayServiceException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve confidential client application if exists, otherwise create and retrieve
|
||||
* @param clientId Client ID of the Azure AD application
|
||||
* @param secret Client Secret of the Azure AD application
|
||||
* @param authority Authority URL of the tenant which Azure AD application belongs
|
||||
* @return {@link IConfidentialClientApplication}
|
||||
* @throws MalformedURLException Throws when trying to set malformed authority URL
|
||||
*/
|
||||
private IConfidentialClientApplication getOrCreateConfidentialClientApplication(String clientId, String secret, String authority)
|
||||
throws MalformedURLException {
|
||||
IConfidentialClientApplication confidentialClientApplication = confidentialClientApplications.get(clientId);
|
||||
if (confidentialClientApplication == null) {
|
||||
IClientCredential credential = ClientCredentialFactory.createFromSecret(secret);
|
||||
confidentialClientApplication = ConfidentialClientApplication.
|
||||
builder(clientId, credential).authority(authority).build();
|
||||
confidentialClientApplications.put(clientId, confidentialClientApplication);
|
||||
}
|
||||
return confidentialClientApplication;
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.bean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ExoPowershellCommand extends PowershellCommand {
|
||||
private static final String COMMAND_IMPORT_MODULE_EXO = "Import-Module ExchangeOnlineManagement" + SYMBOL_END_LINE;
|
||||
private static final String COMMAND_CONVERT_TO_JSON = "ConvertTo-Json";
|
||||
private final String accessToken;
|
||||
private final String organization;
|
||||
|
||||
protected ExoPowershellCommand(String command, String accessToken, String organization) {
|
||||
super(command);
|
||||
this.accessToken = accessToken;
|
||||
this.organization = organization;
|
||||
}
|
||||
|
||||
public String getCommandString() {
|
||||
List<String> partsOfCommand = new ArrayList<>(Arrays.asList(
|
||||
COMMAND_IMPORT_MODULE_EXO,
|
||||
constructConnectionCommand(),
|
||||
constructFullCommand(),
|
||||
SYMBOL_PIPE));
|
||||
|
||||
if (isOutputNull) {
|
||||
partsOfCommand.add(COMMAND_OUTPUT_NULL);
|
||||
} else if (convertToJson) {
|
||||
partsOfCommand.add(COMMAND_CONVERT_TO_JSON);
|
||||
} else {
|
||||
partsOfCommand.remove(partsOfCommand.size() - 1);
|
||||
}
|
||||
|
||||
return String.join(SYMBOL_SPLITTER, partsOfCommand);
|
||||
}
|
||||
|
||||
private String constructConnectionCommand() {
|
||||
return "Connect-ExchangeOnline" +
|
||||
" -Organization " + organization +
|
||||
" -AccessToken " + accessToken + " -ShowBanner:$false" + SYMBOL_END_LINE;
|
||||
}
|
||||
|
||||
public static class ExoPowershellCommandBuilder {
|
||||
private final String command;
|
||||
private String accessToken;
|
||||
private String organization;
|
||||
|
||||
public ExoPowershellCommandBuilder(String command) {
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public ExoPowershellCommandBuilder accessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExoPowershellCommandBuilder organization(String organization) {
|
||||
this.organization = organization;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExoPowershellCommand build() {
|
||||
return new ExoPowershellCommand(command, accessToken, organization);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.bean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class PowershellCommand {
|
||||
protected static final String COMMAND_OUTPUT_NULL = "Out-Null;";
|
||||
protected static final String SYMBOL_PIPE = "|";
|
||||
protected static final String SYMBOL_SPLITTER = "&";
|
||||
protected static final String SYMBOL_END_LINE = ";";
|
||||
protected final String command;
|
||||
protected final Map<String, String> parameters = new HashMap<>();
|
||||
protected boolean isOutputNull = false;
|
||||
protected boolean convertToJson = true;
|
||||
protected PowershellCommand pipedCommand;
|
||||
|
||||
public PowershellCommand(String command) {
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public boolean isOutputNull() {
|
||||
return isOutputNull;
|
||||
}
|
||||
|
||||
public void setOutputNull(boolean outputNull) {
|
||||
isOutputNull = outputNull;
|
||||
}
|
||||
|
||||
public boolean isConvertToJson() {
|
||||
return convertToJson;
|
||||
}
|
||||
|
||||
public void setConvertToJson(boolean convertToJson) {
|
||||
this.convertToJson = convertToJson;
|
||||
}
|
||||
|
||||
public void addOption(String option, String value) {
|
||||
parameters.put(option, value);
|
||||
}
|
||||
|
||||
protected String constructParameterString() {
|
||||
List<String> optionList = new ArrayList<>();
|
||||
for (String option : parameters.keySet()) {
|
||||
optionList.add(option + " " + parameters.get(option));
|
||||
}
|
||||
return String.join(" ", optionList);
|
||||
}
|
||||
|
||||
public String constructFullCommand() {
|
||||
String fullCommand = command + " " + constructParameterString();
|
||||
return pipedCommand == null ? fullCommand :
|
||||
fullCommand + SYMBOL_SPLITTER + SYMBOL_PIPE + SYMBOL_SPLITTER + pipedCommand.constructFullCommand();
|
||||
}
|
||||
|
||||
public PowershellCommand pipe(PowershellCommand command) {
|
||||
pipedCommand = command;
|
||||
return command;
|
||||
}
|
||||
|
||||
public abstract String getCommandString();
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.bean;
|
||||
|
||||
public class PowershellRequest {
|
||||
private PowershellCommand command;
|
||||
|
||||
public PowershellCommand getCommand() {
|
||||
return command;
|
||||
}
|
||||
|
||||
public void setCommand(PowershellCommand command) {
|
||||
this.command = command;
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.bean;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
|
||||
public class PowershellResponse {
|
||||
private JsonElement responseBody;
|
||||
private String error;
|
||||
private int code;
|
||||
private boolean isSuccess;
|
||||
|
||||
public PowershellResponse(JsonElement responseBody, String error, int code, boolean isSuccess) {
|
||||
this.responseBody = responseBody;
|
||||
this.error = error;
|
||||
this.code = code;
|
||||
this.isSuccess = isSuccess;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public JsonElement getResponseBody() {
|
||||
return responseBody;
|
||||
}
|
||||
|
||||
public void setResponseBody(JsonElement responseBody) {
|
||||
this.responseBody = responseBody;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
public void setError(String error) {
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
public boolean isSuccess() {
|
||||
return isSuccess;
|
||||
}
|
||||
|
||||
public void setSuccess(boolean success) {
|
||||
isSuccess = success;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.exception;
|
||||
|
||||
public class CEAPolicyOperationException extends Exception {
|
||||
public CEAPolicyOperationException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public CEAPolicyOperationException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.exception;
|
||||
|
||||
public class GatewayServiceException extends Exception {
|
||||
public GatewayServiceException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public GatewayServiceException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.exception;
|
||||
|
||||
public class PowershellExecutionException extends Exception {
|
||||
public PowershellExecutionException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public PowershellExecutionException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.exception;
|
||||
|
||||
public class UnsupportedOsException extends Exception {
|
||||
public UnsupportedOsException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.internal;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.EnforcementServiceManager;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.Impl.EnforcementServiceManagerImpl;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
|
||||
/**
|
||||
* @scr.component name="io.entgra.device.mgt.core.cea.mgt.enforcementServiceManager" immediate="true"
|
||||
* @scr.reference name="org.wso2.carbon.device.manager"
|
||||
* interface="io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setDeviceManagementServiceProviderService"
|
||||
* unbind="unsetDeviceManagementServiceProviderService"
|
||||
* @scr.reference name="user.realmservice.default"
|
||||
* interface="org.wso2.carbon.user.core.service.RealmService"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setRealmService"
|
||||
* unbind="unsetRealmService"
|
||||
*/
|
||||
|
||||
public class EnforcementServiceComponent {
|
||||
private static final Log log = LogFactory.getLog(EnforcementServiceComponent.class);
|
||||
|
||||
protected void activate(ComponentContext componentContext) {
|
||||
try {
|
||||
EnforcementServiceManager enforcementServiceManager = new EnforcementServiceManagerImpl();
|
||||
componentContext.getBundleContext().registerService(EnforcementServiceManager.class.getName(),
|
||||
enforcementServiceManager, null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Enforcement service manager initialized");
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
String msg = "Error occurred while activating " + EnforcementServiceComponent.class.getName();
|
||||
log.error(msg, t);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setDeviceManagementServiceProviderService(DeviceManagementProviderService deviceManagementProviderService) {
|
||||
EnforcementServiceComponentDataHolder.getInstance().setDeviceManagementProviderService(deviceManagementProviderService);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device management provider service is set successfully");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetDeviceManagementServiceProviderService(DeviceManagementProviderService deviceManagementProviderService) {
|
||||
EnforcementServiceComponentDataHolder.getInstance().setDeviceManagementProviderService(null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device management provider service is unset successfully");
|
||||
}
|
||||
}
|
||||
|
||||
protected void setRealmService(RealmService realmService) {
|
||||
EnforcementServiceComponentDataHolder.getInstance().setRealmService(realmService);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Realm service is set successfully");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetRealmService(RealmService realmService) {
|
||||
EnforcementServiceComponentDataHolder.getInstance().setRealmService(null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Realm service is unset successfully");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.internal;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
|
||||
public class EnforcementServiceComponentDataHolder {
|
||||
private DeviceManagementProviderService deviceManagementProviderService;
|
||||
private RealmService realmService;
|
||||
|
||||
EnforcementServiceComponentDataHolder() {
|
||||
}
|
||||
|
||||
public static EnforcementServiceComponentDataHolder getInstance() {
|
||||
return EnforcementServiceComponentDataHolderRegistry.INSTANCE;
|
||||
}
|
||||
|
||||
public DeviceManagementProviderService getDeviceManagementProviderService() {
|
||||
return deviceManagementProviderService;
|
||||
}
|
||||
|
||||
public void setDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
|
||||
this.deviceManagementProviderService = deviceManagementProviderService;
|
||||
}
|
||||
|
||||
public RealmService getRealmService() {
|
||||
return realmService;
|
||||
}
|
||||
|
||||
public void setRealmService(RealmService realmService) {
|
||||
this.realmService = realmService;
|
||||
}
|
||||
|
||||
private static class EnforcementServiceComponentDataHolderRegistry {
|
||||
public static final EnforcementServiceComponentDataHolder INSTANCE = new EnforcementServiceComponentDataHolder();
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.service;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.CEAPolicyOperationException;
|
||||
|
||||
public interface CEAPolicyOperation {
|
||||
/**
|
||||
* Sync with the active sync server and enforce the conditional access policy
|
||||
*
|
||||
* @throws CEAPolicyOperationException Throws when error occurred while performing enforcement operations
|
||||
*/
|
||||
void enforce() throws CEAPolicyOperationException;
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.service.gateway;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.GatewayServiceException;
|
||||
|
||||
public interface GatewayService {
|
||||
/**
|
||||
* Retrieve access token to invoke active sync server endpoints
|
||||
*
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return Obtained access token
|
||||
* @throws GatewayServiceException Throws when error occurred while obtaining an access token
|
||||
*/
|
||||
String acquireAccessToken(ActiveSyncServer activeSyncServer) throws GatewayServiceException;
|
||||
|
||||
/**
|
||||
* Validate the access token
|
||||
*
|
||||
* @param activeSyncServer {@link ActiveSyncServer}
|
||||
* @return True when the token is valid, otherwise false
|
||||
* @throws GatewayServiceException Throws when error occurred while validating the token
|
||||
*/
|
||||
boolean validate(ActiveSyncServer activeSyncServer) throws GatewayServiceException;
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util;
|
||||
|
||||
public class Constants {
|
||||
public static final String EMAIL_CLAIM_URI = "http://wso2.org/claims/emailaddress";
|
||||
public static final String DEVICE_TYPE_ANDROID = "android";
|
||||
public static final String DEVICE_PROPERTY_EAS_ID = "EASDeviceIdentifier";
|
||||
public static final String METHOD_NAME_GET_INSTANCE = "getInstance";
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncDevice;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.internal.EnforcementServiceComponentDataHolder;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.Device;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.EnrolmentInfo;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.api.UserStoreManager;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DeviceMgtUtil {
|
||||
private static final Log log = LogFactory.getLog(DeviceMgtUtil.class);
|
||||
|
||||
/**
|
||||
* Retrieve enrolled devices before or after a certain timestamp
|
||||
* @param date Timestamp to retrieve devices
|
||||
* @param isPriorTo Whether to retrieve prior devices based on the provided timestamp
|
||||
* @return List of {@link ActiveSyncDevice}
|
||||
* @throws DeviceManagementException Throws when error occurred while retrieving devices
|
||||
* @throws UserStoreException Throws when failed to obtain user details belongs to a device
|
||||
*/
|
||||
public static List<ActiveSyncDevice> getEnrolledActiveSyncDevices(Date date, boolean isPriorTo)
|
||||
throws DeviceManagementException, UserStoreException {
|
||||
DeviceManagementProviderService deviceManagementProviderService =
|
||||
EnforcementServiceComponentDataHolder.getInstance().getDeviceManagementProviderService();
|
||||
if (deviceManagementProviderService == null) {
|
||||
String msg = "Device management provider service has not initialized";
|
||||
log.error(msg);
|
||||
throw new IllegalStateException(msg);
|
||||
}
|
||||
List<Device> devices = isPriorTo ? deviceManagementProviderService.getEnrolledDevicesPriorTo(date) :
|
||||
deviceManagementProviderService.getEnrolledDevicesSince(date);
|
||||
if (devices == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return DeviceMgtUtil.constructActiveSyncDeviceList(devices);
|
||||
}
|
||||
|
||||
private static UserStoreManager getUserStoreManager(int tenantId) throws UserStoreException {
|
||||
|
||||
RealmService realmService = EnforcementServiceComponentDataHolder.getInstance().getRealmService();
|
||||
if (realmService == null) {
|
||||
String msg = "Realm service has not initialized";
|
||||
log.error(msg);
|
||||
throw new IllegalStateException(msg);
|
||||
}
|
||||
return realmService.getTenantUserRealm(tenantId).getUserStoreManager();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate active sync device list from retrieved device list from device management service
|
||||
* @param devices List of devices retrieved from device management service
|
||||
* @return List of {@link ActiveSyncDevice}
|
||||
* @throws UserStoreException Throws when failed to load user details form user store
|
||||
*/
|
||||
private static List<ActiveSyncDevice> constructActiveSyncDeviceList(List<Device> devices)
|
||||
throws UserStoreException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
List<ActiveSyncDevice> activeSyncDevices = new ArrayList<>();
|
||||
UserStoreManager userStoreManager = getUserStoreManager(tenantId);
|
||||
if (userStoreManager == null) {
|
||||
String msg = "Retrieved null for user store manager";
|
||||
log.error(msg);
|
||||
throw new IllegalStateException(msg);
|
||||
}
|
||||
|
||||
// filter out the android devices since android devices are resolved from the active sync server
|
||||
devices = devices.stream().filter(device -> !Objects.equals(device.getType(), Constants.DEVICE_TYPE_ANDROID)).
|
||||
collect(Collectors.toList());
|
||||
|
||||
for (Device device : devices) {
|
||||
activeSyncDevices.add(mapToActiveSyncDevice(device, userStoreManager));
|
||||
}
|
||||
|
||||
return activeSyncDevices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Map devices which are retrieved from device management service to active sync devices
|
||||
* @param device Device list retrieved from device management service
|
||||
* @param userStoreManager {@link UserStoreManager}
|
||||
* @return {@link ActiveSyncDevice}
|
||||
* @throws UserStoreException Throws when failed to load user details form user store
|
||||
*/
|
||||
public static ActiveSyncDevice mapToActiveSyncDevice(Device device, UserStoreManager userStoreManager)
|
||||
throws UserStoreException {
|
||||
EnrolmentInfo enrolmentInfo = device.getEnrolmentInfo();
|
||||
ActiveSyncDevice activeSyncDevice = new ActiveSyncDevice();
|
||||
activeSyncDevice.setUserPrincipalName(userStoreManager.
|
||||
getUserClaimValue(enrolmentInfo.getOwner(), Constants.EMAIL_CLAIM_URI, null));
|
||||
if (!Objects.equals(device.getType(), Constants.DEVICE_TYPE_ANDROID)) {
|
||||
for (Device.Property property : device.getProperties()) {
|
||||
if (property != null && Objects.equals(property.getName(), Constants.DEVICE_PROPERTY_EAS_ID)) {
|
||||
activeSyncDevice.setDeviceId(property.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
return activeSyncDevice;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface Enforce {
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.shell;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellRequest;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellResponse;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.PowershellExecutionException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.UnsupportedOsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.shell.os.LinuxPowershell;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.shell.os.MacPowershell;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.shell.os.WindowsPowershell;
|
||||
|
||||
public interface Powershell {
|
||||
String OS = System.getProperty("os.name").toLowerCase();
|
||||
boolean IS_UNIX = (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0);
|
||||
boolean IS_WINDOWS = (OS.indexOf("win") >= 0);
|
||||
boolean IS_MAC = (OS.indexOf("mac") >= 0);
|
||||
|
||||
static Powershell getPowershell() throws UnsupportedOsException {
|
||||
if (IS_UNIX) {
|
||||
return LinuxPowershell.getInstance();
|
||||
}
|
||||
if (IS_WINDOWS) {
|
||||
return WindowsPowershell.getInstance();
|
||||
}
|
||||
if (IS_MAC) {
|
||||
return MacPowershell.getInstance();
|
||||
}
|
||||
throw new UnsupportedOsException("OS is not supported!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the powershell request
|
||||
*
|
||||
* @param powershellRequest {@link PowershellRequest}
|
||||
* @return {@link PowershellResponse}
|
||||
* @throws PowershellExecutionException Throws when error occurred while execution
|
||||
*/
|
||||
PowershellResponse execute(PowershellRequest powershellRequest) throws PowershellExecutionException;
|
||||
}
|
||||
|
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.shell.os;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellRequest;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.bean.PowershellResponse;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.exception.PowershellExecutionException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.enforce.util.shell.Powershell;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class AbstractPowershell implements Powershell {
|
||||
private static final Log log = LogFactory.getLog(AbstractPowershell.class);
|
||||
protected static final String SYMBOL_SPLITTER = "&";
|
||||
private static final String PARAMETER_COMMAND = "-Command";
|
||||
private static final String COMMAND_REDIRECT_WARNINGS = "$WarningPreference = 'SilentlyContinue';";
|
||||
private final String BINARY;
|
||||
|
||||
AbstractPowershell(String BINARY) {
|
||||
this.BINARY = BINARY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PowershellResponse execute(PowershellRequest powershellRequest) throws PowershellExecutionException {
|
||||
|
||||
String commandString = String.join(SYMBOL_SPLITTER, Arrays.asList(BINARY, PARAMETER_COMMAND, COMMAND_REDIRECT_WARNINGS,
|
||||
powershellRequest.getCommand().getCommandString()));
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(Arrays.asList(commandString.split(SYMBOL_SPLITTER)));
|
||||
StringWriter standardOutputStringWriter = new StringWriter();
|
||||
PrintWriter standardOutputPrintWriter = new PrintWriter(standardOutputStringWriter);
|
||||
StringWriter errorStringWriter = new StringWriter();
|
||||
PrintWriter errorPrintWriter = new PrintWriter(errorStringWriter);
|
||||
try {
|
||||
Process process = processBuilder.start();
|
||||
List<Thread> streamConsumerThreads = Arrays.asList(
|
||||
new Thread(new ThreadedStreamConsumer(process.getInputStream(), standardOutputPrintWriter)),
|
||||
new Thread(new ThreadedStreamConsumer(process.getErrorStream(), errorPrintWriter))
|
||||
);
|
||||
|
||||
for (Thread streamConsumerThread : streamConsumerThreads) {
|
||||
streamConsumerThread.start();
|
||||
}
|
||||
int exitCode = process.waitFor();
|
||||
|
||||
for (Thread streamConsumerThread : streamConsumerThreads) {
|
||||
streamConsumerThread.join();
|
||||
}
|
||||
return constructResponse(exitCode, getStringContent(standardOutputStringWriter),
|
||||
getStringContent(errorStringWriter));
|
||||
} catch (IOException e) {
|
||||
String msg = "IOException occurred while executing powershell command : "
|
||||
+ powershellRequest.getCommand();
|
||||
log.error(msg, e);
|
||||
throw new PowershellExecutionException(msg, e);
|
||||
} catch (InterruptedException e) {
|
||||
String msg = "Thread got interrupted while executing powershell command : "
|
||||
+ powershellRequest.getCommand();
|
||||
log.error(msg, e);
|
||||
throw new PowershellExecutionException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
private PowershellResponse constructResponse(int exitCode, String standardOutput, String errorOutput) {
|
||||
JsonElement standardOutputJson = new Gson().fromJson(standardOutput, JsonElement.class);
|
||||
return new PowershellResponse(standardOutputJson,
|
||||
errorOutput, exitCode, exitCode == 0);
|
||||
}
|
||||
|
||||
private String getStringContent(StringWriter stringWriter) {
|
||||
return stringWriter.getBuffer().toString().trim();
|
||||
}
|
||||
|
||||
private static class ThreadedStreamConsumer implements Runnable {
|
||||
private final InputStream inputStream;
|
||||
private final PrintWriter printWriter;
|
||||
|
||||
public ThreadedStreamConsumer(InputStream inputStream, PrintWriter printWriter) {
|
||||
this.inputStream = inputStream;
|
||||
this.printWriter = printWriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
new BufferedReader(new InputStreamReader(inputStream)).
|
||||
lines().forEach(printWriter::println);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.shell.os;
|
||||
|
||||
public class LinuxPowershell extends AbstractPowershell {
|
||||
private static final String BINARY = "pwsh";
|
||||
|
||||
LinuxPowershell() {
|
||||
super(BINARY);
|
||||
}
|
||||
|
||||
public static LinuxPowershell getInstance() {
|
||||
return LinuxPowershellHolderRegistry.INSTANCE;
|
||||
}
|
||||
|
||||
private static class LinuxPowershellHolderRegistry {
|
||||
public static LinuxPowershell INSTANCE = new LinuxPowershell();
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.shell.os;
|
||||
|
||||
public class MacPowershell extends AbstractPowershell {
|
||||
private static final String BINARY = "pwsh";
|
||||
|
||||
MacPowershell() {
|
||||
super(BINARY);
|
||||
}
|
||||
|
||||
public static MacPowershell getInstance() {
|
||||
return MacPowershell.MacPowershellHolderRegistry.INSTANCE;
|
||||
}
|
||||
|
||||
private static class MacPowershellHolderRegistry {
|
||||
public static MacPowershell INSTANCE = new MacPowershell();
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.shell.os;
|
||||
|
||||
public class WindowsPowershell extends AbstractPowershell {
|
||||
private static final String BINARY = "powershell.exe";
|
||||
|
||||
WindowsPowershell() {
|
||||
super(BINARY);
|
||||
}
|
||||
|
||||
public static WindowsPowershell getInstance() {
|
||||
return WindowsPowershell.WindowsPowershellHolderRegistry.INSTANCE;
|
||||
}
|
||||
|
||||
private static class WindowsPowershellHolderRegistry {
|
||||
public static WindowsPowershell INSTANCE = new WindowsPowershell();
|
||||
}
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.cea.mgt.enforce.util.shell.parser;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.DefaultAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.EmailOutlookAccessPolicy;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class Parser {
|
||||
public static final String TRUE = "$true";
|
||||
public static final String FALSE = "$false";
|
||||
public static final String ALLOW = "ALLOW";
|
||||
public static final String BLOCK = "BLOCK";
|
||||
|
||||
public static class COMMAND_SetActiveSyncOrganizationSettings {
|
||||
public static final String COMMAND = "Set-ActiveSyncOrganizationSettings";
|
||||
public static final String PARAMETER_DefaultAccessLevel = "-DefaultAccessLevel";
|
||||
public static final Map<String, String> POLICY_TO_VALUE = Stream.of(new String[][]{
|
||||
{DefaultAccessPolicy.ALLOW.toString(), "Allow"},
|
||||
{DefaultAccessPolicy.BLOCK.toString(), "Block"},
|
||||
{DefaultAccessPolicy.QUARANTINE.toString(), "Quarantine"}
|
||||
}).collect(Collectors.collectingAndThen(
|
||||
Collectors.toMap(entry -> entry[0], entry -> entry[1]),
|
||||
Collections::<String, String>unmodifiableMap
|
||||
));
|
||||
}
|
||||
|
||||
public static class COMMAND_SetCASMailbox {
|
||||
public static final String COMMAND = "Set-CASMailbox";
|
||||
public static final String PARAMETER_Identity = "-Identity";
|
||||
public static final String PARAMETER_ActiveSyncAllowedDeviceIDs = "-ActiveSyncAllowedDeviceIDs";
|
||||
public static final String PARAMETER_ActiveSyncBlockedDeviceIDs = "-ActiveSyncBlockedDeviceIDs";
|
||||
public static final String PARAMETER_EwsAllowMacOutlook = "-EwsAllowMacOutlook";
|
||||
public static final String PARAMETER_MacOutlookEnabled = "-MacOutlookEnabled";
|
||||
public static final String PARAMETER_OneWinNativeOutlookEnabled = "-OneWinNativeOutlookEnabled";
|
||||
public static final String PARAMETER_OutlookMobileEnabled = "-OutlookMobileEnabled";
|
||||
public static final String PARAMETER_OWAEnabled = "-OWAEnabled";
|
||||
public static final String PARAMETER_ImapEnabled = "-ImapEnabled";
|
||||
public static final String PARAMETER_PopEnabled = "-PopEnabled";
|
||||
public static final Map<String, String> POLICY_TO_VALUE = Stream.of(new String[][]{
|
||||
{EmailOutlookAccessPolicy.MOBILE_OUTLOOK_BLOCK.toString(), FALSE},
|
||||
{EmailOutlookAccessPolicy.MAC_OUTLOOK_BLOCK.toString(), FALSE},
|
||||
{EmailOutlookAccessPolicy.WINDOWS_OUTLOOK_BLOCK.toString(), FALSE},
|
||||
{EmailOutlookAccessPolicy.MAC_OLD_OUTLOOK_BLOCK.toString(), FALSE},
|
||||
{ALLOW, TRUE},
|
||||
{BLOCK, FALSE}
|
||||
}).collect(Collectors.collectingAndThen(
|
||||
Collectors.toMap(entry -> entry[0], entry -> entry[1]),
|
||||
Collections::<String, String>unmodifiableMap
|
||||
));
|
||||
}
|
||||
|
||||
public static class COMMAND_GetEXOMailbox {
|
||||
public static final String COMMAND = "Get-EXOMailbox";
|
||||
public static final String PARAMETER_ResultSize = "-ResultSize";
|
||||
}
|
||||
|
||||
public static class COMMAND_ForEach {
|
||||
public static final String COMMAND = "ForEach";
|
||||
public static final String PARAMETER_Begin = "{";
|
||||
public static final String PARAMETER_End = "}";
|
||||
}
|
||||
|
||||
public static class COMMAND_WhereObject {
|
||||
public static final String COMMAND = "Where-Object";
|
||||
public static final String PARAMETER_Begin = "{";
|
||||
public static final String PARAMETER_End = "}";
|
||||
}
|
||||
|
||||
public static class COMMAND_GetEXOMobileDeviceStatistics {
|
||||
public static final String COMMAND = "Get-EXOMobileDeviceStatistics";
|
||||
public static final String PARAMETER_ActiveSync = "-ActiveSync";
|
||||
public static final String PARAMETER_Mailbox = "-Mailbox";
|
||||
}
|
||||
|
||||
public static class COMMAND_ConvertToJson {
|
||||
public static final String COMMAND = "ConvertTo-Json";
|
||||
public static final String PARAMETER_AsArray = "-AsArray";
|
||||
}
|
||||
|
||||
public static class COMMAND_SelectObject {
|
||||
public static final String COMMAND = "Select-Object";
|
||||
}
|
||||
|
||||
public static class COMMAND_SetVariable {
|
||||
public static final String COMMAND = "Set-Variable";
|
||||
public static final String PARAMETER_Name = "-Name";
|
||||
public static final String PARAMETER_Value = "-Value";
|
||||
public static final String PARAMETER_PassThrough = "-PassThru";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>io.entgra.device.mgt.core</groupId>
|
||||
<artifactId>io.entgra.device.mgt.core.parent</artifactId>
|
||||
<version>5.0.38-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>cea-mgt</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<name>Entgra IoT - CEA Management Component</name>
|
||||
<description>Entgra IoT - Conditional Email Access Management Component</description>
|
||||
|
||||
<modules>
|
||||
<module>io.entgra.device.mgt.core.cea.mgt.core</module>
|
||||
<module>io.entgra.device.mgt.core.cea.mgt.common</module>
|
||||
<module>io.entgra.device.mgt.core.cea.mgt.enforce</module>
|
||||
</modules>
|
||||
</project>
|
@ -0,0 +1,58 @@
|
||||
package io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@ApiModel(value = "AccessPolicyWrapper", description = "Access policy transferring DTO")
|
||||
public class AccessPolicyWrapper {
|
||||
@JsonProperty(value = "defaultAccessPolicy", required = true)
|
||||
@ApiModelProperty(name = "defaultAccessPolicy", value = "Default access policy value", required = true)
|
||||
private String defaultAccessPolicy;
|
||||
|
||||
@JsonProperty(value = "emailOutlookAccessPolicy", required = true)
|
||||
@ApiModelProperty(name = "emailOutlookAccessPolicy", value = "Email outlook access policy value", required = true)
|
||||
private Set<String> emailOutlookAccessPolicy;
|
||||
|
||||
@JsonProperty(value = "POPIMAPAccessPolicy", required = true)
|
||||
@ApiModelProperty(name = "POPIMAPAccessPolicy", value = "POP/IMAP access policy value", required = true)
|
||||
private String POPIMAPAccessPolicy;
|
||||
|
||||
@JsonProperty(value = "webOutlookAccessPolicy", required = true)
|
||||
@ApiModelProperty(name = "webOutlookAccessPolicy", value = "Web outlook access policy value", required = true)
|
||||
private String webOutlookAccessPolicy;
|
||||
|
||||
public String getDefaultAccessPolicy() {
|
||||
return defaultAccessPolicy;
|
||||
}
|
||||
|
||||
public void setDefaultAccessPolicy(String defaultAccessPolicy) {
|
||||
this.defaultAccessPolicy = defaultAccessPolicy;
|
||||
}
|
||||
|
||||
public Set<String> getEmailOutlookAccessPolicy() {
|
||||
return emailOutlookAccessPolicy;
|
||||
}
|
||||
|
||||
public void setEmailOutlookAccessPolicy(Set<String> emailOutlookAccessPolicy) {
|
||||
this.emailOutlookAccessPolicy = emailOutlookAccessPolicy;
|
||||
}
|
||||
|
||||
public String getPOPIMAPAccessPolicy() {
|
||||
return POPIMAPAccessPolicy;
|
||||
}
|
||||
|
||||
public void setPOPIMAPAccessPolicy(String POPIMAPAccessPolicy) {
|
||||
this.POPIMAPAccessPolicy = POPIMAPAccessPolicy;
|
||||
}
|
||||
|
||||
public String getWebOutlookAccessPolicy() {
|
||||
return webOutlookAccessPolicy;
|
||||
}
|
||||
|
||||
public void setWebOutlookAccessPolicy(String webOutlookAccessPolicy) {
|
||||
this.webOutlookAccessPolicy = webOutlookAccessPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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.device.mgt.api.jaxrs.beans;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
@ApiModel(value = "CEAPolicyWrapper", description = "CEA policy transferring DTO")
|
||||
public class CEAPolicyWrapper {
|
||||
@JsonProperty(value = "activeSyncServerEntries", required = true)
|
||||
@ApiModelProperty(name = "activeSyncServerEntries", value = "Active sync server properties", required = true)
|
||||
private ActiveSyncServer activeSyncServerEntries;
|
||||
|
||||
@JsonProperty(value = "conditionalAccessPolicyEntries", required = true)
|
||||
@ApiModelProperty(name = "conditionalAccessPolicyEntries", value = "Definition of the access policy", required = true)
|
||||
private AccessPolicyWrapper conditionalAccessPolicyEntries;
|
||||
|
||||
@JsonProperty(value = "gracePeriodEntries", required = true)
|
||||
@ApiModelProperty(name = "gracePeriodEntries", value = "Definition of the grace period", required = true)
|
||||
private GracePeriodWrapper gracePeriodEntries;
|
||||
|
||||
public ActiveSyncServer getActiveSyncServerEntries() {
|
||||
return activeSyncServerEntries;
|
||||
}
|
||||
|
||||
public void setActiveSyncServerEntries(ActiveSyncServer activeSyncServerEntries) {
|
||||
this.activeSyncServerEntries = activeSyncServerEntries;
|
||||
}
|
||||
|
||||
public AccessPolicyWrapper getConditionalAccessPolicyEntries() {
|
||||
return conditionalAccessPolicyEntries;
|
||||
}
|
||||
|
||||
public void setConditionalAccessPolicyEntries(AccessPolicyWrapper conditionalAccessPolicyEntries) {
|
||||
this.conditionalAccessPolicyEntries = conditionalAccessPolicyEntries;
|
||||
}
|
||||
|
||||
public GracePeriodWrapper getGracePeriodEntries() {
|
||||
return gracePeriodEntries;
|
||||
}
|
||||
|
||||
public void setGracePeriodEntries(GracePeriodWrapper gracePeriodEntries) {
|
||||
this.gracePeriodEntries = gracePeriodEntries;
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@ApiModel(value = "GracePeriodWrapper", description = "GracePeriod transferring DTO")
|
||||
public class GracePeriodWrapper {
|
||||
|
||||
@JsonProperty(value = "gracePeriod", required = true)
|
||||
@ApiModelProperty(name = "gracePeriod", value = "Grace period in days", required = true)
|
||||
private int gracePeriod;
|
||||
|
||||
@JsonProperty(value = "graceAllowedPolicy", required = true)
|
||||
@ApiModelProperty(name = "graceAllowedPolicy", value = "Grace allowed policy values", required = true)
|
||||
private String graceAllowedPolicy;
|
||||
|
||||
public int getGracePeriod() {
|
||||
return gracePeriod;
|
||||
}
|
||||
|
||||
public void setGracePeriod(int gracePeriod) {
|
||||
this.gracePeriod = gracePeriod;
|
||||
}
|
||||
|
||||
public String getGraceAllowedPolicy() {
|
||||
return graceAllowedPolicy;
|
||||
}
|
||||
|
||||
public void setGraceAllowedPolicy(String graceAllowedPolicy) {
|
||||
this.graceAllowedPolicy = graceAllowedPolicy;
|
||||
}
|
||||
}
|
@ -0,0 +1,336 @@
|
||||
/*
|
||||
* 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.device.mgt.api.jaxrs.service.api.admin;
|
||||
|
||||
import io.entgra.device.mgt.core.apimgt.annotations.Scope;
|
||||
import io.entgra.device.mgt.core.apimgt.annotations.Scopes;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.CEAPolicyWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.ErrorResponse;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.Constants;
|
||||
import io.swagger.annotations.*;
|
||||
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
@Api(tags = {"conditional_email_access", "device_management"})
|
||||
@Path("/admin/cea-policies")
|
||||
@SwaggerDefinition(
|
||||
info = @Info(
|
||||
description = "Conditional Email Access Management",
|
||||
version = "v1.0.0",
|
||||
title = "CEAManagementAdminService API",
|
||||
extensions = @Extension(properties = {
|
||||
@ExtensionProperty(name = "name", value = "CEAManagementAdminService"),
|
||||
@ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/admin/cea-policies"),
|
||||
})
|
||||
),
|
||||
consumes = {MediaType.APPLICATION_JSON},
|
||||
produces = {MediaType.APPLICATION_JSON},
|
||||
schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS},
|
||||
tags = {
|
||||
@Tag(name = "device_management", description = "Device management"),
|
||||
@Tag(name = "conditional_email_access", description = "Mailbox access management")
|
||||
}
|
||||
)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Scopes(
|
||||
scopes = {
|
||||
@Scope(
|
||||
name = "CEA policy ui configuration view",
|
||||
description = "CEA policy ui configuration view",
|
||||
key = "dm:admin:cea:view",
|
||||
roles = {"Internal/devicemgt-admin"},
|
||||
permissions = {"/device-mgt/admin/cea/view"}
|
||||
),
|
||||
@Scope(
|
||||
name = "Add CEA policy",
|
||||
description = "Add CEA policy",
|
||||
key = "dm:admin:cea:add",
|
||||
roles = {"Internal/devicemgt-admin"},
|
||||
permissions = {"/device-mgt/admin/cea/add"}
|
||||
),
|
||||
@Scope(
|
||||
name = "Update CEA policy",
|
||||
description = "Update CEA policy",
|
||||
key = "dm:admin:cea:update",
|
||||
roles = {"Internal/devicemgt-admin"},
|
||||
permissions = {"/device-mgt/admin/cea/update"}
|
||||
),
|
||||
@Scope(
|
||||
name = "Delete CEA policy",
|
||||
description = "Delete CEA policy",
|
||||
key = "dm:admin:cea:delete",
|
||||
roles = {"Internal/devicemgt-admin"},
|
||||
permissions = {"/device-mgt/admin/cea/delete"}
|
||||
),
|
||||
@Scope(
|
||||
name = "Sync CEA policy",
|
||||
description = "Sync CEA policy",
|
||||
key = "dm:admin:cea:sync",
|
||||
roles = {"Internal/devicemgt-admin"},
|
||||
permissions = {"/device-mgt/admin/cea/sync"}
|
||||
)
|
||||
}
|
||||
)
|
||||
public interface CEAManagementAdminService {
|
||||
@GET
|
||||
@Path("/ui")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HttpMethod.GET,
|
||||
value = "Retrieve CEA policy ui configurations",
|
||||
notes = "Returns CEA policy ui configurations for supporting mail services",
|
||||
tags = {"conditional_email_access", "device_management"},
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "dm:admin:cea:view")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(code = 200,
|
||||
message = "OK. \n Successfully retrieve the cea ui configurations",
|
||||
response = Integer.class),
|
||||
@ApiResponse(
|
||||
code = 304,
|
||||
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
||||
"the requested resource."),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Configurations not found",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 406,
|
||||
message = "Not Acceptable.\n The requested media type is not supported."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Server error occurred while fetching the group count.",
|
||||
response = ErrorResponse.class)
|
||||
}
|
||||
)
|
||||
Response getCEAPolicyUI();
|
||||
|
||||
|
||||
@POST
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HttpMethod.POST,
|
||||
value = "Add CEA policy",
|
||||
notes = "Create conditional email access policy",
|
||||
tags = {"conditional_email_access", "device_management"},
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "dm:admin:cea:add")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 201,
|
||||
message = "OK. \n Successfully created the CEA policy",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Found. \n The specified resource does not exist."),
|
||||
@ApiResponse(
|
||||
code = 409,
|
||||
message = "Conflict. \n CEA policy already exists.",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 415,
|
||||
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Server error occurred while creating the resource.",
|
||||
response = ErrorResponse.class)
|
||||
}
|
||||
)
|
||||
Response createCEAPolicy(
|
||||
@ApiParam(
|
||||
name = "ceaPolicy",
|
||||
value = "Conditional email access policy details",
|
||||
required = true
|
||||
)
|
||||
CEAPolicyWrapper ceaPolicyWrapper);
|
||||
|
||||
@GET
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HttpMethod.GET,
|
||||
value = "Retrieve CEA policy",
|
||||
notes = "Retrieve conditional email access policy",
|
||||
tags = {"conditional_email_access", "device_management"},
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "dm:admin:cea:view")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully retrieved the CEA policy",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Found. \n The specified resource does not exist."),
|
||||
@ApiResponse(
|
||||
code = 409,
|
||||
message = "Conflict. \n CEA policy already exists.",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 415,
|
||||
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Server error occurred while creating the resource.",
|
||||
response = ErrorResponse.class)
|
||||
}
|
||||
)
|
||||
Response retrieveCEAPolicy();
|
||||
|
||||
@DELETE
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HttpMethod.DELETE,
|
||||
value = "Delete CEA policy",
|
||||
notes = "Delete conditional email access policy",
|
||||
tags = {"conditional_email_access", "device_management"},
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "dm:admin:cea:delete")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully deleted the CEA policy",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Found. \n The specified resource does not exist."),
|
||||
@ApiResponse(
|
||||
code = 415,
|
||||
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Server error occurred while creating the resource.",
|
||||
response = ErrorResponse.class)
|
||||
}
|
||||
)
|
||||
Response deleteCEAPolicy();
|
||||
|
||||
@PUT
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HttpMethod.PUT,
|
||||
value = "Update CEA policy",
|
||||
notes = "Update conditional email access policy",
|
||||
tags = {"conditional_email_access", "device_management"},
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "dm:admin:cea:update")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully updated the CEA policy",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Found. \n The specified resource does not exist."),
|
||||
@ApiResponse(
|
||||
code = 415,
|
||||
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Server error occurred while creating the resource.",
|
||||
response = ErrorResponse.class)
|
||||
}
|
||||
)
|
||||
Response updateCEAPolicy(@ApiParam(
|
||||
name = "ceaPolicy",
|
||||
value = "Conditional email access policy details",
|
||||
required = true
|
||||
) CEAPolicyWrapper ceaPolicyWrapper);
|
||||
|
||||
@GET
|
||||
@Path("/sync-now")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HttpMethod.GET,
|
||||
value = "Sync with active sync server",
|
||||
notes = "Sync and enforce conditional access policy",
|
||||
tags = {"conditional_email_access", "device_management"},
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "dm:admin:cea:sync")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 201,
|
||||
message = "OK. \n Successfully triggered CEA policy sync",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Found. \n The specified resource does not exist."),
|
||||
@ApiResponse(
|
||||
code = 415,
|
||||
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Server error occurred while creating the resource.",
|
||||
response = ErrorResponse.class)
|
||||
}
|
||||
)
|
||||
Response sync();
|
||||
}
|
@ -0,0 +1,202 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, 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.device.mgt.api.jaxrs.service.impl.admin;
|
||||
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.AccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServer;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ActiveSyncServerUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.CEAPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.GracePeriod;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.DefaultAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.EmailOutlookAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.GraceAllowedPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.POPIMAPAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.enums.WebOutlookAccessPolicy;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.CEAPolicyUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.bean.ui.ServerUIConfiguration;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAManagementException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.exception.CEAPolicyNotFoundException;
|
||||
import io.entgra.device.mgt.core.cea.mgt.common.service.CEAManagementService;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.AccessPolicyWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.CEAPolicyWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.GracePeriodWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.api.admin.CEAManagementAdminService;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl.util.RequestValidationUtil;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.DeviceMgtAPIUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Path("/admin/cea-policies")
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public class CEAManagementAdminServiceImpl implements CEAManagementAdminService {
|
||||
private static final Log log = LogFactory.getLog(CEAManagementAdminServiceImpl.class);
|
||||
|
||||
@GET
|
||||
@Path("/ui")
|
||||
@Override
|
||||
public Response getCEAPolicyUI() {
|
||||
CEAManagementService ceaManagementService = DeviceMgtAPIUtils.getCEAManagementService();
|
||||
try {
|
||||
CEAPolicyUIConfiguration ceaPolicyUIConfiguration = ceaManagementService.getCEAPolicyUIConfiguration();
|
||||
if (ceaPolicyUIConfiguration == null) {
|
||||
return Response.status(HttpStatus.SC_NOT_FOUND).entity("UI configurations not found").build();
|
||||
}
|
||||
return Response.status(HttpStatus.SC_OK).entity(ceaPolicyUIConfiguration).build();
|
||||
} catch (CEAManagementException e) {
|
||||
String msg = "Error occurred while retrieving CEA ui configs";
|
||||
log.error(msg, e);
|
||||
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Override
|
||||
public Response createCEAPolicy(CEAPolicyWrapper ceaPolicyWrapper) {
|
||||
try {
|
||||
RequestValidationUtil.validateCEAPolicy(ceaPolicyWrapper);
|
||||
CEAManagementService ceaManagementService = DeviceMgtAPIUtils.getCEAManagementService();
|
||||
CEAPolicy ceaPolicy = constructCEAPolicy(ceaPolicyWrapper);
|
||||
ceaPolicy = ceaManagementService.createCEAPolicy(ceaPolicy);
|
||||
return Response.status(HttpStatus.SC_CREATED).entity(ceaPolicy).build();
|
||||
} catch (CEAPolicyAlreadyExistsException e) {
|
||||
String msg = "CEA policy already exists for the tenant";
|
||||
log.warn(msg);
|
||||
return Response.status(HttpStatus.SC_CONFLICT).entity(msg).build();
|
||||
} catch (CEAManagementException e) {
|
||||
String msg = "Error occurred while creating CEA policy";
|
||||
log.error(msg, e);
|
||||
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response retrieveCEAPolicy() {
|
||||
try {
|
||||
CEAManagementService ceaManagementService = DeviceMgtAPIUtils.getCEAManagementService();
|
||||
CEAPolicy ceaPolicy = ceaManagementService.retrieveCEAPolicy();
|
||||
if (ceaPolicy == null) {
|
||||
return Response.status(HttpStatus.SC_NOT_FOUND).entity("CEA policy isn't exists in the tenant").build();
|
||||
}
|
||||
return Response.status(HttpStatus.SC_OK).entity(ceaPolicy).build();
|
||||
} catch (CEAManagementException e) {
|
||||
String msg = "Error occurred while retrieving CEA policy";
|
||||
log.error(msg, e);
|
||||
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response deleteCEAPolicy() {
|
||||
try {
|
||||
CEAManagementService ceaManagementService = DeviceMgtAPIUtils.getCEAManagementService();
|
||||
ceaManagementService.deleteCEAPolicy();
|
||||
return Response.status(HttpStatus.SC_OK).build();
|
||||
} catch (CEAPolicyNotFoundException e) {
|
||||
String msg = "CEA policy isn't exists in the tenant";
|
||||
log.warn(msg);
|
||||
return Response.status(HttpStatus.SC_NOT_FOUND).entity(msg).build();
|
||||
} catch (CEAManagementException e) {
|
||||
String msg = "Error occurred while deleting CEA policy";
|
||||
log.error(msg, e);
|
||||
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response updateCEAPolicy(CEAPolicyWrapper ceaPolicyWrapper) {
|
||||
try {
|
||||
RequestValidationUtil.validateCEAPolicy(ceaPolicyWrapper);
|
||||
CEAManagementService ceaManagementService = DeviceMgtAPIUtils.getCEAManagementService();
|
||||
CEAPolicy ceaPolicy = constructCEAPolicy(ceaPolicyWrapper);
|
||||
ceaPolicy = ceaManagementService.updateCEAPolicy(ceaPolicy);
|
||||
return Response.status(HttpStatus.SC_CREATED).entity(ceaPolicy).build();
|
||||
} catch (CEAPolicyNotFoundException e) {
|
||||
String msg = "CEA policy isn't exists in the tenant";
|
||||
log.warn(msg);
|
||||
return Response.status(HttpStatus.SC_NOT_FOUND).entity(msg).build();
|
||||
} catch (CEAManagementException e) {
|
||||
String msg = "Error occurred while updating CEA policy";
|
||||
log.error(msg, e);
|
||||
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/sync-now")
|
||||
@Override
|
||||
public Response sync() {
|
||||
CEAManagementService ceaManagementService = DeviceMgtAPIUtils.getCEAManagementService();
|
||||
try {
|
||||
ceaManagementService.syncNow();
|
||||
return Response.status(HttpStatus.SC_OK).build();
|
||||
} catch (CEAManagementException e) {
|
||||
String msg = "Error occurred while trigger syncing";
|
||||
log.error(msg, e);
|
||||
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct {@link CEAPolicy} from {@link CEAPolicyWrapper}
|
||||
* @param ceaPolicyWrapper {@link CEAPolicyWrapper}
|
||||
* @return {@link CEAPolicy}
|
||||
*/
|
||||
private CEAPolicy constructCEAPolicy(CEAPolicyWrapper ceaPolicyWrapper) {
|
||||
AccessPolicyWrapper accessPolicyWrapper = ceaPolicyWrapper.getConditionalAccessPolicyEntries();
|
||||
AccessPolicy accessPolicy = new AccessPolicy();
|
||||
accessPolicy.setDefaultAccessPolicy(Enum.valueOf(DefaultAccessPolicy.class,
|
||||
accessPolicyWrapper.getDefaultAccessPolicy()));
|
||||
accessPolicy.setPOPIMAPAccessPolicy(Enum.valueOf(POPIMAPAccessPolicy.class,
|
||||
accessPolicyWrapper.getPOPIMAPAccessPolicy()));
|
||||
accessPolicy.setWebOutlookAccessPolicy(Enum.valueOf(WebOutlookAccessPolicy.class,
|
||||
accessPolicyWrapper.getWebOutlookAccessPolicy()));
|
||||
Set<EmailOutlookAccessPolicy> emailOutlookAccessPolicy = new HashSet<>();
|
||||
for (String value : ceaPolicyWrapper.getConditionalAccessPolicyEntries().getEmailOutlookAccessPolicy()) {
|
||||
emailOutlookAccessPolicy.add(Enum.valueOf(EmailOutlookAccessPolicy.class, value));
|
||||
}
|
||||
accessPolicy.setEmailOutlookAccessPolicy(emailOutlookAccessPolicy);
|
||||
GracePeriodWrapper gracePeriodWrapper = ceaPolicyWrapper.getGracePeriodEntries();
|
||||
GracePeriod gracePeriod = new GracePeriod();
|
||||
gracePeriod.setGracePeriod(gracePeriodWrapper.getGracePeriod());
|
||||
gracePeriod.setGraceAllowedPolicy(Enum.valueOf(GraceAllowedPolicy.class,
|
||||
gracePeriodWrapper.getGraceAllowedPolicy()));
|
||||
ActiveSyncServer activeSyncServer = ceaPolicyWrapper.getActiveSyncServerEntries();
|
||||
CEAPolicy ceaPolicy = new CEAPolicy();
|
||||
ceaPolicy.setAccessPolicy(accessPolicy);
|
||||
ceaPolicy.setGracePeriod(gracePeriod);
|
||||
ceaPolicy.setActiveSyncServer(activeSyncServer);
|
||||
return ceaPolicy;
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue