Example #1
0
 public dynamic Respond()
 {
     var task = DatabaseContext.Instance.UserExists(model.AuthenticatedClient.ProviderName,
     model.AuthenticatedClient.UserInformation.Email);
     task.ConfigureAwait(false); // For running async methods synchronously.
     var result = task.Result;
     Debug.WriteLine("UserExists: " + result);
     if (result)
     {
         Debug.WriteLine("User exists, now retrieving user.");
         var userTask = DatabaseContext.Instance.GetUser(model.AuthenticatedClient.ProviderName, model.AuthenticatedClient.UserInformation.Email);
         UserModel user = userTask.Result;
         if (!Utils.Instance.TokenExpired(user.AuthToken.Value.ToDateTimeFromEpoch())) //IF the AuthToken is not expired.
         {
             // Retrieving existing AuthToken.
             var respone = new RegisterLoginModel(user.UserId, user.AuthToken.Key, Utils.Instance.SecondsfromNow(user.AuthToken.Value.ToDateTimeFromEpoch()));
             return JsonConvert.SerializeObject(respone);
         }
         else
         {
             // Updating AuthToken+Timestamp.
             string token = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
             user.AuthToken = new KeyValuePair<string, long>(token, DateTime.Now.ToEpochTime());
             DatabaseContext.Instance.UpdateAuthToken(user);
             var response = new RegisterLoginModel(user.UserId, user.AuthToken.Key, Utils.Instance.SecondsfromNow(user.AuthToken.Value.ToDateTimeFromEpoch()));
             return JsonConvert.SerializeObject(response);
         }
     }
     else
     {
         // Creating new user.
         Debug.WriteLine("User doesn't exists, new user being created.");
         UserModel newUser = new UserModel()
         {
             UserId = Guid.NewGuid().ToString(),
             AuthProvider = model.AuthenticatedClient.ProviderName,
             AuthId = model.AuthenticatedClient.UserInformation.Email,
             AuthToken = new KeyValuePair<string,long>(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), DateTime.Now.AddDays(1).ToEpochTime())
         };
         Debug.WriteLine(newUser);
         DatabaseContext.Instance.AddUser(newUser);
         var response = new RegisterLoginModel()
         {
             user_id = newUser.UserId,
             auth_token = newUser.AuthToken.Key,
             seconds = Utils.Instance.SecondsfromNow(newUser.AuthToken.Value.ToDateTimeFromEpoch())
         };
         return JsonConvert.SerializeObject(response);
     }
 }
Example #2
0
 public dynamic RespondToIDToken()
 {
     BsonDocument tokeninfo;
     try
     {
         SaveRefreshToken();
         tokeninfo = BsonDocument.Parse(ValidateToken());
         loginRequestModel.auth_id = (string)tokeninfo["email"];
         Debug.WriteLine("Response from Google tokeninfo endpoint: " + tokeninfo);
     }
     catch (Exception ex)
     {
         return "Oops, an error occured. Details: " + ex.Message;
     }
     if (tokeninfo.Contains("error_description"))
     {
         // ID token invalid.
         return new BsonDocument{
             {"status", "error"},
             {"description", "Invalid ID token"}
         };
     }
     else if ((string)tokeninfo["email"]!=loginRequestModel.auth_id)
     {
         // Email provided by the client and auth provider doesn't match.
         return new BsonDocument{
             {"status", "error"},
             {"description", "Email ID mismatch"}
         };
     }
     else
     {
         var task = DatabaseContext.Instance.UserExists(loginRequestModel.auth_provider,loginRequestModel.auth_id);
         task.ConfigureAwait(false); // For running async methods synchronously.
         var result = task.Result;
         Debug.WriteLine("UserExists: " + result);
         if (result)
         {
             Debug.WriteLine("User exists, now retrieving user.");
             var userTask = DatabaseContext.Instance.GetUser(loginRequestModel.auth_provider, loginRequestModel.auth_id);
             UserModel user = userTask.Result;
             // Updating AuthToken+Timestamp.
             string token = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
             user.AuthToken = new KeyValuePair<string, long>(token, DateTime.Now.ToEpochTime());
             DatabaseContext.Instance.UpdateAuthToken(user);
             var response = new RegisterLoginModel(user.UserId, user.AuthToken.Key, Utils.Instance.SecondsfromNow(user.AuthToken.Value.ToDateTimeFromEpoch()));
             return JsonConvert.SerializeObject(response);
         }
         else
         {
             // Creating new user.
             Debug.WriteLine("User doesn't exists, new user being created.");
             UserModel newUser = new UserModel()
             {
                 UserId = Guid.NewGuid().ToString(),
                 AuthProvider = loginRequestModel.auth_provider,
                 AuthId = loginRequestModel.auth_id,
                 IdToken = loginRequestModel.id_token,
                 AuthToken = new KeyValuePair<string, long>(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), DateTime.Now.AddDays(1).ToEpochTime()),
                 AuthCode = loginRequestModel.server_auth_code
             };
             Debug.WriteLine(newUser);
             DatabaseContext.Instance.AddUser(newUser);
             var response = new RegisterLoginModel()
             {
                 user_id = newUser.UserId,
                 auth_token = newUser.AuthToken.Key,
                 seconds = Utils.Instance.SecondsfromNow(newUser.AuthToken.Value.ToDateTimeFromEpoch())
             };
             return JsonConvert.SerializeObject(response);
         }
     }
 }