public async Task <dynamic> RegisterWithFirebase(FirebaseRegisterExternal external)
 {
     return(await ExecuteInMonitoring(async() =>
     {
         return await service.RegisterExternalUsingFirebaseAsync(external);
     }));
 }
Exemple #2
0
        public async Task <AccessTokenResponse> RegisterExternalUsingFirebaseAsync(FirebaseRegisterExternal external)
        {
            FirebaseRegisterExternalValidation validation = new FirebaseRegisterExternalValidation();

            validation.ValidateAndThrow(external);

            FirebaseToken decodedToken = validation.ParsedToken;

            var    claims = decodedToken.Claims;
            string email  = claims["email"] + "";
            string name   = claims["name"] + "";
            string avatar = claims["picture"] + "";

            var user = repository.GetUserByUsername(email);

            if (user == null)
            {
                user = new User()
                {
                    Email    = email,
                    Username = email,
                    Fullname = name
                };
                user.UserRole.Add(new UserRole()
                {
                    RoleId = (int)RolesEnum.MEMBER
                });
                await this.repository.AddAsync(user);
            }

            return(CreateToken(user));
        }
Exemple #3
0
        private async Task <AccessTokenResponse> AuthenticateByFirebaseAsync(FirebaseRegisterExternal external)
        {
            using (var trans = unitOfWork.CreateTransaction())
            {
                AccessTokenResponse token = null;
                try
                {
                    FirebaseRegisterExternalValidation validation = new FirebaseRegisterExternalValidation();
                    validation.ValidateAndThrow(external);

                    FirebaseToken decodedToken = validation.ParsedToken;

                    var    claims = decodedToken.Claims;
                    string email  = claims["email"] + "";
                    string name   = claims["name"] + "";
                    string avatar = claims["picture"] + "";

                    var user = repository.GetUserByUsername(email);
                    if (user == null)
                    {
                        user = new User()
                        {
                            Email    = email,
                            Username = email,
                            Fullname = name
                        };
                        user.UserRole.Add(new UserRole()
                        {
                            RoleId = (int)RolesEnum.MEMBER
                        });
                        await this.repository.AddAsync(user);
                    }
                    token = CreateToken(user);
                    trans.Commit();
                }
                catch (Exception e)
                {
                    trans.Rollback();
                    throw e;
                }
                return(token);
            }
        }