jease.cms.domain.Access.java Source code

Java tutorial

Introduction

Here is the source code for jease.cms.domain.Access.java

Source

/*
Copyright (C) 2016 maik.jablonski@jease.org
    
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package jease.cms.domain;

import java.util.Date;

import jfix.util.Crypts;

import org.apache.commons.lang3.StringUtils;

/**
 * Access-Object which allows to protect containers with a stored combination of
 * login and password.
 * 
 * Please note: the Access-Object itself doesn't enforce any security on its
 * own, but relies on appropriate code in the public view (site).
 */
public class Access extends Content {

    private String login;
    private String password;
    private Date start;
    private Date stop;

    public Access() {
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public boolean hasPassword(String password) {
        return StringUtils.equals(this.password, encrypt(password));
    }

    public void setPassword(String password) {
        if (!StringUtils.equals(this.password, password)) {
            this.password = encrypt(password);
        }
    }

    protected String encrypt(String input) {
        return StringUtils.isBlank(input) ? input : Crypts.md5(input.getBytes());
    }

    public Date getStart() {
        return start;
    }

    public void setStart(Date start) {
        this.start = start;
    }

    public Date getStop() {
        return stop;
    }

    public void setStop(Date stop) {
        this.stop = stop;
    }

    public boolean isGuarding() {
        if (start == null && stop == null) {
            return true;
        }
        Date now = new Date();
        if (start != null && stop != null) {
            if (start.before(stop)) {
                return start.before(now) && stop.after(now);
            } else {
                return start.before(now) || stop.after(now);
            }
        }
        if (start != null && stop == null) {
            return start.before(now);
        }
        if (start == null && stop != null) {
            return stop.after(now);
        }
        return false;
    }

    public boolean approves(String login, String password) {
        return StringUtils.equals(getLogin(), login) && hasPassword(password);
    }

    public boolean isPage() {
        return false;
    }

    public long getSize() {
        return super.getSize() + getLogin().length() + getPassword().length();
    }

    public StringBuilder getFulltext() {
        return super.getFulltext().append("\n").append(login);
    }

    public void replace(String target, String replacement) {
        super.replace(target, replacement);
        setLogin(getLogin().replace(target, replacement));
    }

    public Access copy(boolean recursive) {
        Access access = (Access) super.copy(recursive);
        access.setLogin(getLogin());
        access.setPassword(getPassword());
        return access;
    }
}