Esempio n. 1
0
        public async Task <IActionResult> Post([FromBody] RegistrationViewModel model)
        {
            var appUser = _mapper.Map <AppUser>(model);

            var result = await UserManager.CreateAsync(appUser, model.Password);

            if (!result.Succeeded)
            {
                return(new BadRequestObjectResult(Errors.AddErrors(ModelState, result)));
            }

            await Db.Employees.AddAsync(new Employee { UserId = appUser.Id, Location = model.Location });

            await Db.SaveChangesAsync();

            if (string.Equals(model.Mode, "admin", System.StringComparison.OrdinalIgnoreCase))
            {
                await EventLogger.LogAsync(SysEventType.UserCreated, await FindUserAsync(), appUser);
            }
            else
            {
                await EventLogger.LogAsync(SysEventType.UserRegistered, appUser);
            }

            return(Ok());
        }
Esempio n. 2
0
        public async Task <IActionResult> Facebook([FromBody] FacebookAuthViewModel model)
        {
            // 1.generate an app access token
            var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={_fbAuthSettings.AppId}&client_secret={_fbAuthSettings.AppSecret}&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);
            // 2. validate the user access token
            var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={model.AccessToken}&access_token={appAccessToken.AccessToken}");

            var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse);

            if (!userAccessTokenValidation.Data.IsValid)
            {
                return(BadRequest(Errors.AddError(ModelState, "login_failure", ExternalAuthInvalidFacebookToken)));
            }

            // 3. we've got a valid token so we can request user data from fb
            var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={model.AccessToken}");

            var userInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse);

            // 4. ready to create the local user account (if necessary) and jwt
            var user = await _userManager.FindByEmailAsync(userInfo.Email);

            if (user == null)
            {
                var appUser = new AppUser
                {
                    FirstName  = userInfo.FirstName,
                    LastName   = userInfo.LastName,
                    FacebookId = userInfo.Id,
                    Email      = userInfo.Email,
                    UserName   = userInfo.Email,
                    PictureUrl = userInfo.Picture.Data.Url
                };

                var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8));

                if (!result.Succeeded)
                {
                    return(new BadRequestObjectResult(Errors.AddErrors(ModelState, result)));
                }

                await _appDbContext.Employees.AddAsync(new Employee { UserId = appUser.Id, Location = "", Locale = userInfo.Locale, Gender = userInfo.Gender });

                await _appDbContext.SaveChangesAsync();
            }

            // generate the jwt for the local user...
            var localUser = await _userManager.FindByNameAsync(userInfo.Email);

            if (localUser == null)
            {
                return(BadRequest(Errors.AddError(ModelState, "login_failure", ExternalAuthLocalAccountCreationFailed)));
            }

            var identity = _jwtFactory.GenerateClaimsIdentity(localUser.UserName, localUser.Id);

            var jwt = await identity.GenerateJwtAsync(localUser.Id,
                                                      localUser.UserName,
                                                      localUser.UserRole(),
                                                      _jwtFactory,
                                                      _jwtOptions);

            return(new OkObjectResult(jwt.Json()));
        }
        /// <summary>
        /// Funcion de Registro de documento segun datos enviados
        /// </summary>
        /// <param name="Resol">Resolucion de proveedor a la que pertenece el documento</param>
        /// <param name="TipoDoc">TipoDoc de documento a registrar</param>
        /// <param name="Serie">Serie del documento a registrar</param>
        /// <param name="DocNo">Correlativo del documento a registrar</param>
        /// <returns>Respuesta de éxito o fallo de registro. Ver Variable de mensaje</returns>
        //Registro de documento al proveedor
        public bool RegistrarDocumento(string Resol, string TipoDoc, string Serie, string DocNo)
        {
            bool   resultado = false;
            string msg = null, cae = null;

            //Seteo de variables de negocio
            this.Resolucion  = Resol;
            this.TipoDoc     = TipoDoc;
            this.SerieDoc    = Serie;
            this.NoDocumento = DocNo;

            //Seteo de modo de funcion
            Funcion = Modo.Registro;

            //Carga de Datos
            CargarDatos();

            try
            {
                //Obtencion de Clase del proveedor para ejecucion del proceso
                string provider = utl.convertirString(DocProvider.Rows[0]["ClassName"]);

                //Seleccion de interface segun clase de proveedor
                IFacElecInterface inter = ObtenerInterface(provider);

                //Carga de elementos en la interface
                inter.DocHeader   = this.DocHeader;
                inter.DocDetail   = this.DocDetail;
                inter.DocProvider = this.DocProvider;

                //Ejecucion de proceso
                List <Parameter> res = inter.RegistrarDocumento();

                //Bitacora de ejecucion
                GuardarBitacora(res);

                //Obtencion de resultados
                resultado = utl.convertirBoolean(res.FirstOrDefault(f => f.ParameterName.Equals("Resultado")).Value);
                msg       = utl.convertirString(res.FirstOrDefault(f => f.ParameterName.Equals("Mensaje")).Value);
                cae       = utl.convertirString(res.FirstOrDefault(f => f.ParameterName.Equals("CAE")).Value);
                string extmsg = null;

                //Verificacion de resultado exitoso
                if (resultado)
                {
                    //Actualizacion de registros
                    ActualizarRegistro(res);

                    //Ejecucion de proceso de Documento PDF
                    ProcesoPDF(res, ref extmsg);
                }
                else if (cae != "")
                {
                    //Actualizacion por si CAE no regresa vacio pero dio error
                    //ActualizarRegistroCAE(res);
                    ActualizarRegistro(res);
                    resultado = true;
                    msg       = "Se hizo registro de Documento. (E)";
                }

                //Captura de mensajes
                this.Mensaje = msg + extmsg;
            }
            catch (Exception ex)
            {
                //Captura de Excepcion
                err.AddErrors(ex, "Registro de Documento");
                this.Mensaje = "Error en la Ejecución: " + ex.Message;
            }

            return(resultado);
        }