예제 #1
0
        /// <summary>
        /// This action is the callback that Evernote will redirect to after 
        /// the call to Authorize above
        /// </summary>
        /// <param name="oauth_verifier"></param>
        /// <returns></returns>
        public ActionResult ObtainTokenCredentials(string oauth_verifier)
        {
            // Use the verifier to get all the user details we need and
            // store them in EvernoteCredentials
            if (oauth_verifier != null)
            {
                var result = OAuthAuthorizer.GetAccessToken(ConfigurationManager.AppSettings["Evernote.Url"] + "/oauth", SessionHelper.RequestToken as RequestToken, oauth_verifier, null, null).Result;
                EvernoteCredentials credentials = new EvernoteCredentials();
                credentials.AuthToken = result.Token.Key;

                // Parse the extra data
                credentials.Shard = Uri.UnescapeDataString(result.ExtraData["edam_shard"].FirstOrDefault());
                credentials.UserId = Uri.UnescapeDataString(result.ExtraData["edam_userId"].FirstOrDefault());
                var expires = Uri.UnescapeDataString(result.ExtraData["edam_expires"].FirstOrDefault());
                var expiresDateTime = new DateTime(1970, 1, 1).AddTicks(long.Parse(expires) * 10000);
                credentials.Expires = DateTime.SpecifyKind(expiresDateTime, DateTimeKind.Utc);
                credentials.NotebookUrl = Uri.UnescapeDataString(result.ExtraData["edam_noteStoreUrl"].FirstOrDefault());
                credentials.WebApiUrlPrefix = Uri.UnescapeDataString(result.ExtraData["edam_webApiUrlPrefix"].FirstOrDefault());

                SessionHelper.EvernoteCredentials = credentials;

                return Redirect(Url.Action("Authorized"));
            }
            else
            {
                return Redirect(Url.Action("Unauthorized"));
            }
        }
예제 #2
0
 public EFDbEvernoteCredentials(EvernoteCredentials evernoteCredentials)
 {
     this.AuthToken       = evernoteCredentials.AuthToken;
     this.Expires         = evernoteCredentials.Expires;
     this.NotebookUrl     = evernoteCredentials.NotebookUrl;
     this.Shard           = evernoteCredentials.Shard;
     this.UserId          = evernoteCredentials.UserId;
     this.WebApiUrlPrefix = evernoteCredentials.WebApiUrlPrefix;
 }
예제 #3
0
        //
        // GET: /Manage/EvernoteCallback
        public async Task <ActionResult> EvernoteCallback([FromQuery] string oauth_verifier)
        {
            EvernoteCallbackViewModel evernoteCallbackViewModel = new EvernoteCallbackViewModel();

            if (String.IsNullOrEmpty(oauth_verifier))
            {
                throw new ArgumentNullException(nameof(oauth_verifier), "Problem authenticating Evernote: did not receive OAuth verifier");
            }

            EvernoteAuthorizer evernoteAuthorizer = new EvernoteAuthorizer(_evernoteOptions.URL, _evernoteOptions.SharedKey, _evernoteOptions.SharedSecret);

            RequestToken requestToken = (RequestToken)JsonConvert.DeserializeObject(HttpContext.Session.GetString("RequestToken"), typeof(RequestToken));

            EvernoteCredentials evernoteCredentials = evernoteAuthorizer.ParseAccessToken(oauth_verifier, requestToken);

            EFDbEvernoteCredentials efdbEvernoteCredentials = new EFDbEvernoteCredentials(evernoteCredentials);

            var user = await GetCurrentUserAsync();

            if (evernoteCredentials == null)
            {
                evernoteCallbackViewModel.ErrorMessage = "You did not authorise application";
                user.HasAuthorisedEvernote             = false;
            }
            else
            {
                evernoteCallbackViewModel.SuccessMessage = "Evernote successfully authorised, you can now search for notes and start reading";

                _dataAccess.UpdateEvernoteCredentials(efdbEvernoteCredentials);

                user.HasAuthorisedEvernote = true;
                user.EvernoteCredentials   = efdbEvernoteCredentials;
                user.EvernoteCredentialsId = efdbEvernoteCredentials.Id;
            }

            await _userManager.UpdateAsync(user);

            return(View(evernoteCallbackViewModel));
        }