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

automately.core.data.User Maven / Gradle / Ivy

package automately.core.data;

import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import io.jcluster.core.data.DataType;
import io.jsync.json.JsonObject;
import io.jsync.json.impl.Json;
import io.jsync.utils.CryptoUtils;
import io.jsync.utils.Token;

import java.io.IOException;
import java.util.Date;
import java.util.UUID;

/**
 * The User class is a DataType used by JCluster.
 * It is used for all operations in the Automately Cluster such as
 * file store, job execution, and authentication..
 */
public class User extends DataType {

    public String username;
    public String key = CryptoUtils.calculateHmacSHA1(UUID.randomUUID().toString(), UUID.randomUUID().toString());
    public String publicKey = CryptoUtils.calculateHmacSHA1(UUID.randomUUID().toString(), UUID.randomUUID().toString());
    public boolean admin = false;
    public boolean enabled = true;
    public Date created = new Date();
    private String token = Token.generateToken().toHex();

    @Override
    public void writeData(ObjectDataOutput dataOutput) throws IOException {
        dataOutput.writeUTF(token);
        dataOutput.writeUTF(username);
        dataOutput.writeUTF(key);
        dataOutput.writeUTF(publicKey);
        dataOutput.writeBoolean(admin);
        dataOutput.writeBoolean(enabled);
        dataOutput.writeObject(created);
    }

    @Override
    public void readData(ObjectDataInput dataInput) throws IOException {
        token = dataInput.readUTF();
        username = dataInput.readUTF();
        key = dataInput.readUTF();
        publicKey = dataInput.readUTF();
        admin = dataInput.readBoolean();
        enabled = dataInput.readBoolean();
        created = dataInput.readObject();
    }

    public String token() {
        return token;
    }

    @Override
    public void loadJson(JsonObject json) {
        if (json != null) {
            this.token = json.getString("token", this.token);
            this.admin = json.getBoolean("admin", this.admin);
            this.username = json.getString("username", this.username);
            this.key = json.getString("key", this.key);
            this.publicKey = json.getString("publicKey", this.publicKey);
            this.enabled = json.getBoolean("enabled", this.enabled);
            // For some reason data didn't work out too well
            if(json.getValue("created") instanceof JsonObject &&
                    json.getObject("created", new JsonObject()).containsField("$numberLong")){
                json.putValue("created", Long.valueOf(json.getObject("created", new JsonObject()).getValue("$numberLong")));
            }
            this.created = new Date(json.getLong("created", created.getTime()));
        }
    }

    @Override
    public JsonObject toJson() {
        JsonObject ret = new JsonObject(Json.encode(this));
        ret.putString("token", token);
        ret.putNumber("created", created.getTime());
        return ret;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy