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()); }
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); }