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

io.vertx.tp.ke.refine.KeCache Maven / Gradle / Ivy

package io.vertx.tp.ke.refine;

import io.vertx.core.Future;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.User;
import io.vertx.ext.web.Session;
import io.vertx.tp.error._409SessionConflictException;
import io.vertx.tp.ke.cv.KeField;
import io.vertx.up.unity.Ux;
import io.vertx.up.commune.Envelop;
import io.vertx.up.exception.WebException;
import io.vertx.tp.plugin.session.SessionClient;
import io.vertx.tp.plugin.session.SessionInfix;
import io.vertx.up.util.Ut;

import java.util.Objects;
import java.util.function.BiFunction;

/*
 * Key generated for uniform platform
 */
class KeCache {

    private static final SessionClient CLIENT = SessionInfix.getClient();

    static String keySession(final String method, final String uri) {
        return "session-" + method + ":" + uri;
    }

    static String keyEnvelop(final Envelop envelop, final BiFunction executor) {
        final User user = envelop.user();
        if (Objects.nonNull(user)) {
            final JsonObject principle = user.principal();
            if (!Ut.isNil(principle)) {
                /*
                 * Process for metadata in principle here
                 */
                final JsonObject metadata = principle.getJsonObject(KeField.METADATA);
                final String uri = metadata.getString(KeField.URI_REQUEST);
                final String method = metadata.getString(KeField.URI);
                return executor.apply(method, uri);
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    static String keyAuthorized(final String method, final String uri) {
        return "authorized-" + method + ":" + uri;
    }

    /*
     * Session Data Get
     */
    static Future session(final String id) {
        return CLIENT.get(id).compose(session -> {
            if (Objects.nonNull(session) && !session.isDestroyed()) {
                return Future.succeededFuture(session);
            } else {
                final WebException error = new _409SessionConflictException(KeCache.class, id);
                return Future.failedFuture(error);
            }
        });
    }

    static  Future session(final Session session, final String sessionKey, final String dataKey, final T value) {
        /* Data Get */
        final Buffer storedBuffer = session.get(sessionKey);
        /* Updated Projection */
        if (Objects.nonNull(storedBuffer)) {
            final JsonObject storedData = storedBuffer.toJsonObject();
            storedData.put(dataKey, value);
            session.put(sessionKey, storedData.toBuffer());
        }
        return Ux.toFuture(value);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy