Esempio n. 1
0
        /// <summary>
        ///     Updates the stored spartan tokens used for authenticating with 343's backend api systems.
        /// </summary>
        /// <returns>A boolean saying if everything was</returns>
        public static bool UpdateAuthentication(AzureStorage storage)
        {
            using (var sqlStorage = new SqlStorage())
            {
                var everythingWentGucci = false;
                var strResponse = "";
                var httpClient = new HttpClient();

                // Try up to 10 times
                for (var i = 0; i < 10; i++)
                {
                    var response = httpClient.Get(CloudConfigurationManager.GetSetting("SpartanTokenApi"));

                    if (response.StatusCode == HttpStatusCode.OK && !String.IsNullOrEmpty(response.RawText.Trim()))
                    {
                        try
                        {
                            strResponse = response.RawText;

                            var waypointToken = JsonConvert.DeserializeObject<Halo4Waypoint>(response.RawText);
                            if (waypointToken != null && !String.IsNullOrWhiteSpace(waypointToken.SpartanToken))
                            {
                                var authentication = new Models.Sql.Authentication
                                {
                                    Type = AuthenticationType.Halo4,
                                    IsValid = true,
                                    Key = waypointToken.SpartanToken
                                };
                                sqlStorage.Authentications.AddOrUpdate(a => a.Type, authentication);
                                sqlStorage.SaveChanges();

                                everythingWentGucci = true;
                            }
                        }
                        catch (Exception ex)
                        {
                            Trace.TraceError(ex.ToString());
                            everythingWentGucci = false;
                        }
                    }

                    if (everythingWentGucci)
                        break;
                }

                if (everythingWentGucci)
                    return true;

                // make sure halo 4 auth row has been deleted
                var invalidAuthentication = sqlStorage.Authentications.FirstOrDefault(a => a.Type == AuthenticationType.Halo4);
                if (invalidAuthentication != null)
                {
                    invalidAuthentication.Key = null;
                    invalidAuthentication.IsValid = false;
                }

                // send glorious email!
                var text =
                    String.Format(
                        "Sup guys, {0}Halo 4's authenication failed to update. Might want to look into it. Below is the response the server recieved from the auth service: {0}{0}{1}{0}{0}Best Regards,{0}Branch",
                        Environment.NewLine, strResponse);

                new Web(new NetworkCredential(CloudConfigurationManager.GetSetting("SendGridUser"),
                    CloudConfigurationManager.GetSetting("SendGridPass"))).Deliver(
                        new SendGridMessage(new MailAddress("*****@*****.**"),
                            new[]
                            {
                                new MailAddress(CloudConfigurationManager.GetSetting("SendGridTo")),
                                new MailAddress("*****@*****.**"),
                            },
                            "[Halo 4] Authentication Failed", null, text));

                sqlStorage.SaveChanges();

                return false;
            }
        }
Esempio n. 2
0
		public override bool OnStart()
		{
			Trace.TraceInformation("Branch.Service.Halo4 service started");
			ServicePointManager.DefaultConnectionLimit = 1;
			_storage = new AzureStorage();
			_h4WaypointManager = new Manager(_storage, true);

			#region Create Tasks if they don't exist

			foreach (var entity in from task in _tasks
				let entity =
					_storage.Table.RetrieveSingleEntity<TaskEntity>(TaskEntity.PartitionKeyString, TaskEntity.FormatRowKey(task.Key.ToString()),
						_storage.Table.Halo4CloudTable)
				where entity == null
				select new TaskEntity(task.Key)
				{
					LastRun = new DateTime(1994, 8, 18),
					Interval = (int) task.Value.TotalSeconds
				})
			{
				_storage.Table.InsertOrReplaceSingleEntity(entity, _storage.Table.Halo4CloudTable);
			}

			#endregion

			return base.OnStart();
		}