public ActionResult Register(RegisterModel model) { if (ModelState.IsValid) { // Attempt to register the user try { WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { model.Email }); WebSecurity.Login(model.UserName, model.Password); // Get Google authorization to manage calendars var url = GoogleAuthorizationHelper.GetAuthorizationUrl(model.Email); Response.Redirect(url); return(RedirectToAction("Index", "Home")); } catch (MembershipCreateUserException e) { ModelState.AddModelError("", Helper.ErrorCodeToString(e.StatusCode)); } } // If we got this far, something failed, redisplay form return(View(model)); }
/// <summary> /// Authorization /// </summary> /// <param name="code"></param> /// <returns></returns> public ActionResult Authorization(string code) { // Retrieve the authenticator and save it in session for future use var authenticator = GoogleAuthorizationHelper.GetAuthenticator(code); Session["authenticator"] = authenticator; // Save the refresh token locally using (var dbContext = new CalendarContext()) { var userName = User.Identity.Name; var userRegistry = dbContext.GoogleRefreshTokens.FirstOrDefault(c => c.UserName == userName); if (userRegistry == null) { dbContext.GoogleRefreshTokens.Add( new GoogleRefreshToken { UserName = userName, RefreshToken = authenticator.RefreshToken }); } else { userRegistry.RefreshToken = authenticator.RefreshToken; } dbContext.SaveChanges(); } return(RedirectToAction("Index", "Home")); }
private GoogleAuthenticator GetAuthenticator() { var authenticator = (GoogleAuthenticator)Session["authenticator"]; if (authenticator == null || !authenticator.IsValid) { // Get a new Authenticator using the Refresh Token var refreshToken = new UsersContext().GoogleRefreshTokens.FirstOrDefault(c => c.UserName == User.Identity.Name).RefreshToken; authenticator = GoogleAuthorizationHelper.RefreshAuthenticator(refreshToken); Session["authenticator"] = authenticator; } return(authenticator); }
public IHttpActionResult Post(AvailabilityEvent availabilityEvent) { User userProfile = null; using (var context = new CalendarContext()) { userProfile = context.Users.FirstOrDefault(c => c.UserName == User.Identity.Name); } var refreshToken = new CalendarContext().GoogleRefreshTokens .FirstOrDefault(c => c.UserName == User.Identity.Name) ?.RefreshToken; var authenticator = GoogleAuthorizationHelper.RefreshAuthenticator(refreshToken); var service = new GoogleCalendarServiceProxy(authenticator); var model = service.GetEvents(userProfile.Email, availabilityEvent.StartDate); model = model .Where(x => x.StartDate >= availabilityEvent.StartDate && x.StartDate <= availabilityEvent.StartDate) .OrderBy(y => y.StartDate).ToList(); //var availability = 3; var index = 0; var startTime = DateTime.Today; DateTime?endTime = null; var diff = 0; //var model1 = new List<CalendarEvent>(); //model1.Add(new CalendarEvent //{ // Title = "Kashin standup meeting", // StartDate = DateTime.Parse("2021-10-07 12:00:00"), // EndDate = DateTime.Parse("2021-10-07 12:30:00"), //}); //model1.Add(new CalendarEvent //{ // Title = "Kashin standup meeting1", // StartDate = DateTime.Parse("2021-10-07 16:00:00"), // EndDate = DateTime.Parse("2021-10-07 16:10:00"), //}); //model1.Add(new CalendarEvent //{ // Title = "Kashin standup meeting2", // StartDate = DateTime.Parse("2021-10-07 22:00:00"), // EndDate = DateTime.Parse("2021-10-07 23:30:00"), //}); //model1.Add(new CalendarEvent //{ // Title = "Kashin standup meeting3", // StartDate = DateTime.Parse("2021-10-07 11:00:00"), // EndDate = DateTime.Parse("2021-10-07 12:00:00"), //}); foreach (var item in model) { if (index != 0) { //item.EndDate = model } diff = Math.Abs((item.StartDate - startTime).Hours); if (diff >= availabilityEvent.Hour) { // available // starttime + 3 endTime = startTime.AddHours(3); var calendarEvent = new CalendarEvent(); calendarEvent.Description = availabilityEvent.Description; calendarEvent.Title = availabilityEvent.Title; calendarEvent.Location = availabilityEvent.Location; calendarEvent.Description = availabilityEvent.Description; calendarEvent.StartDate = startTime; calendarEvent.EndDate = (DateTime)endTime; calendarEvent.Attendees = new List <string> { availabilityEvent.GuestEmailId }; calendarEvent.CalendarId = userProfile.Email; service.CreateEvent(calendarEvent); break; } startTime = item.EndDate; index++; } if (endTime == null) { endTime = startTime.AddHours(3); } return(Json(new { data = model })); }