Package org.elip.stewiemaze.server

Source Code of org.elip.stewiemaze.server.SignedRequestDecoder

package org.elip.stewiemaze.server;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import com.google.appengine.repackaged.com.google.common.util.Base64;
import com.google.appengine.repackaged.com.google.common.util.Base64DecoderException;
import com.google.appengine.repackaged.org.json.JSONException;
import com.google.appengine.repackaged.org.json.JSONObject;

public class SignedRequestDecoder {

  public static byte[] base64_url_decode(String input) throws IOException {
    try {
      return Base64.decode(input);
    } catch (Base64DecoderException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    return null;
  }

  @SuppressWarnings("rawtypes")
  public static Map parse_signed_request(String input, String secret) throws Exception {
    return parse_signed_request(input, secret, 3600);
  }

  @SuppressWarnings({ "unused", "rawtypes" })
  public static Map parse_signed_request(String input, String secret, int max_age) throws Exception {
    String[] split = input.split("[.]", 2);

    String encoded_sig = split[0];
    String encoded_envelope = split[1];


    String DecMsg = new String(base64_url_decode(encoded_envelope));

    Map envelope = getMapOfJsonString(DecMsg);


    String algorithm = (String) envelope.get("algorithm");

    if (!algorithm.equals("AES-256-CBC HMAC-SHA256") && !algorithm.equals("HMAC-SHA256")) {
      throw new Exception("Invalid request. (Unsupported algorithm.)");
    }

    byte[] key = secret.getBytes();
    SecretKey hmacKey = new SecretKeySpec(key, "HMACSHA256");
    Mac mac = Mac.getInstance("HMACSHA256");
    mac.init(hmacKey);
    byte[] digest = mac.doFinal(encoded_envelope.getBytes());

    return envelope;

  }

  @SuppressWarnings({ "unchecked", "rawtypes" })
  private static Map getMapOfJsonString(String DecMsg) throws JSONException {
    JSONObject jsonObject = null;

    try {
      jsonObject = new JSONObject(DecMsg);
    } catch (JSONException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }

    Map envelope = new HashMap<String, String>();

    String[] names = JSONObject.getNames(jsonObject);
    for (String name : names) {
      envelope.put(name, jsonObject.get(name));

    }
    return envelope;
  }

}
TOP

Related Classes of org.elip.stewiemaze.server.SignedRequestDecoder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.