Class User

    • Field Detail

      • MAX_PASSWORD_LENGTH

        public static final int MAX_PASSWORD_LENGTH
        Maximum password length.
        See Also:
        Constant Field Values
    • Constructor Detail

      • User

        public User()
        No-args constructor.
      • User

        public User​(String id)
        Default constructor.
        Parameters:
        id - the id
    • Method Detail

      • getTokenSecret

        public String getTokenSecret()
        Token secret - used for generating JWT tokens. Changing this secret would invalidate all existing user tokens. A kind of global "logout".
        Returns:
        a random string
      • setTokenSecret

        public void setTokenSecret​(String tokenSecret)
        Sets the token secret.
        Parameters:
        tokenSecret - a random string
      • getPicture

        public String getPicture()
        The profile picture URL.
        Returns:
        a URL or null
      • setPicture

        public void setPicture​(String picture)
        Sets the profile picture URL.
        Parameters:
        picture - the picture URL.
      • getActive

        public Boolean getActive()
        Returns true if this account is active.
        Returns:
        true if active
      • setActive

        public void setActive​(Boolean active)
        Sets the account active.
        Parameters:
        active - true if active
      • getTwoFA

        public Boolean getTwoFA()
        Returns:
        true if 2FA is enabled
      • setTwoFA

        public void setTwoFA​(Boolean twoFA)
        Sets 2FA enabled/disabled.
        Parameters:
        twoFA - true if 2FA is enabled
      • getTwoFAkey

        public String getTwoFAkey()
        Returns:
        the 2FA secret key. Used for checking the TOTP code.
      • setTwoFAkey

        public void setTwoFAkey​(String twoFAkey)
        Sets the 2FA secret key.
        Parameters:
        twoFAkey - secret key
      • getTwoFAbackupKeyHash

        public String getTwoFAbackupKeyHash()
        Returns:
        the hashed backup key (shown only once). Used for disabling 2FA.
      • setTwoFAbackupKeyHash

        public void setTwoFAbackupKeyHash​(String twoFAbackupKeyHash)
        Sets the 2FA backup key hash.
        Parameters:
        twoFAbackupKeyHash - bcrypt hash
      • getGroups

        public String getGroups()
        Returns the security groups for this user.
        Returns:
        the groups string
      • setGroups

        public void setGroups​(String groups)
        Sets the security groups for this user.
        Parameters:
        groups - the groups string
      • getIdentifier

        public String getIdentifier()
        Returns the main identifier for this user. An identifier is basically a unique username that identifies a user.
        Returns:
        the main identifier
      • setIdentifier

        public void setIdentifier​(String identifier)
        Sets the main identifier.
        Parameters:
        identifier - the main identifier
      • getEmail

        public String getEmail()
        The user's email.
        Returns:
        email
      • setEmail

        public void setEmail​(String email)
        Sets the email.
        Parameters:
        email - email
      • getCurrency

        public String getCurrency()
        The user's currency preference.
        Returns:
        a currency 3-letter code in uppercase
      • setCurrency

        public void setCurrency​(String currency)
        Sets a preferred currency. Default is "EUR".
        Parameters:
        currency - a 3-letter currency code
      • resetTokenSecret

        public void resetTokenSecret()
        Generates a new token secret. This is whould be equivalent to "logout everywhere".
      • canModify

        public boolean canModify​(ParaObject obj)
        Note: this method assumes that child objects can be modified by their parents. This might not work for special cases where a parent has no rights over a child.
        Parameters:
        obj - an object
        Returns:
        true if the user is the creator or parent of this object or an admin user
      • attachIdentifier

        public void attachIdentifier​(String identifier)
        Attaches a new identifier to this user.
        Parameters:
        identifier - a new identifier
      • detachIdentifier

        public void detachIdentifier​(String identifier)
        Detaches a secondary identifier which is not already used by this user.
        Parameters:
        identifier - an attached identifier
      • isFacebookUser

        public boolean isFacebookUser()
        Is the main identifier a Facebook id.
        Returns:
        true if user is signed in with Facebook
      • isGooglePlusUser

        public boolean isGooglePlusUser()
        Is the main identifier a Google+ id.
        Returns:
        true if user is signed in with Google+
      • isLinkedInUser

        public boolean isLinkedInUser()
        Is the main identifier a LinkedIn id.
        Returns:
        true if user is signed in with LinkedIn
      • isTwitterUser

        public boolean isTwitterUser()
        Is the main identifier a Twitter id.
        Returns:
        true if user is signed in with Twitter
      • isGitHubUser

        public boolean isGitHubUser()
        Is the main identifier a GitHub id.
        Returns:
        true if user is signed in with GitHub
      • isMicrosoftUser

        public boolean isMicrosoftUser()
        Is the main identifier a Microsoft/Windows account id.
        Returns:
        true if user is signed in with a Microsoft account
      • isSlackUser

        public boolean isSlackUser()
        Is the main identifier a Slack account id.
        Returns:
        true if user is signed in with a Slack account
      • isMattermostUser

        public boolean isMattermostUser()
        Is the main identifier a Mattermost account id.
        Returns:
        true if user is signed in with a Mattermost account
      • isAmazonUser

        public boolean isAmazonUser()
        Is the main identifier a Amazon account id.
        Returns:
        true if user is signed in with a Amazon account
      • isLDAPUser

        public boolean isLDAPUser()
        Is the main identifier a LDAP account.
        Returns:
        true if user is signed in with a LDAP account
      • isSAMLUser

        public boolean isSAMLUser()
        Is the main identifier a SAML account.
        Returns:
        true if user is signed in with a SAML account
      • isOAuth2User

        public boolean isOAuth2User()
        Is the main identifier from a generic OAuth 2.0/OpenID Connect provider.
        Returns:
        true if user is signed in with a generic OAauth 2.0 account
      • isAdmin

        public boolean isAdmin()
        Checks for admin rights.
        Returns:
        true if user has admin rights
      • isModerator

        public boolean isModerator()
        Checks for moderator rights.
        Returns:
        true if user has mod rights
      • getIdentityProvider

        public String getIdentityProvider()
        Returns the name of the identity provider.
        Returns:
        "facebook", "google"... etc.
      • getPassword

        public String getPassword()
        The password. A transient field used for validation.
        Returns:
        the password.
      • setPassword

        public void setPassword​(String password)
        Sets a password.
        Parameters:
        password - a password
      • getIdpIdToken

        public String getIdpIdToken()
        Used for storing the ID token from an OpenID Connect/OAuth 2.0 identity provider.
        Returns:
        an ID token (JWT is always assumed to be the format)
      • setIdpIdToken

        public void setIdpIdToken​(String idpIdToken)
        Sets the IDP ID token.
        Parameters:
        idpIdToken - a token
      • getIdpAccessToken

        public String getIdpAccessToken()
        Used for storing the access token from an OpenID Connect/OAuth 2.0 identity provider.
        Returns:
        a JWT access token (JWT is always assumed to be the format)
      • setIdpAccessToken

        public void setIdpAccessToken​(String idpAccessToken)
        Sets the IDP access token.
        Parameters:
        idpAccessToken - a token
      • getIdpRefreshToken

        public String getIdpRefreshToken()
        Stores the refresh token from the identity provider.
        Returns:
        a JWT refresh token
      • setIdpRefreshToken

        public void setIdpRefreshToken​(String idpRefreshToken)
        Sets the refresh token.
        Parameters:
        idpRefreshToken - a refresh token
      • getIdpIdTokenPayload

        public String getIdpIdTokenPayload()
        Returns the JWT payload for the ID token coming from the IDP. Used for delegating user attributes data to clients. This must be a Base64-encoded JSON string.
        Returns:
        the payload part in Base64
      • getIdpAccessTokenPayload

        public String getIdpAccessTokenPayload()
        Returns the JWT payload for the access token coming from the IDP. Used for delegating user attributes data to clients. This must be a Base64-encoded JSON string.
        Returns:
        the payload part in Base64
      • readUserForIdentifier

        public static final User readUserForIdentifier​(User u)
        Returns a user object for a given identifier.
        Parameters:
        u - a user having a valid identifier set.
        Returns:
        a user or null if no user is found for this identifier
      • passwordMatches

        public static final boolean passwordMatches​(User u)
                                             throws LimitExceededException
        Checks if a user has entered the correct password. Compares password hashes.
        Parameters:
        u - a user with a set password
        Returns:
        true if password matches the one in the data store
        Throws:
        LimitExceededException - if rate limit is exceeded when password doesn't match.
      • generatePasswordResetToken

        public final String generatePasswordResetToken()
        Generates a new password reset token. Sent via email for pass reset.
        Returns:
        the pass reset token
      • resetPassword

        public final boolean resetPassword​(String token,
                                           String newpass)
        Changes the user password permanently.
        Parameters:
        token - the reset token. see generatePasswordResetToken()
        newpass - the new password
        Returns:
        true if successful
      • generateEmailConfirmationToken

        public String generateEmailConfirmationToken()
        Generates a new email confirmation token. Sent via email for user activation.
        Returns:
        a Base64 encoded UUID
      • activateWithEmailToken

        public final boolean activateWithEmailToken​(String token)
        Activates a user if a given token matches the one stored.
        Parameters:
        token - the email confirmation token. see generateEmailConfirmationToken()
        Returns:
        true if successful
      • isValidPasswordResetToken

        public final boolean isValidPasswordResetToken​(String token)
        Validates a token sent via email for password reset.
        Parameters:
        token - a token
        Returns:
        true if valid
      • isValidEmailConfirmationToken

        public final boolean isValidEmailConfirmationToken​(String token)
        Validates a token sent for email confirmation.
        Parameters:
        token - a token
        Returns:
        true if valid
      • getId

        public final String getId()
        Description copied from interface: ParaObject
        The id of an object. Usually an autogenerated unique string of numbers.
        Specified by:
        getId in interface ParaObject
        Returns:
        the id
      • setId

        public final void setId​(String id)
        Description copied from interface: ParaObject
        Sets a new id. Must not be null or empty.
        Specified by:
        setId in interface ParaObject
        Parameters:
        id - the new id
      • setType

        public final void setType​(String type)
        Description copied from interface: ParaObject
        Sets a new object type. Must not be null or empty.
        Specified by:
        setType in interface ParaObject
        Parameters:
        type - a new type
      • getAppid

        public String getAppid()
        Description copied from interface: ParaObject
        The application name. Added to support multiple separate apps. Every object must belong to an app.
        Specified by:
        getAppid in interface ParaObject
        Returns:
        the app id (name). default: para
      • setAppid

        public void setAppid​(String appid)
        Description copied from interface: ParaObject
        Sets a new app name. Must not be null or empty.
        Specified by:
        setAppid in interface ParaObject
        Parameters:
        appid - the new app id (name)
      • getTags

        public List<String> getTags()
        Description copied from interface: ParaObject
        The tags associated with this object. Tags must not be null or empty.
        Specified by:
        getTags in interface ParaObject
        Returns:
        a set of tags, or an empty set
        See Also:
        Tag
      • setTags

        public void setTags​(List<String> tags)
        Description copied from interface: ParaObject
        Merges the given tags with existing tags.
        Specified by:
        setTags in interface ParaObject
        Parameters:
        tags - the additional tags, or clears all tags if set to null
      • getStored

        public Boolean getStored()
        Description copied from interface: ParaObject
        Boolean flag which controls whether this object is stored in the database or not. Default is true.
        Specified by:
        getStored in interface ParaObject
        Returns:
        true if this object is stored in DB.
      • setStored

        public void setStored​(Boolean stored)
        Description copied from interface: ParaObject
        Sets the "isStored" flag.
        Specified by:
        setStored in interface ParaObject
        Parameters:
        stored - when set to true, object is stored in DB.
      • getIndexed

        public Boolean getIndexed()
        Description copied from interface: ParaObject
        Boolean flag which controls whether this object is indexed by the search engine. Default is true.
        Specified by:
        getIndexed in interface ParaObject
        Returns:
        true if this object is indexed
      • setIndexed

        public void setIndexed​(Boolean indexed)
        Description copied from interface: ParaObject
        Sets the "isIndexed" flag.
        Specified by:
        setIndexed in interface ParaObject
        Parameters:
        indexed - when set to true, object is indexed.
      • getCached

        public Boolean getCached()
        Description copied from interface: ParaObject
        Boolean flag which controls whether this object is cached. Default is true.
        Specified by:
        getCached in interface ParaObject
        Returns:
        true if this object is cached on update() and create().
      • setCached

        public void setCached​(Boolean cached)
        Description copied from interface: ParaObject
        Sets the "isCached" flag.
        Specified by:
        setCached in interface ParaObject
        Parameters:
        cached - when set to true, object is cached.
      • getTimestamp

        public Long getTimestamp()
        Description copied from interface: ParaObject
        The time when the object was created, in milliseconds.
        Specified by:
        getTimestamp in interface ParaObject
        Returns:
        the timestamp of creation
      • setTimestamp

        public void setTimestamp​(Long timestamp)
        Description copied from interface: ParaObject
        Sets the timestamp.
        Specified by:
        setTimestamp in interface ParaObject
        Parameters:
        timestamp - a new timestamp in milliseconds.
      • getCreatorid

        public String getCreatorid()
        Description copied from interface: ParaObject
        The id of the user who created this. Should point to a User id.
        Specified by:
        getCreatorid in interface ParaObject
        Returns:
        the id or null
      • setCreatorid

        public void setCreatorid​(String creatorid)
        Description copied from interface: ParaObject
        Sets a new creator id. Must not be null or empty.
        Specified by:
        setCreatorid in interface ParaObject
        Parameters:
        creatorid - a new id
      • getName

        public final String getName()
        Description copied from interface: ParaObject
        The name of the object. Can be anything.
        Specified by:
        getName in interface ParaObject
        Returns:
        the name. default: [type id]
      • setName

        public final void setName​(String name)
        Description copied from interface: ParaObject
        Sets a new name. Must not be null or empty.
        Specified by:
        setName in interface ParaObject
        Parameters:
        name - the new name
      • getPlural

        public String getPlural()
        Description copied from interface: ParaObject
        The plural name of the object. For example: user - users
        Specified by:
        getPlural in interface ParaObject
        Returns:
        the plural name
      • getParentid

        public String getParentid()
        Description copied from interface: ParaObject
        The id of the parent object.
        Specified by:
        getParentid in interface ParaObject
        Returns:
        the id of the parent or null
      • setParentid

        public void setParentid​(String parentid)
        Description copied from interface: ParaObject
        Sets a new parent id. Must not be null or empty.
        Specified by:
        setParentid in interface ParaObject
        Parameters:
        parentid - a new id
      • getUpdated

        public Long getUpdated()
        Description copied from interface: ParaObject
        The last time this object was updated. Timestamp in ms.
        Specified by:
        getUpdated in interface ParaObject
        Returns:
        timestamp in milliseconds
      • setUpdated

        public void setUpdated​(Long updated)
        Description copied from interface: ParaObject
        Sets the last updated timestamp.
        Specified by:
        setUpdated in interface ParaObject
        Parameters:
        updated - a new timestamp
      • exists

        public boolean exists()
        Description copied from interface: ParaObject
        Checks if an object is stored in the data store.
        Specified by:
        exists in interface ParaObject
        Returns:
        true if the object is persisted to the data store.
        See Also:
        DAO.read(java.lang.String)
      • voteUp

        public boolean voteUp​(String userid)
        Description copied from interface: Votable
        Upvotes the object.
        Specified by:
        voteUp in interface Votable
        Parameters:
        userid - id of voter
        Returns:
        true if successful
      • voteDown

        public boolean voteDown​(String userid)
        Description copied from interface: Votable
        Downvotes the object.
        Specified by:
        voteDown in interface Votable
        Parameters:
        userid - id of voter
        Returns:
        true if successful
      • getVotes

        public Integer getVotes()
        Description copied from interface: Votable
        Returns the total sum of all votes for this object. For example: (+6) + (-4) = 2
        Specified by:
        getVotes in interface Votable
        Returns:
        the total sum of votes
      • setVotes

        public void setVotes​(Integer votes)
        Description copied from interface: Votable
        Sets the total votes for this object.
        Specified by:
        setVotes in interface Votable
        Parameters:
        votes - the number of votes
      • getVersion

        public Long getVersion()
        Description copied from interface: ParaObject
        Returns the version number for this object. Used primarily for optimistic locking.
        Specified by:
        getVersion in interface ParaObject
        Returns:
        a positive number, 0 if unused or -1, indicating a failed update.
      • setVersion

        public void setVersion​(Long version)
        Description copied from interface: ParaObject
        Sets the version of this object. This value should come from the database.
        Specified by:
        setVersion in interface ParaObject
        Parameters:
        version - a positive number, different than the current value of the version field
      • countLinks

        public Long countLinks​(String type2)
        Description copied from interface: Linkable
        Count the total number of links between this object and another type of object.
        Specified by:
        countLinks in interface Linkable
        Parameters:
        type2 - the other type of object
        Returns:
        the number of links
      • getLinks

        public List<Linker> getLinks​(String type2,
                                     Pager... pager)
        Description copied from interface: Linkable
        Returns all links between this type object and another type of object.
        Specified by:
        getLinks in interface Linkable
        Parameters:
        type2 - the other type of object
        pager - a Pager
        Returns:
        a list of Linker objects in a many-to-many relationship with this object.
      • isLinked

        public boolean isLinked​(String type2,
                                String id2)
        Description copied from interface: Linkable
        Checks if this object is linked to another.
        Specified by:
        isLinked in interface Linkable
        Parameters:
        type2 - the other type
        id2 - the other id
        Returns:
        true if the two are linked
      • isLinked

        public boolean isLinked​(ParaObject toObj)
        Description copied from interface: Linkable
        Checks if a given object is linked to this one.
        Specified by:
        isLinked in interface Linkable
        Parameters:
        toObj - the other object
        Returns:
        true if linked
      • link

        public String link​(String id2)
        Description copied from interface: Linkable
        Links an object to this one in a many-to-many relationship. Only a link is created. Objects are left untouched. The type of the second object is automatically determined on read.
        Specified by:
        link in interface Linkable
        Parameters:
        id2 - the other id
        Returns:
        the id of the Linker object that is created
      • unlink

        public void unlink​(String type,
                           String id2)
        Description copied from interface: Linkable
        Unlinks an object from this one. Only a link is deleted. Objects are left untouched.
        Specified by:
        unlink in interface Linkable
        Parameters:
        type - the other type
        id2 - the other id
      • unlinkAll

        public void unlinkAll()
        Description copied from interface: Linkable
        Unlinks all objects that are linked to this one. Deletes all Linker objects. Only the links are deleted. Objects are left untouched.
        Specified by:
        unlinkAll in interface Linkable
      • countChildren

        public Long countChildren​(String type)
        Description copied from interface: Linkable
        Count the total number of child objects for this object.
        Specified by:
        countChildren in interface Linkable
        Parameters:
        type - the other type of object
        Returns:
        the number of links
      • getChildren

        public <P extends ParaObjectList<P> getChildren​(String type,
                                                          Pager... pager)
        Description copied from interface: Linkable
        Returns all child objects linked to this object.
        Specified by:
        getChildren in interface Linkable
        Type Parameters:
        P - the type of children
        Parameters:
        type - the type of children to look for
        pager - a Pager
        Returns:
        a list of ParaObject in a one-to-many relationship with this object
      • getChildren

        public <P extends ParaObjectList<P> getChildren​(String type,
                                                          String field,
                                                          String term,
                                                          Pager... pager)
        Description copied from interface: Linkable
        Returns all child objects linked to this object.
        Specified by:
        getChildren in interface Linkable
        Type Parameters:
        P - the type of children
        Parameters:
        type - the type of children to look for
        field - the field name to use as filter
        term - the field value to use as filter
        pager - a Pager
        Returns:
        a list of ParaObject in a one-to-many relationship with this object
      • findChildren

        public <P extends ParaObjectList<P> findChildren​(String type,
                                                           String query,
                                                           Pager... pager)
        Description copied from interface: Linkable
        Search through all child objects. Only searches child objects directly connected to this parent via the parentid field.
        Specified by:
        findChildren in interface Linkable
        Type Parameters:
        P - the type of children
        Parameters:
        type - the type of children to look for
        query - a query string
        pager - a Pager
        Returns:
        a list of ParaObject in a one-to-many relationship with this object
      • deleteChildren

        public void deleteChildren​(String type)
        Description copied from interface: Linkable
        Deletes all child objects permanently.
        Specified by:
        deleteChildren in interface Linkable
        Parameters:
        type - the children's type.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object