001package com.gigya.android.sdk.utils;
002
003import android.support.annotation.NonNull;
004import android.support.annotation.Nullable;
005
006import java.util.Random;
007import java.util.TreeMap;
008
009public class AuthUtils {
010
011    /**
012     * Add relevant authentication parameters to request parameters.
013     *
014     * @param sessionSecret Active session secret.
015     * @param httpMethod    Http request method.
016     * @param baseUrl       Base url for request.
017     * @param params        Active request parameters.
018     * @param offset        Server click offset.
019     */
020    public static void addAuthenticationParameters(final String sessionSecret,
021                                                   int httpMethod,
022                                                   String baseUrl,
023                                                   @NonNull final TreeMap<String, Object> params,
024                                                   @Nullable Long offset) {
025        final String timestamp = Long.toString((System.currentTimeMillis() / 1000) + (offset != null ? offset : 0));
026        // Add timestamp.
027        params.put("timestamp", timestamp);
028
029        // Add nonce.
030        final Random random = new Random();
031        String nonce = System.currentTimeMillis() + "_" + random.nextInt();
032        params.put("nonce", nonce);
033
034        // Add signature.
035        final String signature = SigUtils.getSignature(
036                sessionSecret,
037                httpMethod == 1 ? "POST" : "GET",
038                baseUrl,
039                params);
040        if (signature != null) {
041            params.put("sig", signature);
042        }
043    }
044
045    /**
046     * Removing authentication specific parameters.
047     * This step is crucial when resending the same request.
048     *
049     * @param params Request parameters map.
050     */
051    public static void removeAuthenticationParameters(@NonNull final TreeMap<String, Object> params) {
052        params.remove("sig");
053        params.remove("timestamp");
054        params.remove("nonce");
055    }
056}