diff --git a/src/main/java/org/datasurvey/repository/UserRepository.java b/src/main/java/org/datasurvey/repository/UserRepository.java index 3f929fb..6a33ce2 100644 --- a/src/main/java/org/datasurvey/repository/UserRepository.java +++ b/src/main/java/org/datasurvey/repository/UserRepository.java @@ -31,7 +31,7 @@ public interface UserRepository extends JpaRepository { Optional findOneByLogin(String login); @EntityGraph(attributePaths = "authorities") - @Cacheable(cacheNames = USERS_BY_LOGIN_CACHE) + //@Cacheable(cacheNames = USERS_BY_LOGIN_CACHE) Optional findOneWithAuthoritiesByLogin(String login); @EntityGraph(attributePaths = "authorities") diff --git a/src/main/java/org/datasurvey/service/MailService.java b/src/main/java/org/datasurvey/service/MailService.java index c40c4fe..cf8f62b 100644 --- a/src/main/java/org/datasurvey/service/MailService.java +++ b/src/main/java/org/datasurvey/service/MailService.java @@ -5,6 +5,7 @@ import java.util.Locale; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.datasurvey.domain.User; +import org.datasurvey.domain.UsuarioExtra; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.MessageSource; @@ -115,4 +116,16 @@ public class MailService { log.debug("Sending password restored email to '{}'", user.getEmail()); sendEmailFromTemplate(user, "mail/passwordRestoredEmail", "email.restored.title"); } + + @Async + public void sendSuspendedAccountMail(UsuarioExtra user) { + log.debug("Sending suspended account mail to '{}'", user.getUser().getEmail()); + sendEmailFromTemplate(user.getUser(), "mail/suspendedAccountEmail", "email.suspended.title"); + } + + @Async + public void sendActivatedAccountMail(UsuarioExtra user) { + log.debug("Sending reactivated account mail to '{}'", user.getUser().getEmail()); + sendEmailFromTemplate(user.getUser(), "mail/reactivatedAccountEmail", "email.reactivation.title"); + } } diff --git a/src/main/java/org/datasurvey/service/UserService.java b/src/main/java/org/datasurvey/service/UserService.java index 227c590..394274c 100644 --- a/src/main/java/org/datasurvey/service/UserService.java +++ b/src/main/java/org/datasurvey/service/UserService.java @@ -76,6 +76,19 @@ public class UserService { ); } + public Optional modifyStatus(String login, Boolean estado) { + return userRepository + .findOneByLogin(login) + .map( + user -> { + // activate given user for the registration key. + user.setActivated(estado); + log.debug("Activated user: {}", user); + return user; + } + ); + } + public Optional completePasswordReset(String newPassword, String key) { log.debug("Reset user password for reset key {}", key); return userRepository @@ -386,6 +399,7 @@ public class UserService { @Transactional(readOnly = true) public Optional getUserWithAuthorities() { return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin); + //findOneWithAuthoritiesByLogin } /** diff --git a/src/main/java/org/datasurvey/web/rest/UserJWTController.java b/src/main/java/org/datasurvey/web/rest/UserJWTController.java index 3ab2601..441b8dd 100644 --- a/src/main/java/org/datasurvey/web/rest/UserJWTController.java +++ b/src/main/java/org/datasurvey/web/rest/UserJWTController.java @@ -40,6 +40,7 @@ public class UserJWTController { Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authentication); String jwt = tokenProvider.createToken(authentication, loginVM.isRememberMe()); + HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK); diff --git a/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java b/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java index 9914108..78b9e32 100644 --- a/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java +++ b/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java @@ -9,6 +9,8 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import org.datasurvey.domain.UsuarioExtra; import org.datasurvey.repository.UsuarioExtraRepository; +import org.datasurvey.service.MailService; +import org.datasurvey.service.UserService; import org.datasurvey.service.UsuarioExtraQueryService; import org.datasurvey.service.UsuarioExtraService; import org.datasurvey.service.criteria.UsuarioExtraCriteria; @@ -41,14 +43,22 @@ public class UsuarioExtraResource { private final UsuarioExtraQueryService usuarioExtraQueryService; + private final MailService mailService; + + private final UserService userService; + public UsuarioExtraResource( UsuarioExtraService usuarioExtraService, UsuarioExtraRepository usuarioExtraRepository, - UsuarioExtraQueryService usuarioExtraQueryService + UsuarioExtraQueryService usuarioExtraQueryService, + MailService mailService, + UserService userService ) { this.usuarioExtraService = usuarioExtraService; this.usuarioExtraRepository = usuarioExtraRepository; this.usuarioExtraQueryService = usuarioExtraQueryService; + this.mailService = mailService; + this.userService = userService; } /** @@ -99,6 +109,40 @@ public class UsuarioExtraResource { } UsuarioExtra result = usuarioExtraService.save(usuarioExtra); + + return ResponseEntity + .ok() + .headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, usuarioExtra.getId().toString())) + .body(result); + } + + @PutMapping("/usuario-extras-estado/{id}") + public ResponseEntity updateUsuarioExtraEstado( + @PathVariable(value = "id", required = false) final Long id, + @Valid @RequestBody UsuarioExtra usuarioExtra + ) throws URISyntaxException { + log.debug("REST request to update UsuarioExtra : {}, {}", id, usuarioExtra); + if (usuarioExtra.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + if (!Objects.equals(id, usuarioExtra.getId())) { + throw new BadRequestAlertException("Invalid ID", ENTITY_NAME, "idinvalid"); + } + + if (!usuarioExtraRepository.existsById(id)) { + throw new BadRequestAlertException("Entity not found", ENTITY_NAME, "idnotfound"); + } + + UsuarioExtra result = usuarioExtraService.save(usuarioExtra); + + if (usuarioExtra.getEstado().name().equals("SUSPENDED")) { + this.userService.modifyStatus(usuarioExtra.getUser().getLogin(), false); + mailService.sendSuspendedAccountMail(usuarioExtra); //se manda el correo de la suspecion + } else { + this.userService.modifyStatus(usuarioExtra.getUser().getLogin(), true); + mailService.sendActivatedAccountMail(usuarioExtra); //se manda el correo de reactivacion + } + return ResponseEntity .ok() .headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, usuarioExtra.getId().toString())) diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 52b6575..7ff70ce 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -27,3 +27,15 @@ email.restored.text1=Your DataSurvey password has been successfully reset.. email.restored.text2=Regards, email.restored.text3=If you did not make this change, please notify the following email immediately: email.restored.email=datasurvey@gmail.com + +#reactivar la cuenta +email.reactivation.title=Your account has been reactivated +email.reactivation.greeting=Hello, {0}! +email.reactivation.text1=Your account has been reactivated. Please click on the link so you can keep enjoying DataSurvey: +email.reactivation.text2=Regards, + +#suspended accounr +email.suspended.title=Your account has been suspended +email.suspended.greeting=Dear {0} +email.suspended.text1=Su cuenta en DatSurvey se encuentra temporalmente suspendida. Si cree que es un error por favor haga clic en el siguiente enlace para enviar una solicitud para reactivar su cuenta: +email.suspended.text2=Saludos, diff --git a/src/main/resources/i18n/messages_es.properties b/src/main/resources/i18n/messages_es.properties index 77121fd..4406c99 100644 --- a/src/main/resources/i18n/messages_es.properties +++ b/src/main/resources/i18n/messages_es.properties @@ -28,3 +28,15 @@ email.restored.text2=Saludos, email.restored.text3=Si usted no realizó este cambio, favor notifique inmediatamente al siguiente correo: email.restored.email=datasurvey@gmail.com +#reactivate account +email.reactivation.title=Su cuenta ha sido reactivada +email.reactivation.greeting=¡Hola, {0}! +email.reactivation.text1=Su cuenta en DataSurvey ha sido reactivada. Por favor haga clic en el siguiente enlace para iniciar sesión y disfrutar de DataSurvey: +email.reactivation.text2=Saludos, + + +#suspended accounr +email.suspended.title=Su cuenta ha sido suspendida +email.suspended.greeting=Estimado {0} +email.suspended.text1=Lamentamos informarle que su cuenta en DatSurvey se encuentra temporalmente suspendida. Si cree que es un error por favor responda a este correo +email.suspended.text2=Saludos, diff --git a/src/main/resources/templates/mail/creationEmail.html b/src/main/resources/templates/mail/creationEmail.html index 68b86f5..e46861a 100644 --- a/src/main/resources/templates/mail/creationEmail.html +++ b/src/main/resources/templates/mail/creationEmail.html @@ -264,7 +264,7 @@ th:with="url=(@{|${baseUrl}/account/reset/finish?key=${user.resetKey}|})" th:href="${url}" class="btn btn-primary" - >Iniciar sesiónIniciar Sesión

diff --git a/src/main/resources/templates/mail/reactivatedAccountEmail.html b/src/main/resources/templates/mail/reactivatedAccountEmail.html new file mode 100644 index 0000000..8226a4d --- /dev/null +++ b/src/main/resources/templates/mail/reactivatedAccountEmail.html @@ -0,0 +1,322 @@ + + + + + + + + + + + JHipster activation + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + diff --git a/src/main/resources/templates/mail/suspendedAccountEmail.html b/src/main/resources/templates/mail/suspendedAccountEmail.html new file mode 100644 index 0000000..5cc146b --- /dev/null +++ b/src/main/resources/templates/mail/suspendedAccountEmail.html @@ -0,0 +1,319 @@ + + + + + + + + + + + JHipster activation + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + diff --git a/src/main/webapp/app/config/error.constants.ts b/src/main/webapp/app/config/error.constants.ts index ea24e19..e0721f2 100644 --- a/src/main/webapp/app/config/error.constants.ts +++ b/src/main/webapp/app/config/error.constants.ts @@ -3,3 +3,4 @@ export const EMAIL_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/email-already-used'; export const LOGIN_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/login-already-used'; export const EMAIL_NOT_EXISTS_TYPE = PROBLEM_BASE_URL + '/email-not-exists'; export const USER_IS_GOOGLE_TYPE = PROBLEM_BASE_URL + '/user-is-google'; +export const USER_IS_SUSPENDED = PROBLEM_BASE_URL + '/user-is-suspended'; diff --git a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html index dfe7349..5ac2f58 100644 --- a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html +++ b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html @@ -1,4 +1,4 @@ -
+ diff --git a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.spec.ts deleted file mode 100644 index cee92bc..0000000 --- a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -jest.mock('@ng-bootstrap/ng-bootstrap'); - -import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { of } from 'rxjs'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -import { EncuestaService } from '../service/encuesta.service'; - -import { EncuestaDeleteDialogComponent } from './encuesta-delete-dialog.component'; - -describe('Component Tests', () => { - describe('Encuesta Management Delete Component', () => { - let comp: EncuestaDeleteDialogComponent; - let fixture: ComponentFixture; - let service: EncuestaService; - let mockActiveModal: NgbActiveModal; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - declarations: [EncuestaDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(EncuestaDeleteDialogComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(EncuestaDeleteDialogComponent); - comp = fixture.componentInstance; - service = TestBed.inject(EncuestaService); - mockActiveModal = TestBed.inject(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - jest.spyOn(service, 'delete').mockReturnValue(of(new HttpResponse({}))); - - // WHEN - comp.confirmDelete(123); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); - }) - )); - - it('Should not call delete service on clear', () => { - // GIVEN - jest.spyOn(service, 'delete'); - - // WHEN - comp.cancel(); - - // THEN - expect(service.delete).not.toHaveBeenCalled(); - expect(mockActiveModal.close).not.toHaveBeenCalled(); - expect(mockActiveModal.dismiss).toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts index 573c319..9c56c0e 100644 --- a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts +++ b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts @@ -1,5 +1,6 @@ import { Component } from '@angular/core'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { EstadoEncuesta } from 'app/entities/enumerations/estado-encuesta.model'; import { IEncuesta } from '../encuesta.model'; import { EncuestaService } from '../service/encuesta.service'; @@ -16,8 +17,9 @@ export class EncuestaDeleteDialogComponent { this.activeModal.dismiss(); } - confirmDelete(id: number): void { - this.encuestaService.delete(id).subscribe(() => { + confirmDelete(encuesta: IEncuesta): void { + encuesta.estado = EstadoEncuesta.DELETED; + this.encuestaService.update(encuesta).subscribe(() => { this.activeModal.close('deleted'); }); } diff --git a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html new file mode 100644 index 0000000..8330f1a --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html @@ -0,0 +1,21 @@ + + + + + + + diff --git a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.scss b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts new file mode 100644 index 0000000..ff2d3b5 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts @@ -0,0 +1,33 @@ +import { Component, OnInit } from '@angular/core'; +import { IEncuesta } from '../encuesta.model'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { EncuestaService } from '../service/encuesta.service'; +import { EstadoEncuesta } from '../../enumerations/estado-encuesta.model'; + +@Component({ + selector: 'jhi-encuesta-publish-dialog', + templateUrl: './encuesta-publish-dialog.component.html', + styleUrls: ['./encuesta-publish-dialog.component.scss'], +}) +export class EncuestaPublishDialogComponent implements OnInit { + encuesta?: IEncuesta; + + constructor(protected encuestaService: EncuestaService, protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmPublish(encuesta: IEncuesta): void { + debugger; + if (encuesta.estado === 'DRAFT') { + encuesta.estado = EstadoEncuesta.ACTIVE; + } + + this.encuestaService.update(encuesta).subscribe(() => { + this.activeModal.close('published'); + }); + } + + ngOnInit(): void {} +} diff --git a/src/main/webapp/app/entities/encuesta/encuesta.module.ts b/src/main/webapp/app/entities/encuesta/encuesta.module.ts index 6cd231e..7b1d91e 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta.module.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta.module.ts @@ -6,10 +6,17 @@ import { EncuestaUpdateComponent } from './update/encuesta-update.component'; import { EncuestaDeleteDialogComponent } from './delete/encuesta-delete-dialog.component'; import { EncuestaRoutingModule } from './route/encuesta-routing.module'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { EncuestaPublishDialogComponent } from './encuesta-publish-dialog/encuesta-publish-dialog.component'; @NgModule({ imports: [SharedModule, EncuestaRoutingModule, FontAwesomeModule], - declarations: [EncuestaComponent, EncuestaDetailComponent, EncuestaUpdateComponent, EncuestaDeleteDialogComponent], + declarations: [ + EncuestaComponent, + EncuestaDetailComponent, + EncuestaUpdateComponent, + EncuestaDeleteDialogComponent, + EncuestaPublishDialogComponent, + ], entryComponents: [EncuestaDeleteDialogComponent], }) export class EncuestaModule {} diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html index f0545aa..54aaba1 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html @@ -29,14 +29,26 @@ - - -
- No encuestas found + +
+ No surveys found +
+ +
+
+
+ +
+
+ -
+
    @@ -61,8 +73,17 @@
  • -
  • @@ -79,7 +100,7 @@
    Edit - +
- + +
+ + + + +
@@ -415,7 +422,7 @@ -
diff --git a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.spec.ts deleted file mode 100644 index 4649c87..0000000 --- a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -jest.mock('@ng-bootstrap/ng-bootstrap'); - -import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { of } from 'rxjs'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -import { UsuarioExtraService } from '../service/usuario-extra.service'; - -import { UsuarioExtraDeleteDialogComponent } from './usuario-extra-delete-dialog.component'; - -describe('Component Tests', () => { - describe('UsuarioExtra Management Delete Component', () => { - let comp: UsuarioExtraDeleteDialogComponent; - let fixture: ComponentFixture; - let service: UsuarioExtraService; - let mockActiveModal: NgbActiveModal; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - declarations: [UsuarioExtraDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(UsuarioExtraDeleteDialogComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(UsuarioExtraDeleteDialogComponent); - comp = fixture.componentInstance; - service = TestBed.inject(UsuarioExtraService); - mockActiveModal = TestBed.inject(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - jest.spyOn(service, 'delete').mockReturnValue(of(new HttpResponse({}))); - - // WHEN - comp.confirmDelete(123); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); - }) - )); - - it('Should not call delete service on clear', () => { - // GIVEN - jest.spyOn(service, 'delete'); - - // WHEN - comp.cancel(); - - // THEN - expect(service.delete).not.toHaveBeenCalled(); - expect(mockActiveModal.close).not.toHaveBeenCalled(); - expect(mockActiveModal.dismiss).toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.tmpSpec.ts b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.tmpSpec.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.ts b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.ts index 1f610cc..23e9838 100644 --- a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.ts +++ b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.ts @@ -3,6 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { IUsuarioExtra } from '../usuario-extra.model'; import { UsuarioExtraService } from '../service/usuario-extra.service'; +import { EstadoUsuario } from '../../enumerations/estado-usuario.model'; @Component({ templateUrl: './usuario-extra-delete-dialog.component.html', @@ -16,8 +17,13 @@ export class UsuarioExtraDeleteDialogComponent { this.activeModal.dismiss(); } - confirmDelete(id: number): void { - this.usuarioExtraService.delete(id).subscribe(() => { + confirmDelete(usuarioExtra: IUsuarioExtra): void { + if (usuarioExtra.estado == EstadoUsuario.ACTIVE) { + usuarioExtra.estado = EstadoUsuario.SUSPENDED; + } else { + usuarioExtra.estado = EstadoUsuario.ACTIVE; + } + this.usuarioExtraService.updateEstado(usuarioExtra).subscribe(() => { this.activeModal.close('deleted'); }); } diff --git a/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html b/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html index 6afe2b7..bd3959a 100644 --- a/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html +++ b/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html @@ -86,9 +86,8 @@ View    - diff --git a/src/main/webapp/app/entities/usuario-extra/service/usuario-extra.service.ts b/src/main/webapp/app/entities/usuario-extra/service/usuario-extra.service.ts index ff2d74b..b8ee9c4 100644 --- a/src/main/webapp/app/entities/usuario-extra/service/usuario-extra.service.ts +++ b/src/main/webapp/app/entities/usuario-extra/service/usuario-extra.service.ts @@ -18,6 +18,7 @@ export type EntityArrayUserPublicResponseType = HttpResponse; @Injectable({ providedIn: 'root' }) export class UsuarioExtraService { protected resourceUrl = this.applicationConfigService.getEndpointFor('api/usuario-extras'); + protected resourceUrlEstado = this.applicationConfigService.getEndpointFor('api/usuario-extras-estado'); protected resourceUrlPublicUser = this.applicationConfigService.getEndpointFor('api'); constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} @@ -36,6 +37,13 @@ export class UsuarioExtraService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + updateEstado(usuarioExtra: IUsuarioExtra): Observable { + const copy = this.convertDateFromClient(usuarioExtra); + return this.http + .put(`${this.resourceUrlEstado}/${getUsuarioExtraIdentifier(usuarioExtra) as number}`, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + partialUpdate(usuarioExtra: IUsuarioExtra): Observable { const copy = this.convertDateFromClient(usuarioExtra); return this.http diff --git a/src/main/webapp/app/login/login.component.html b/src/main/webapp/app/login/login.component.html index 1a2c917..c47e7d8 100644 --- a/src/main/webapp/app/login/login.component.html +++ b/src/main/webapp/app/login/login.component.html @@ -74,15 +74,17 @@

Ingrese su correo electrónico y contraseña

-
+
Failed to sign in! Please check your credentials and try again.
+
+
diff --git a/src/main/webapp/app/login/login.component.ts b/src/main/webapp/app/login/login.component.ts index b0a4685..1dade60 100644 --- a/src/main/webapp/app/login/login.component.ts +++ b/src/main/webapp/app/login/login.component.ts @@ -9,8 +9,10 @@ import { GoogleLoginProvider } from 'angularx-social-login'; import { RegisterService } from '../account/register/register.service'; import { TranslateService } from '@ngx-translate/core'; import { HttpErrorResponse } from '@angular/common/http'; -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from '../config/error.constants'; +import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE, USER_IS_SUSPENDED } from '../config/error.constants'; import { LocalStorageService } from 'ngx-webstorage'; +import { UsuarioExtra } from '../entities/usuario-extra/usuario-extra.model'; +import { Account } from '../core/auth/account.model'; @Component({ selector: 'jhi-login', @@ -25,6 +27,8 @@ export class LoginComponent implements OnInit, AfterViewInit { error = false; errorEmailExists = false; errorUserExists = false; + userSuspended = false; + imprimir = false; loginForm = this.fb.group({ username: [null, [Validators.required, Validators.email, Validators.maxLength(254)]], @@ -48,18 +52,6 @@ export class LoginComponent implements OnInit, AfterViewInit { ) {} ngOnInit(): void { - //Servicio para verificar si el usuario se encuentra loggeado - /*this.authService.authState.subscribe(user => { - this.user = user; - this.loggedIn = user != null; - - /!* console.log('correo: ' + user.email); - console.log('correo: ' + user.name); - console.log('ID: ' + this.user.id);*!/ - - this.authenticacionGoogle(); - }); -*/ // if already authenticated then navigate to home page this.accountService.identity().subscribe(() => { if (this.accountService.isAuthenticated()) { @@ -89,7 +81,7 @@ export class LoginComponent implements OnInit, AfterViewInit { } authenticacionGoogle(): void { - this.loginService.login({ username: this.user.email, password: this.user.id, rememberMe: true }).subscribe( + this.loginService.login({ username: this.user.email, password: this.user.id, rememberMe: false }).subscribe( () => { this.authenticationError = false; if (!this.router.getCurrentNavigation()) { @@ -98,21 +90,14 @@ export class LoginComponent implements OnInit, AfterViewInit { this.router.navigate(['']); } }, - () => this.activateGoogle() - /*this.registerService - .save({ - login: this.user.email, - email: this.user.email, - password: this.user.id, - langKey: this.translateService.currentLang, - name: this.user.name, - profileIcon: this.randomProfilePic(), - isAdmin: 0, - }) - .subscribe( - () => (this.success = true), - response => this.processError(response) - ) */ //console.log("Usuario no existe") + response => { + debugger; + if (response.status == 401 && response.error.detail == 'Bad credentials') { + this.activateGoogle(); + } else { + this.processError(response); + } + } ); } @@ -121,10 +106,13 @@ export class LoginComponent implements OnInit, AfterViewInit { } processError(response: HttpErrorResponse): void { + debugger; if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { this.errorUserExists = true; } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { this.errorEmailExists = true; + } else if (response.status === 401) { + this.userSuspended = true; } else { this.error = true; } @@ -157,6 +145,7 @@ export class LoginComponent implements OnInit, AfterViewInit { } login(): void { + debugger; this.loginService .login({ username: this.loginForm.get('username')!.value, @@ -164,14 +153,24 @@ export class LoginComponent implements OnInit, AfterViewInit { rememberMe: this.loginForm.get('rememberMe')!.value, }) .subscribe( - () => { + value => { + debugger; + console.log(value); + + /*if (value?.activated == false){ + this.userSuspended = true; + + console.log(value.activated) + }else {*/ this.authenticationError = false; if (!this.router.getCurrentNavigation()) { // There were no routing during login (eg from navigationToStoredUrl) this.router.navigate(['']); } + // } }, - () => (this.authenticationError = true) + + response => this.processError(response) ); } } diff --git a/src/main/webapp/app/login/login.service.ts b/src/main/webapp/app/login/login.service.ts index bc97be6..8e24e3d 100644 --- a/src/main/webapp/app/login/login.service.ts +++ b/src/main/webapp/app/login/login.service.ts @@ -12,6 +12,7 @@ export class LoginService { constructor(private accountService: AccountService, private authServerProvider: AuthServerProvider) {} login(credentials: Login): Observable { + debugger; return this.authServerProvider.login(credentials).pipe(mergeMap(() => this.accountService.identity(true))); } diff --git a/src/main/webapp/i18n/es/encuesta.json b/src/main/webapp/i18n/es/encuesta.json index d2b259a..15c119d 100644 --- a/src/main/webapp/i18n/es/encuesta.json +++ b/src/main/webapp/i18n/es/encuesta.json @@ -4,15 +4,15 @@ "home": { "title": "Encuestas", "refreshListLabel": "Refrescar lista", - "createLabel": "Crear nuevo Encuesta", - "createOrEditLabel": "Crear o editar Encuesta", - "notFound": "Ningún Encuestas encontrado" + "createLabel": "Crear nueva encuesta", + "createOrEditLabel": "Crear o editar encuesta", + "notFound": "Ninguna encuesta fue encontrada" }, - "created": "Un nuevo Encuesta ha sido creado con el identificador {{ param }}", - "updated": "Un Encuesta ha sido actualizado con el identificador {{ param }}", - "deleted": "Un Encuesta ha sido eliminado con el identificador {{ param }}", + "created": "Una nueva encuesta ha sido creada con el identificador {{ param }}", + "updated": "Una encuesta ha sido actualizado con el identificador {{ param }}", + "deleted": "Una encuesta ha sido eliminada con el identificador {{ param }}", "delete": { - "question": "¿Seguro que quiere eliminar Encuesta {{ id }}?" + "question": "¿Seguro que quiere eliminar la encuesta {{ id }}?" }, "detail": { "title": "Encuesta" @@ -32,7 +32,7 @@ "ePreguntaAbierta": "E Pregunta Abierta", "ePreguntaCerrada": "E Pregunta Cerrada", "categoria": "Categoría", - "usuarioExtra": "Usuario Extra" + "usuarioExtra": "Correo Usuario" } } } diff --git a/src/main/webapp/i18n/es/global.json b/src/main/webapp/i18n/es/global.json index 0da30ff..adf0939 100644 --- a/src/main/webapp/i18n/es/global.json +++ b/src/main/webapp/i18n/es/global.json @@ -129,14 +129,16 @@ "create": "Crear", "enable": "Habilitar", "disable": "Deshabilitar", - "toggleStatus": "Cambiar Estado" + "toggleStatus": "Cambiar Estado", + "publish": "Publicar" }, "detail": { "field": "Campo", "value": "Valor" }, "delete": { - "title": "Confirmar operación de borrado" + "title": "Confirmar operación de borrado", + "status": "Confirmar cambio de estado" }, "validation": { "required": "Este campo es obligatorio.", @@ -150,6 +152,11 @@ "number": "Este campo debe ser un número.", "integerNumber": "Este campo debe ser un número entero.", "datetimelocal": "Este campo debe ser una fecha y hora." + }, + "publish": { + "title": "Publicar encuesta", + "detail": "¿Está seguro de querer publicar esta encuesta?", + "success": "Su encuesta fue publicada exitosamente" } }, "error": { diff --git a/src/main/webapp/i18n/es/login.json b/src/main/webapp/i18n/es/login.json index 9266406..8409cd1 100644 --- a/src/main/webapp/i18n/es/login.json +++ b/src/main/webapp/i18n/es/login.json @@ -10,7 +10,8 @@ "messages": { "error": { "authentication": "Revise las credenciales e intente de nuevo ", - "isGoogle": "Al haber ingresado por medio de Google no cuenta con los permisos para modificar su contraseña" + "isGoogle": "Al haber ingresado por medio de Google no cuenta con los permisos para modificar su contraseña", + "userSuspended": "No cuenta con los permisos para iniciar sesión. Su cuenta se encuentra suspendida" } }, "password": { diff --git a/src/main/webapp/i18n/es/usuarioExtra.json b/src/main/webapp/i18n/es/usuarioExtra.json index 40c7603..47fc023 100644 --- a/src/main/webapp/i18n/es/usuarioExtra.json +++ b/src/main/webapp/i18n/es/usuarioExtra.json @@ -12,7 +12,7 @@ "updated": "El usuario con el identificador {{ param }} ha sido actualizado", "deleted": "El usuario con el identificador {{ param }} ha sido eliminado", "delete": { - "question": "¿Seguro que quiere eliminar el usuario {{ id }}?" + "question": "¿Seguro que quiere modificar el estado del usuario ?" }, "detail": { "title": "Usuario"