All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.payneteasy.superfly.api.SSOService Maven / Gradle / Ivy

package com.payneteasy.superfly.api;

import java.util.List;

/**
 * Service for SSO communication.
 *
 * @author Roman Puchkovskiy
 * @since 1.0
 */
public interface SSOService {
    /**
     * Attempts to authenticate user from the current system using the supplied
     * username and password. If successful, returns user object, else returns
     * null.
     *
     * @param username        username to use when authenticating
     * @param password        password to use when authenticating
     * @param authRequestInfo additional info about authentication request
     * @return user object on success or null when authentication failed (for
     * instance, no such user, or password mismatched, or user is
     * blocked...)
     */
    SSOUser authenticate(String username, String password, AuthenticationRequestInfo authRequestInfo);

    /**
     * Returns the same data as if user was successfully authenticated,
     * but no actual authentication is made. This could be useful for
     * impersonation feature.
     *
     * @param username            username to get user
     * @param subsystemIdentifier identifier of a subsystem
     * @return user object on success or null when retrieval fails (for
     * instance, no such user)
     * @since 1.5
     */
    SSOUser pseudoAuthenticate(String username, String subsystemIdentifier);

    /**
     * Sends data about this system to SSO server.
     *
     * @param subsystemIdentifier identifier of this system (it's just a hint for SSO server)
     * @param actionDescriptions  descriptions of actions of this system
     */
    void sendSystemData(String subsystemIdentifier, ActionDescription[] actionDescriptions);

    /**
     * Returns a list of users with their actions granted through role with the
     * given principal.
     *
     * @param subsystemIdentifier identifier of the subsystem from which users will be obtained
     * @return users with actions
     * @since 1.1
     */
    List getUsersWithActions(String subsystemIdentifier);

    /**
     * Authenticates a user using an HOTP implementation configured on the
     * Superfly server.
     *
     * @param username name of the user to authenticate
     * @param hotp     one-time password
     * @return true if authentication is successful
     * @since 1.2
     */
    boolean authenticateUsingHOTP(String username, String hotp);

    /**
     * Registers user and gives him requested principal.
     * User is created in incomplete state. In that state, if
     * a registration with the same username is made, existing user
     * is destroyed. To complete a user, call #completeUser() method.
     * Also, user is completed when he logs in.
     *
     * @param username      name of the user
     * @param password      password of the user
     * @param email         email of the user
     * @param subsystemHint hint to the identifier of a subsystem from which roles will be
     *                      taken
     * @param roleGrants    which roles to grant
     * @throws UserExistsException       if user with such a name already exists
     * @throws PolicyValidationException
     * @throws BadPublicKeyException
     * @throws MessageSendException
     * @see RoleGrantSpecification
     * @see #completeUser(String)
     * @deprecated in favor of {@link #registerUser(UserRegisterRequest)}
     * @since 1.1
     */
    @Deprecated
    void registerUser(String username, String password, String email, String subsystemHint,
            RoleGrantSpecification[] roleGrants,
            String name, String surname, String secretQuestion, String secretAnswer,
            String publicKey, String organization)
            throws UserExistsException, PolicyValidationException,
            BadPublicKeyException, MessageSendException;

    /**
     * Registers user and gives him requested principal.
     * User is created in incomplete state. In that state, if
     * a registration with the same username is made, existing user
     * is destroyed. To complete a user, call #completeUser() method.
     * Also, user is completed when he logs in.
     *
     * @param registerRequest register request containing all the
     *                        data needed to register a user
     * @throws UserExistsException       if user with such a name already exists
     * @throws PolicyValidationException
     * @throws BadPublicKeyException
     * @throws MessageSendException
     * @see RoleGrantSpecification
     * @see #completeUser(String)
     * @since 1.6-3
     */
    void registerUser(UserRegisterRequest registerRequest)
            throws UserExistsException, PolicyValidationException,
            BadPublicKeyException, MessageSendException;

