/* * 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". * *

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". * *

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". * *

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". * *

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". * *

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". * *

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". * *

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". * *

Optional. */ public abstract Builder setAppName(String value); /** * Sets the version of the device application making the request. Used by HTTP parameter * "app_version". * *

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". * *

Optional. */ public abstract Builder setNotificationToken(String value); /** * Sets the action associated with the FCM registration token. Used by HTTP parameter * "notif_action". * *

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". * *

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(); } }