blob: c7b0ad3c53cd9b6f59a7353b990efb262ec126bd [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* 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 com.android.libraries.entitlement;
import android.os.Build;
import android.os.Build.VERSION;
import com.google.auto.value.AutoValue;
/**
* Service entitlement HTTP request parameters, as defiend in GSMA spec TS.43 section 2.2.
*/
@AutoValue
public abstract class ServiceEntitlementRequest {
/** Disables notification token. */
public static final int NOTICATION_ACTION_DISABLE = 0;
/** Enables FCM notification token. */
public static final int NOTICATION_ACTION_ENABLE_FCM = 2;
/** Accepts the content type in XML format. */
public static final String ACCEPT_CONTENT_TYPE_XML = "text/vnd.wap.connectivity-xml";
/** Accepts the content type in JSON format. */
public static final String ACCEPT_CONTENT_TYPE_JSON =
"application/vnd.gsma.eap-relay.v1.0+json";
/** Accepts the content type in JSON or XML format. */
public static final String ACCEPT_CONTENT_TYPE_JSON_AND_XML =
"application/vnd.gsma.eap-relay.v1.0+json, text/vnd.wap.connectivity-xml";
/** Default value of configuration version. */
public static final int DEFAULT_CONFIGURATION_VERSION = 0;
/** Default value of entitlement version. */
public static final String DEFAULT_ENTITLEMENT_VERSION = "2.0";
/**
* Returns the version of configuration currently stored on the client. Used by HTTP parameter
* "vers".
*/
public abstract int configurationVersion();
/**
* Returns the version of the entitlement specification. Used by HTTP parameter
* "entitlement_version".
*/
public abstract String entitlementVersion();
/**
* Returns the authentication token. Used by HTTP parameter "token".
*/
public abstract String authenticationToken();
/**
* Returns the unique identifier of the device like IMEI. Used by HTTP parameter "terminal_id".
*/
public abstract String terminalId();
/**
* Returns the OEM of the device. Used by HTTP parameter "terminal_vendor".
*/
public abstract String terminalVendor();
/**
* Returns the model of the device. Used by HTTP parameter "terminal_model".
*/
public abstract String terminalModel();
/**
* Returns the software version of the device. Used by HTTP parameter "terminal_sw_version".
*/
public abstract String terminalSoftwareVersion();
/**
* Returns the name of the device application making the request. Used by HTTP parameter
* "app_name".
*/
public abstract String appName();
/**
* Returns the version of the device application making the request. Used by HTTP parameter
* "app_version".
*/
public abstract String appVersion();
/**
* Returns the FCM registration token used to register for entitlement configuration request
* from network. Used by HTTP parameter "notif_token".
*/
public abstract String notificationToken();
/**
* Returns the action associated with the FCM registration token. Used by HTTP parameter
* "notif_action".
*
* @see #NOTICATION_ACTION_ENABLE_FCM
* @see #NOTICATION_ACTION_DISABLE
*/
public abstract int notificationAction();
/**
* Returns the accepted content type of http response.
*
* @see #ACCEPT_CONTENT_TYPE_XML
* @see #ACCEPT_CONTENT_TYPE_JSON
* @see #ACCEPT_CONTENT_TYPE_JSON_AND_XML
*/
public abstract String acceptContentType();
/**
* Returns a new {@link Builder} object.
*/
public static Builder builder() {
return new AutoValue_ServiceEntitlementRequest.Builder()
.setConfigurationVersion(DEFAULT_CONFIGURATION_VERSION)
.setEntitlementVersion(DEFAULT_ENTITLEMENT_VERSION)
.setAuthenticationToken("")
.setTerminalId("")
.setTerminalVendor(Build.MANUFACTURER)
.setTerminalModel(Build.MODEL)
.setTerminalSoftwareVersion(VERSION.BASE_OS)
.setAppName("")
.setAppVersion("")
.setNotificationToken("")
.setNotificationAction(NOTICATION_ACTION_ENABLE_FCM)
.setAcceptContentType(ACCEPT_CONTENT_TYPE_JSON_AND_XML);
}
/**
* Builder.
*/
@AutoValue.Builder
public abstract static class Builder {
/**
* Sets the version of configuration currently stored on the client. Used by HTTP parameter
* "vers".
*
* <p>If not set, default to {@link #DEFAULT_CONFIGURATION_VERSION} indicating no existing
* configuration.
*/
public abstract Builder setConfigurationVersion(int value);
/**
* Sets the current version of the entitlement specification. Used by HTTP parameter
* "entitlement_version".
*
* <p>If not set, default to {@link #DEFAULT_ENTITLEMENT_VERSION} base on TS.43-v5.0.
*/
public abstract Builder setEntitlementVersion(String value);
/**
* Sets the authentication token. Used by HTTP parameter "token".
*
* <p>If not set, will trigger embedded EAP-AKA authentication as decribed in TS.43 section
* 2.6.1.
*/
public abstract Builder setAuthenticationToken(String value);
/**
* Sets the unique identifier of the device like IMEI. Used by HTTP parameter
* "terminal_id".
*
* <p>If not set, will use the device IMEI.
*/
public abstract Builder setTerminalId(String value);
/**
* Sets the OEM of the device. Used by HTTP parameter "terminal_vendor".
*
* <p>If not set, will use {@link android.os.Build#MANUFACTURER}.
*/
public abstract Builder setTerminalVendor(String value);
/**
* Sets the model of the device. Used by HTTP parameter "terminal_model".
*
* <p>If not set, will use {@link android.os.Build#MODEL}.
*/
public abstract Builder setTerminalModel(String value);
/**
* Sets the software version of the device. Used by HTTP parameter "terminal_sw_version".
*
* <p>If not set, will use {@link android.os.Build.VERSION#BASE_OS}.
*/
public abstract Builder setTerminalSoftwareVersion(String value);
/**
* Sets the name of the device application making the request. Used by HTTP parameter
* "app_name".
*
* <p>Optional.
*/
public abstract Builder setAppName(String value);
/**
* Sets the version of the device application making the request. Used by HTTP parameter
* "app_version".
*
* <p>Optional.
*/
public abstract Builder setAppVersion(String value);
/**
* Sets the FCM registration token used to register for entitlement configuration request
* from network. Used by HTTP parameter "notif_token".
*
* <p>Optional.
*/
public abstract Builder setNotificationToken(String value);
/**
* Sets the action associated with the FCM registration token. Used by HTTP parameter
* "notif_action".
*
* <p>Required if a token is set with {@link #setNotificationToken}, and default to {@link
* #NOTICATION_ACTION_ENABLE_FCM}; otherwise ignored.
*
* @see #NOTICATION_ACTION_ENABLE_FCM
* @see #NOTICATION_ACTION_DISABLE
*/
public abstract Builder setNotificationAction(int value);
/**
* Sets the configuration document format the caller accepts, e.g. XML or JSON. Used by HTTP
* request header "Accept".
*
* <p>If not set, will use {@link #ACCEPT_CONTENT_TYPE_JSON_AND_XML}.
*
* @see #ACCEPT_CONTENT_TYPE_XML
* @see #ACCEPT_CONTENT_TYPE_JSON
* @see #ACCEPT_CONTENT_TYPE_JSON_AND_XML
*/
public abstract Builder setAcceptContentType(String contentType);
public abstract ServiceEntitlementRequest build();
}
}