Skip to content

Commit

Permalink
feat: Create API call and function for requesting a new email.
Browse files Browse the repository at this point in the history
  • Loading branch information
kristinaBc3 committed Feb 6, 2024
1 parent d9cfc6a commit 01a6284
Show file tree
Hide file tree
Showing 57 changed files with 417 additions and 250 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -476,11 +476,19 @@ public static interface PARAMETERS {
/**
* URL PARAMETER for user to verify account.
*/
public static final String USER_VERIFICATION = "verify";
public static final String USER_VERIFICATION = "verify";
/**
* URL PARAMETER for user to request a new certificate.
*/
public static final String USER_CERTIFICATE = "certificate";
/**
* URL PARAMETER for user requesting a new email.
*/
public static final String USER_REQUEST_EMAIL = "request-new-email";
/**
* URL PARAMETER for user setting a new email.
*/
public static final String USER_NEW_EMAIL = "new-email";
/**
* URL PARAMETER for requesting the names of groups.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.integratedmodelling.klab.hub.api;

import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;

public enum ClickbackAction {
activate(
TokenType.verify),
Expand All @@ -10,7 +13,9 @@ public enum ClickbackAction {
newUser(
TokenType.newUser),
lostPassword(
TokenType.lostPassword);
TokenType.lostPassword),
changeEmail (
TokenType.verifyEmail);

private final TokenType tokenType;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;

import org.integratedmodelling.klab.hub.config.EmailConfig.EmailType;
import org.integratedmodelling.klab.hub.emails.EmailConfig.EmailType;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import org.integratedmodelling.klab.hub.network.NodeNetworkManager;
import org.integratedmodelling.klab.hub.repository.MongoGroupRepository;
import org.integratedmodelling.klab.hub.tokens.services.UserAuthTokenService;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;
import org.integratedmodelling.klab.hub.users.services.UserProfileService;
import org.integratedmodelling.klab.hub.utils.IPUtils;
import org.integratedmodelling.klab.rest.AuthenticatedIdentity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.integratedmodelling.klab.hub.commands.GenerateHubReference;
import org.integratedmodelling.klab.hub.license.controllers.LeverService;
import org.integratedmodelling.klab.hub.tokens.services.LeverAuthTokenService;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;
import org.integratedmodelling.klab.hub.utils.IPUtils;
import org.integratedmodelling.klab.rest.AuthenticatedIdentity;
import org.integratedmodelling.klab.rest.HubReference;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public class User extends IdentityModel implements UserDetails{

@Indexed(unique = true)
String email;

String notVerifiedEmail;

@Indexed
String firstName;
Expand Down Expand Up @@ -288,6 +290,7 @@ public void updateFromProfileResource(ProfileResource resource) {
initials = resource.initials;
jobTitle = resource.jobTitle;
lastName = resource.lastName;
notVerifiedEmail = resource.email;
phone = resource.phone;
sendUpdates = resource.sendUpdates;
serverUrl = resource.serverUrl;
Expand Down Expand Up @@ -435,4 +438,14 @@ public Optional<CustomProperty> findCustomProperty(String key) {
public void removeCustomProperty(String name) {
this.customProperties.removeIf(cp -> cp.getKey().equals(name));
}

public String getNotVerifiedEmail() {
return notVerifiedEmail;
}

public void setNotVerifiedEmail(String notVerifiedEmail) {
this.notVerifiedEmail = notVerifiedEmail;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.integratedmodelling.klab.hub.api.AuthProvider;
import org.integratedmodelling.klab.hub.api.User;
import org.integratedmodelling.klab.hub.ldap.commands.CreateLdapUser;
import org.integratedmodelling.klab.hub.repository.UserRepository;
import org.springframework.security.ldap.userdetails.LdapUserDetailsManager;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.integratedmodelling.klab.hub.config;
package org.integratedmodelling.klab.hub.emails;

import java.util.Properties;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import org.integratedmodelling.klab.api.API;
import org.integratedmodelling.klab.hub.api.EmailTemplate;
import org.integratedmodelling.klab.hub.api.User;
import org.integratedmodelling.klab.hub.config.EmailConfig;
import org.integratedmodelling.klab.hub.config.EmailConfig.EmailType;
import org.integratedmodelling.klab.hub.emails.EmailConfig;
import org.integratedmodelling.klab.hub.emails.EmailConfig.EmailType;
import org.integratedmodelling.klab.hub.emails.services.EmailManager;
import org.integratedmodelling.klab.hub.emails.services.EmailTemplateService;
import org.integratedmodelling.klab.hub.exception.SendEmailException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
import javax.mail.internet.MimeMessage.RecipientType;

import org.integratedmodelling.klab.Logging;
import org.integratedmodelling.klab.hub.config.EmailConfig;

import org.integratedmodelling.klab.hub.config.LinkConfig;
import org.integratedmodelling.klab.hub.emails.EmailConfig;
import org.integratedmodelling.klab.hub.exception.SendEmailException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
Expand Down Expand Up @@ -170,6 +171,7 @@ public void send(String from, Set<String> to, Set<String> replayTo, String subje
}
mailSender.send(message);
} catch (MessagingException | MailException e) {
e.printStackTrace();
StringBuffer error = new StringBuffer("Unable to send email.\n")
.append("from: [").append(from).append("]\nto: ");
for (String receipt : to) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.integratedmodelling.klab.hub.config;
package org.integratedmodelling.klab.hub.ldap;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.integratedmodelling.klab.hub.service;
package org.integratedmodelling.klab.hub.ldap;

import java.util.List;
import java.util.Optional;
Expand All @@ -17,4 +17,5 @@ public interface LdapService {
abstract void createUser(UserDetails user);
abstract Name buildDn(String username );
abstract boolean userExists(String username, String email);
abstract boolean userExists(String username);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.integratedmodelling.klab.hub.service.implementation;
package org.integratedmodelling.klab.hub.ldap;

import static org.springframework.ldap.query.LdapQueryBuilder.query;

Expand All @@ -13,7 +13,6 @@
import javax.naming.directory.Attributes;

import org.integratedmodelling.klab.hub.exception.BadRequestException;
import org.integratedmodelling.klab.hub.service.LdapService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.DirContextOperations;
Expand Down Expand Up @@ -69,6 +68,24 @@ public boolean userExists(String username, String email) {
return true;
}
}

@Override
public boolean userExists(String username) {
LdapQuery userNameQuery = query()
.where("objectclass").is("person")
.and("uid").is(username);
List<Object> personByName = ldapTemplate.search(userNameQuery, new UserAttributesMapper());

// if (!personByName.isEmpty()) {
// throw new BadRequestException("Username is already in use.");
// }

if (personByName.isEmpty()) {
return false;
} else {
return true;
}
}

private static class GroupContextMapper extends AbstractContextMapper<JSONObject> {
public JSONObject doMapFromContext(DirContextOperations context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.integratedmodelling.klab.hub.commands;
package org.integratedmodelling.klab.hub.ldap.commands;

import org.integratedmodelling.klab.hub.api.User;
import org.integratedmodelling.klab.hub.api.adapters.LdapUserAdapter;
import org.integratedmodelling.klab.hub.commands.UserCommand;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.ldap.userdetails.LdapUserDetailsManager;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.integratedmodelling.klab.hub.commands;
package org.integratedmodelling.klab.hub.ldap.commands;

import org.integratedmodelling.klab.hub.api.User;
import org.integratedmodelling.klab.hub.api.adapters.LdapUserAdapter;
import org.integratedmodelling.klab.hub.commands.UserCommand;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.ldap.userdetails.LdapUserDetailsManager;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.integratedmodelling.klab.hub.commands;
package org.integratedmodelling.klab.hub.ldap.commands;

import org.integratedmodelling.klab.hub.api.User;
import org.integratedmodelling.klab.hub.api.adapters.LdapUserAdapter;
import org.integratedmodelling.klab.hub.commands.UserCommand;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.ldap.userdetails.LdapUserDetailsManager;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import java.io.File;
import java.util.Set;

import org.integratedmodelling.klab.hub.config.EmailConfig.EmailType;
import org.integratedmodelling.klab.hub.emails.EmailConfig.EmailType;

public class KlabEmail {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.integratedmodelling.klab.hub.payload;

import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.bson.types.ObjectId;
import org.integratedmodelling.klab.hub.api.Task;
import org.integratedmodelling.klab.hub.api.TaskStatus;
import org.integratedmodelling.klab.hub.api.TokenClickback;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenClickback;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import java.util.Optional;

import org.bson.types.ObjectId;
import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import javax.servlet.http.HttpServletRequest;

import org.integratedmodelling.klab.Logging;
import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.repository.TokenRepository;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.api.TokenType;
import org.integratedmodelling.klab.hub.api.ProfileResource;
import org.integratedmodelling.klab.hub.config.LinkConfig;
import org.integratedmodelling.klab.hub.tokens.services.UserAuthTokenService;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.core.Authentication;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import org.integratedmodelling.klab.hub.api.Task;
import org.integratedmodelling.klab.hub.api.TaskParameters;
import org.integratedmodelling.klab.hub.api.TaskStatus;
import org.integratedmodelling.klab.hub.api.TokenClickback;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenClickback;

public interface TaskService {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
import org.integratedmodelling.klab.hub.api.TaskBuilder;
import org.integratedmodelling.klab.hub.api.TaskParameters;
import org.integratedmodelling.klab.hub.api.TaskStatus;
import org.integratedmodelling.klab.hub.api.TokenClickback;
import org.integratedmodelling.klab.hub.emails.services.EmailManager;
import org.integratedmodelling.klab.hub.exception.BadRequestException;
import org.integratedmodelling.klab.hub.repository.TaskRepository;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenClickback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.integratedmodelling.klab.hub.tokens.services;

import org.integratedmodelling.klab.hub.api.TokenLever;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenLever;

public interface LeverAuthTokenService extends TokenBaseService<TokenLever>{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
import java.util.Optional;

import org.integratedmodelling.klab.hub.api.MongoLever;
import org.integratedmodelling.klab.hub.api.TokenLever;
import org.integratedmodelling.klab.hub.api.TokenType;
import org.integratedmodelling.klab.hub.commands.CreateLeverAuthenticationToken;
import org.integratedmodelling.klab.hub.exception.AuthenticationFailedException;
import org.integratedmodelling.klab.hub.repository.MongoLeverRepository;
import org.integratedmodelling.klab.hub.repository.TokenRepository;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenLever;
import org.integratedmodelling.klab.hub.tokens.services.commands.CreateLeverAuthenticationToken;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;
import org.springframework.stereotype.Service;

@Service
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package org.integratedmodelling.klab.hub.tokens.services;

import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.api.TokenType;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;

public interface TokenBaseService<T extends TokenAuthentication> {
public T createToken(String username, TokenType verify);
public abstract void deleteToken(String tokenString);
public abstract void deleteToken(String tokenString);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.integratedmodelling.klab.hub.tokens.services;

import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.payload.LoginResponse;
import org.integratedmodelling.klab.hub.payload.LogoutResponse;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.springframework.stereotype.Service;

@Service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@
import java.util.Optional;

import org.integratedmodelling.klab.exceptions.KlabException;
import org.integratedmodelling.klab.hub.api.TokenAuthentication;
import org.integratedmodelling.klab.hub.api.JwtToken;
import org.integratedmodelling.klab.hub.api.ProfileResource;
import org.integratedmodelling.klab.hub.api.TokenType;
import org.integratedmodelling.klab.hub.api.User;
import org.integratedmodelling.klab.hub.commands.CreateUserAuthenticationToken;
import org.integratedmodelling.klab.hub.commands.DeleteAuthenticationToken;
import org.integratedmodelling.klab.hub.commands.GetUserProfile;
import org.integratedmodelling.klab.hub.exception.AuthenticationFailedException;
import org.integratedmodelling.klab.hub.exception.LoginFailedExcepetion;
Expand All @@ -20,6 +16,10 @@
import org.integratedmodelling.klab.hub.payload.LogoutResponse;
import org.integratedmodelling.klab.hub.repository.TokenRepository;
import org.integratedmodelling.klab.hub.repository.UserRepository;
import org.integratedmodelling.klab.hub.tokens.services.bean.TokenAuthentication;
import org.integratedmodelling.klab.hub.tokens.services.commands.CreateUserAuthenticationToken;
import org.integratedmodelling.klab.hub.tokens.services.commands.DeleteAuthenticationToken;
import org.integratedmodelling.klab.hub.tokens.services.enums.TokenType;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
Expand Down
Loading

0 comments on commit 01a6284

Please sign in to comment.