FwCookie.java 3.83 KB
package cn.fw.freya.model.data;

import cn.fw.freya.utils.DateUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.hibernate.Hibernate;
import org.openqa.selenium.Cookie;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Objects;

/**
 * @author null
 * @date 2021-11-12 09:06
 * @description cookie
 */
@Data
@Entity
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "cookie", indexes = {@Index(columnList = "accountNo")})
public class FwCookie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    /**
     * 账户号
     */
    private String accountNo;
    /**
     * 账户类型 (1:快手, 2:抖音, 3:懂车帝, 4:Bilibili)
     */
    private Integer type;
    /**
     * cookie名称
     */
    private String name;
    /**
     * cookie值
     */
    @Column(length = 2000)
    private String value;
    /**
     * cookie的作用域
     */
    private String domain;
    /**
     * 过期时间
     */
    private LocalDateTime expiryDate;
    /**
     * 接口路径
     */
    private String path;
    /**
     * 是否httpOnly
     */
    private Boolean httpOnly;
    /**
     * 是否安全的
     */
    private Boolean secure;
    /**
     * 版本号
     */
    private Integer version;
    /**
     * cookie创建时间
     */
    private LocalDateTime createTime;

    /**
     * 数据库cookies->seleniumCookie
     *
     * @return
     */
    public Cookie seleniumCookie() {
        return new Cookie.Builder(this.name, this.value)
                .path(this.path)
                .expiresOn(DateUtil.localDateTime2Date(Objects.nonNull(this.expiryDate) ? this.expiryDate : LocalDateTime.now().plusDays(1)))
                .domain(this.domain)
                .isSecure(this.secure)
                .isHttpOnly(this.httpOnly)
                .build();
    }

    public BasicClientCookie httpClientCookie() {
        BasicClientCookie cookie = new BasicClientCookie(this.name, this.value);
        cookie.setDomain(this.domain);
        cookie.setSecure(this.secure);
        cookie.setExpiryDate(DateUtil.localDateTime2Date(this.expiryDate));
        cookie.setPath(this.path);
        cookie.setVersion(this.version);
        cookie.setAttribute(BasicClientCookie.PATH_ATTR, this.path);
        cookie.setAttribute(BasicClientCookie.DOMAIN_ATTR, this.domain);
        return cookie;
    }

    /**
     * WebDriver获取到的cookies->DB
     *
     * @param cookie    WebDriver获取到的cookie
     * @param accountNo 账户号
     * @return cookies
     */
    public static FwCookie toDb(Cookie cookie, String accountNo, Integer type) {
        FwCookie fwCookie = new FwCookie();
        fwCookie.setAccountNo(accountNo);
        fwCookie.setType(type);
        fwCookie.setDomain(cookie.getDomain());
        fwCookie.setExpiryDate(DateUtil.date2LocalDateTime(cookie.getExpiry()));
        fwCookie.setName(cookie.getName());
        fwCookie.setValue(cookie.getValue());
        fwCookie.setPath(cookie.getPath());
        fwCookie.setSecure(cookie.isSecure());
        fwCookie.setCreateTime(LocalDateTime.now());
        fwCookie.setHttpOnly(cookie.isHttpOnly());
        return fwCookie;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) {
            return false;
        }
        FwCookie fwCookie = (FwCookie) o;
        return id != null && Objects.equals(id, fwCookie.id);
    }

    @Override
    public int hashCode() {
        return getClass().hashCode();
    }
}