/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* Licensed 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 org.jboss.aerogear.unifiedpush.rest.util;
import org.jboss.aerogear.crypto.util.PKCS12;
import org.jboss.resteasy.annotations.providers.multipart.PartType;
import javax.validation.constraints.AssertTrue;
import javax.ws.rs.FormParam;
/**
* Helper class to read values from the multipart request
* that is performed when creating a 'bootstrap' Push Application and their variants.
*/
public class BootstrapForm {
private String pushApplicationName;
// Android details
private String androidVariantName;
private String androidGoogleKey;
private String androidProjectNumber;
// iOS details
private String iOSVariantName;
private Boolean iOSProduction; // RestEasy needs 'Boolean' here
private String iOSPassphrase;
private byte[] iOSCertificate;
// Windows details
private String windowsType;
private String windowsVariantName;
private String windowsSid;
private String windowsClientSecret;
// SimplePush details
private String simplePushVariantName;
// ADM details
private String admVariantName;
private String admClientId;
private String admClientSecret;
public BootstrapForm() {
}
public String getPushApplicationName() {
return pushApplicationName;
}
@FormParam("pushApplicationName")
public void setPushApplicationName(String pushApplicationName) {
this.pushApplicationName = pushApplicationName;
}
public String getAndroidVariantName() {
return androidVariantName;
}
@FormParam("androidVariantName")
public void setAndroidVariantName(String androidVariantName) {
this.androidVariantName = androidVariantName;
}
public String getAndroidGoogleKey() {
return androidGoogleKey;
}
@FormParam("androidGoogleKey")
public void setAndroidGoogleKey(String androidGoogleKey) {
this.androidGoogleKey = androidGoogleKey;
}
public String getAndroidProjectNumber() {
return androidProjectNumber;
}
@FormParam("androidProjectNumber")
public void setAndroidProjectNumber(String androidProjectNumber) {
this.androidProjectNumber = androidProjectNumber;
}
public String getiOSVariantName() {
return iOSVariantName;
}
@FormParam("iosVariantName")
public void setiOSVariantName(String iOSVariantName) {
this.iOSVariantName = iOSVariantName;
}
public Boolean getiOSProduction() {
return iOSProduction;
}
@FormParam("iosProduction")
public void setiOSProduction(Boolean iOSProduction) {
this.iOSProduction = iOSProduction;
}
public String getiOSPassphrase() {
return iOSPassphrase;
}
@FormParam("iosPassphrase")
public void setiOSPassphrase(String iOSPassphrase) {
this.iOSPassphrase = iOSPassphrase;
}
public byte[] getiOSCertificate() {
return iOSCertificate;
}
@FormParam("iosCertificate")
@PartType("application/octet-stream")
public void setiOSCertificate(byte[] iOSCertificate) {
this.iOSCertificate = iOSCertificate;
}
public String getWindowsType() {
return windowsType;
}
@FormParam("windowsType")
public void setWindowsType(String windowsType) {
this.windowsType = windowsType;
}
public String getWindowsVariantName() {
return windowsVariantName;
}
@FormParam("windowsVariantName")
public void setWindowsVariantName(String windowsVariantName) {
this.windowsVariantName = windowsVariantName;
}
public String getWindowsSid() {
return windowsSid;
}
@FormParam("windowsSid")
public void setWindowsSid(String windowsSid) {
this.windowsSid = windowsSid;
}
public String getWindowsClientSecret() {
return windowsClientSecret;
}
@FormParam("windowsClientSecret")
public void setWindowsClientSecret(String windowsClientSecret) {
this.windowsClientSecret = windowsClientSecret;
}
public String getSimplePushVariantName() {
return simplePushVariantName;
}
@FormParam("simplePushVariantName")
public void setSimplePushVariantName(String simplePushVariantName) {
this.simplePushVariantName = simplePushVariantName;
}
public String getAdmVariantName() {
return admVariantName;
}
@FormParam("admVariantName")
public void setAdmVariantName(String admVariantName) {
this.admVariantName = admVariantName;
}
public String getAdmClientId() {
return admClientId;
}
@FormParam("admClientId")
public void setAdmClientId(String admClientId) {
this.admClientId = admClientId;
}
public String getAdmClientSecret() {
return admClientSecret;
}
@FormParam("admClientSecret")
public void setAdmClientSecret(String admClientSecret) {
this.admClientSecret = admClientSecret;
}
/**
* Basic validations for Android, when Android is present.
*
* @return true if valid, otherwise false
*/
@AssertTrue(message = "invalid android data")
public boolean isAndroidValid() {
if (androidVariantName != null) {
if (androidGoogleKey == null || androidGoogleKey.isEmpty() || androidProjectNumber == null || androidProjectNumber.isEmpty()) {
return false;
}
}
return true;
}
/**
* Basic validations for windows
*
* @return true if valid, otherwise false
*/
@AssertTrue(message = "invalid Windows data")
public boolean isWindowsValid() {
// windows present?
if (windowsVariantName != null && windowsType != null) {
// for MPNS nothing else is needed, but for WNS we need more:
if (windowsType.equalsIgnoreCase("wns")) {
// only of MPNS
if (windowsSid == null || windowsSid.isEmpty() || windowsClientSecret == null || windowsClientSecret.isEmpty()) {
return false;
}
}
}
return true;
}
/**
* Basic validations for iOS, when iOS is present.
*
* @return true if valid, otherwise false
*/
@AssertTrue(message = "the provided ios certificate passphrase does not match with the uploaded certificate")
// TODO: this can not be named isiOS...();
public boolean isAppleVariantValid() {
if (iOSVariantName != null) {
try {
PKCS12.validate(iOSCertificate, iOSPassphrase);
} catch (Exception e) {
return false;
}
}
return true;
}
}