package angularBeans.demoApp.ngbeans; import java.io.Serializable; import java.util.List; import javax.enterprise.event.Event; import javax.inject.Inject; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import angularBeans.api.AngularBean; import angularBeans.api.NGModel; import angularBeans.api.NGPostConstruct; import angularBeans.api.NGReturn; import angularBeans.api.NGSubmit; import angularBeans.api.http.Put; import angularBeans.context.NGSessionScoped; import angularBeans.demoApp.domain.NotificationMessage; import angularBeans.demoApp.domain.User; import angularBeans.demoApp.service.VirtualClassService; import angularBeans.events.RemoteEventBus; import angularBeans.io.FileUpload; import angularBeans.io.LobWrapper; import angularBeans.io.Upload; import angularBeans.log.NGLogger; import angularBeans.log.NGLogger.Level; import angularBeans.realtime.RealTime; import angularBeans.realtime.RealTimeClient; import angularBeans.util.ModelQuery; import angularBeans.util.RootScope; @AngularBean @NGSessionScoped public class AuthenticationService implements Serializable { @Inject @AngularBean RemoteEventBus remoteEventBus; @Inject VirtualClassService virtualClassService; @Inject NGLogger logger; @Inject ModelQuery modelQuery; @Inject RootScope rootScope; @Inject RealTimeClient client; @Inject Event<NotificationMessage> notificationBus; private User connectedUser; private String login; private String password; @NGPostConstruct public void init() { logger.log(Level.WARN, "please log in %s ", "and enjoy !!"); // if (connectedUser != null) { // modelQueryFactory.getRootScope().setProperty("GRANT_LOGIN", true); // modelQueryFactory.getRootScope() // .setProperty("connectedUser", connectedUser); // } } @Put public void newAccount(User user) { virtualClassService.createAccount(user); user.setPhoto(new LobWrapper(avatar.getData(), user)); } private LobWrapper avatar; public LobWrapper getAvatar() { return avatar; } @FileUpload(path = "/avatar") public void uploadAvatar(List<Upload> uploads) { avatar = new LobWrapper(uploads.get(0).getAsByteArray(), this); client.publish(modelQuery.setProperty("avatar", avatar)); } @RealTime @NGSubmit(backEndModels = "*") @NGReturn(model = "users", updates = "*") public String authenticate() { remoteEventBus.subscribe("notificationChannel"); User user = new User(login, password); if (virtualClassService.getUsers().contains(user)) { connectedUser = virtualClassService.getUsers().get( virtualClassService.getUsers().indexOf(user)); rootScope.setProperty("connectedUser", connectedUser); rootScope.setProperty("GRANT_LOGIN", true); login = ""; password = ""; NotificationMessage message = new NotificationMessage("img", "GRANT-ACCESS", " Welcome !!", false); message.setImage("images/mini_logo.png"); notificationBus.fire(message); return "/choice"; } notificationBus.fire(new NotificationMessage("danger", "SECURITY", "UNAUTHORIZED !!", false)); modelQuery.setProperty("message", "incorrect login or password !!"); return "/"; } @NGModel @NotNull @Pattern(regexp = "/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/") public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } @NGModel @NotNull @Size(min = 3, max = 12) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @NGModel public User getConnectedUser() { return connectedUser; } public void setConnectedUser(User connectedUser) { this.connectedUser = connectedUser; } }