    /**
     * @param userName user name
     * @param password password
     * @since 1.2
     */
    void changeTempPassword(String userName, String password) throws PolicyValidationException;

    /**
     * Returns a description of the given user.
     *
     * @param username username
     * @return description or null if user is not found
     * @since 1.2-4
     */
    UserDescription getUserDescription(String username);

    /**
     * Resets an OTP table and sends it to the user via email in encrypted form
     * (if HOTPProvider supports exporting in binary form).
     * Subsystem to use when sending is determined automatically (for instance,
     * by certificate of a calling subsystem).
     *
     * @param username name of the user
     * @throws UserNotFoundException if no such user
     * @throws MessageSendException  if error while sending message occurs
     * @since 1.2-4
     */
    void resetAndSendOTPTable(String username) throws UserNotFoundException, MessageSendException;

    /**
     * Resets an OTP table and sends it to the user via email in encrypted form
     * (if HOTPProvider supports exporting in binary form).
     *
     * @param subsystemIdentifier identifier of subsystem
     *                            which smtp server to user when sending message
     * @param username            name of the user
     * @throws UserNotFoundException if no such user
     * @throws MessageSendException  if error while sending message occurs
     * @since 1.3-1
     */
    void resetAndSendOTPTable(String subsystemIdentifier,
            String username) throws UserNotFoundException, MessageSendException;

    /**
     * Updates user's fields.
     *
     * @param user user fields
     * @throws UserNotFoundException if user with such a name is not found
     * @throws BadPublicKeyException if public key is not valid
     * @since 1.2-4
     */
    void updateUserDescription(UserDescription user) throws UserNotFoundException, BadPublicKeyException;

    /**
     * Resets user's password if policy requires this.
     *
     * @param username    name of the user
     * @param newPassword new password
     * @throws UserNotFoundException     if not such user exists
     * @throws PolicyValidationException if password is bad
     * @since 1.2-4
     */
    void resetPassword(String username, String newPassword) throws UserNotFoundException, PolicyValidationException;

    /**
     * Resets user's password if policy requires this.
     *
     * @param reset describes password reset
     * @throws UserNotFoundException     if not such user exists
     * @throws PolicyValidationException if password is bad
     * @since 1.6-3
     */
    void resetPassword(PasswordReset reset) throws UserNotFoundException, PolicyValidationException;

    /**
     * Finds users by list of their logins and returns their status information.
     *
     * @param userNames list of user names (logins)
     * @return user statuses
     * @since 1.3-5
     */
    List getUserStatuses(List userNames);

    /**
     * Exchanges subsystem token to SSOUser. After this operation
     * returns, subsystem token is not valid anymore and cannot
     * be used for exchanging.
     *
     * @param subsystemToken subsystem token
     * @return SSOUser or null if token does not exist, expired or
     * already used
     * @since 1.4
     */
    SSOUser exchangeSubsystemToken(String subsystemToken);

    /**
     * Touches sessions: that is, updates their access time to avoid
     * removal. If a session was issued by an SSO session, the latter
     * is touched too.
     *
     * @param sessionIds IDs of sessions to touch
     */
    void touchSessions(List sessionIds);

    /**
     * Makes a user complete. This protects a registered user
     * from being overwritten.
     *
     * @param username name of the user to complete
     * @see #registerUser(UserRegisterRequest)
     * @since 1.5
     */
    void completeUser(String username);

    /**
     * Revokes from a user all his roles and replaces them with a given role.
     *
     * @param username name of the user to work with
     * @param newRole  role to grant
     * @deprecated in favor of {@link #changeUserRole(String, String, String)}
     */
    @Deprecated
    void changeUserRole(String username, String newRole);

    /**
     * Revokes from a user all his roles and replaces them with a given role.
     *
     * @param username      name of the user to work with
     * @param newRole       role to grant
     * @param subsystemHint hint to determine the affected subsystem
     */
    void changeUserRole(String username, String newRole, String subsystemHint);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy