Search in sources :

Example 1 with Secrets

use of com.walmartlabs.concord.server.jooq.tables.Secrets in project concord by walmartlabs.

the class SecretDao method list.

public List<SecretEntry> list(UUID orgId, UUID currentUserId, Field<?> sortField, boolean asc, int offset, int limit, String filter) {
    Organizations o = ORGANIZATIONS.as("o");
    Secrets s = SECRETS.as("s");
    Projects p = PROJECTS.as("p");
    Users u = USERS.as("u");
    sortField = s.field(sortField);
    SelectOnConditionStep<Record15<UUID, String, UUID, String, UUID, String, String, String, String, String, UUID, String, String, String, String>> q = selectEntry(dsl(), o, s, p, u);
    if (currentUserId != null) {
        // public secrets are visible for anyone
        Condition isPublic = s.VISIBILITY.eq(SecretVisibility.PUBLIC.toString());
        // check if the user belongs to a team in the org
        SelectConditionStep<Record1<UUID>> teamIds = select(TEAMS.TEAM_ID).from(TEAMS).where(TEAMS.ORG_ID.eq(orgId));
        Condition isInATeam = exists(selectOne().from(V_USER_TEAMS).where(V_USER_TEAMS.USER_ID.eq(currentUserId).and(V_USER_TEAMS.TEAM_ID.in(teamIds))));
        // check if the user owns secrets in the org
        Condition ownsSecrets = s.OWNER_ID.eq(currentUserId);
        // check if the user owns the org
        Condition ownsOrg = o.OWNER_ID.eq(currentUserId);
        // if any of those conditions true then the secret must be visible
        q.where(or(isPublic, isInATeam, ownsSecrets, ownsOrg));
    }
    if (orgId != null) {
        q.where(s.ORG_ID.eq(orgId));
    }
    if (filter != null) {
        q.where(s.SECRET_NAME.containsIgnoreCase(filter));
    }
    if (sortField != null) {
        q.orderBy(asc ? sortField.asc() : sortField.desc());
    }
    if (offset >= 0) {
        q.offset(offset);
    }
    if (limit > 0) {
        q.limit(limit);
    }
    return q.fetch(SecretDao::toEntry);
}
Also used : Secrets(com.walmartlabs.concord.server.jooq.tables.Secrets) Organizations(com.walmartlabs.concord.server.jooq.tables.Organizations) Projects(com.walmartlabs.concord.server.jooq.tables.Projects) Users(com.walmartlabs.concord.server.jooq.tables.Users)

Aggregations

Organizations (com.walmartlabs.concord.server.jooq.tables.Organizations)1 Projects (com.walmartlabs.concord.server.jooq.tables.Projects)1 Secrets (com.walmartlabs.concord.server.jooq.tables.Secrets)1 Users (com.walmartlabs.concord.server.jooq.tables.Users)1