diff --git a/.gitignore b/.gitignore
index d9908de..3ca0adc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,34 +1,3 @@
-#################
-## Eclipse
-#################
-
-*.pydevproject
-.project
-.metadata
-bin/
-tmp/
-*.tmp
-*.bak
-*.swp
-*~.nib
-local.properties
-.classpath
-.settings/
-.loadpath
-
-# External tool builders
-.externalToolBuilders/
-
-# Locally stored "Eclipse launch configurations"
-*.launch
-
-# CDT-specific
-.cproject
-
-# PDT-specific
-.buildpath
-
-
#################
## Visual Studio
#################
@@ -188,34 +157,4 @@ $RECYCLE.BIN/
# Mac crap
.DS_Store
-
-#############
-## Python
-#############
-
-*.py[co]
-
-# Packages
-*.egg
-*.egg-info
-dist/
-build/
-eggs/
-parts/
-var/
-sdist/
-develop-eggs/
-.installed.cfg
-
-# Installer logs
-pip-log.txt
-
-# Unit test / coverage reports
-.coverage
-.tox
-
-#Translations
-*.mo
-
-#Mr Developer
-.mr.developer.cfg
+/Output
diff --git a/NuGet/Owin.Security.Providers.nuspec b/NuGet/Owin.Security.Providers.nuspec
deleted file mode 100644
index 96914b5..0000000
--- a/NuGet/Owin.Security.Providers.nuspec
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
- Owin.Security.Providers
- 1.27
- Jerrie Pelser and contributors
- Jerrie Pelser
- http://opensource.org/licenses/MIT
- https://github.com/owin-middleware/OwinOAuthProviders
- false
-
- Adds additional OAuth providers for OWIN to use with ASP.NET
-
-
- Additional OAuth providers for Katana (OWIN).
-
- Includes providers for ArcGISOnline, Asana, Backlog, Battle.net, Bitbucket, Buffer, DeviantArt, Dropbox, EVEOnline, Fitbit, Flickr, Foursquare, GitHub, Gitter, Google+, HealthGraph, Imgur, Instagram, LinkedIn, Onshape, PayPal, Reddit, Salesforce, Slack, SoundCloud, Spotify, StackExchange, TripIt, Twitch.tv, Untappd, Vimeo, Visual Studio Online, VKontakte, Wordpress, Yahoo and Yammer.
-
- Also adds generic OpenID 2.0 providers as well implementations for Steam and Wargaming.
-
-
- Version 1.27
- - Adds Xing provider
-
- Copyright 2013 - 2016
- owin katana oauth LinkedIn Yahoo Google+ GitHub Reddit Instagram StackExchange SalesForce TripIt Buffer ArcGIS Dropbox Wordpress Battle.NET Yammer OpenID Steam Twitch
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Owin.Security.Providers/ArcGISOnline/ArcGISOnlineAuthenticationHandler.cs b/Owin.Security.Providers/ArcGISOnline/ArcGISOnlineAuthenticationHandler.cs
deleted file mode 100644
index a5c71ce..0000000
--- a/Owin.Security.Providers/ArcGISOnline/ArcGISOnlineAuthenticationHandler.cs
+++ /dev/null
@@ -1,239 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net.Http;
-using System.Net.Http.Headers;
-using System.Security.Claims;
-using System.Threading.Tasks;
-using Microsoft.Owin;
-using Microsoft.Owin.Infrastructure;
-using Microsoft.Owin.Logging;
-using Microsoft.Owin.Security;
-using Microsoft.Owin.Security.Infrastructure;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace Owin.Security.Providers.ArcGISOnline
-{
- public class ArcGISOnlineAuthenticationHandler : AuthenticationHandler
- {
- private const string XmlSchemaString = "http://www.w3.org/2001/XMLSchema#string";
-
- private readonly ILogger logger;
- private readonly HttpClient httpClient;
-
- public ArcGISOnlineAuthenticationHandler(HttpClient httpClient, ILogger logger)
- {
- this.httpClient = httpClient;
- this.logger = logger;
- }
-
- protected override async Task AuthenticateCoreAsync()
- {
- AuthenticationProperties properties = null;
-
- try
- {
- string code = null;
- string state = null;
-
- IReadableStringCollection query = Request.Query;
- IList values = query.GetValues("code");
- if (values != null && values.Count == 1)
- {
- code = values[0];
- }
- values = query.GetValues("state");
- if (values != null && values.Count == 1)
- {
- state = values[0];
- }
-
- properties = Options.StateDataFormat.Unprotect(state);
- if (properties == null)
- {
- return null;
- }
- // OAuth2 10.12 CSRF
- if (!ValidateCorrelationId(properties,logger))
- {
- return new AuthenticationTicket(null, properties);
- }
-
- string requestPrefix = Request.Scheme + "://" + Request.Host;
- string redirectUri = requestPrefix + Request.PathBase + Options.CallbackPath;
-
- // Build up the body for the token request
- var body = new List>();
- body.Add(new KeyValuePair("grant_type", "authorization_code"));
- body.Add(new KeyValuePair("code", code));
- body.Add(new KeyValuePair("redirect_uri", redirectUri));
- body.Add(new KeyValuePair("client_id", Options.ClientId));
- body.Add(new KeyValuePair("client_secret", Options.ClientSecret));
-
- // Request the token
- var requestMessage = new HttpRequestMessage(HttpMethod.Post, Options.Endpoints.TokenEndpoint);
- requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
- requestMessage.Content = new FormUrlEncodedContent(body);
- HttpResponseMessage tokenResponse = await httpClient.SendAsync(requestMessage);
- tokenResponse.EnsureSuccessStatusCode();
- string text = await tokenResponse.Content.ReadAsStringAsync();
-
- // Deserializes the token response
- dynamic response = JsonConvert.DeserializeObject(text);
- string accessToken = (string)response.access_token;
-
- // Get the ArcGISOnline user
- HttpRequestMessage userRequest = new HttpRequestMessage(HttpMethod.Get, Options.Endpoints.UserInfoEndpoint + "?f=json&token=" + Uri.EscapeDataString(accessToken));
- userRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
- HttpResponseMessage userResponse = await httpClient.SendAsync(userRequest, Request.CallCancelled);
- userResponse.EnsureSuccessStatusCode();
- text = await userResponse.Content.ReadAsStringAsync();
- var user = JsonConvert.DeserializeObject(text);
-
- var context = new ArcGISOnlineAuthenticatedContext(Context, user, accessToken);
- context.Identity = new ClaimsIdentity(
- Options.AuthenticationType,
- ClaimsIdentity.DefaultNameClaimType,
- ClaimsIdentity.DefaultRoleClaimType);
- if (!string.IsNullOrEmpty(context.Id))
- {
- context.Identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, context.Id, XmlSchemaString, Options.AuthenticationType));
- }
- if (!string.IsNullOrEmpty(context.UserName))
- {
- context.Identity.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, context.UserName, XmlSchemaString, Options.AuthenticationType));
- }
- if (!string.IsNullOrEmpty(context.Email))
- {
- context.Identity.AddClaim(new Claim(ClaimTypes.Email, context.Email, XmlSchemaString, Options.AuthenticationType));
- }
- if (!string.IsNullOrEmpty(context.Name))
- {
- context.Identity.AddClaim(new Claim("urn:ArcGISOnline:name", context.Name, XmlSchemaString, Options.AuthenticationType));
- }
- if (!string.IsNullOrEmpty(context.Link))
- {
- context.Identity.AddClaim(new Claim("urn:ArcGISOnline:url", context.Link, XmlSchemaString, Options.AuthenticationType));
- }
- string baseUri =
- Request.Scheme +
- Uri.SchemeDelimiter +
- Request.Host +
- Request.PathBase;
-
- context.Properties = properties;
-
- await Options.Provider.Authenticated(context);
-
- return new AuthenticationTicket(context.Identity, context.Properties);
- }
- catch (Exception ex)
- {
- logger.WriteError(ex.Message);
- }
- return new AuthenticationTicket(null, properties);
- }
-
- protected override Task ApplyResponseChallengeAsync()
- {
- if (Response.StatusCode != 401)
- {
- return Task.FromResult