Skip to content
Snippets Groups Projects
Verified Commit e005371c authored by Timm Fitschen's avatar Timm Fitschen
Browse files

Merge branch 'dev' into f-one-time-tokens

parents 737c8e43 a895cdff
No related branches found
No related tags found
No related merge requests found
......@@ -23,6 +23,7 @@
#
variables:
DEPLOY_REF: dev
CI_REGISTRY_IMAGE: $CI_REGISTRY/caosdb/caosdb-server/caosdb-server-testenv:latest
image: $CI_REGISTRY_IMAGE
......@@ -69,7 +70,8 @@ trigger_build:
script:
- /usr/bin/curl -X POST
-F token=$DEPLOY_TRIGGER_TOKEN
-F "variables[F_BRANCH]=$CI_COMMIT_REF_NAME"
-F "variables[SERVER]=$CI_COMMIT_REF_NAME"
-F "variables[TriggerdBy]=SERVER"
-F "variables[TriggerdByHash]=$CI_COMMIT_SHORT_SHA"
-F ref=dev https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
-F ref=$DEPLOY_REF https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
......@@ -36,10 +36,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
* #51 - name queries (e.g. `FIND ENTITY WITH name = ...`)
- #27 - star matches slashes (e.g. for `FIND ... STORED AT /*.dat`).
- #30 - file path cannot be in quotes
- #46 - Server-side scripting failed as an unprivileged user because the was no
writable home directory.
- #46 - Server-side scripting failed as an unprivileged user because there was
no writable home directory.
- NaN Double Values (see #41)
- #14 - Handle files on file system without File entity: Those entries are
returned without ID but with a notice now.
......@@ -49,7 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Security (in case of vulnerabilities)
- TLS is by default restricted to v1.2 and v1.3 now.
- #11 - `pam_authentication` and `ldap_authentication.sh` leaked the password to unprivileged
- #11 - PAM and LDAP authentication no longer leak the password to unprivileged
processes on the same machine.
- #68 - Shadow sensitive information when logging for debugging purposes.
......
......@@ -67,7 +67,7 @@ MYSQL_USER_NAME=caosdb
# Password for the user
MYSQL_USER_PASSWORD=caosdb
# Schema of mysql procedures and tables which is required by this CaosDB instance
MYSQL_SCHEMA_VERSION=v2.1.2
MYSQL_SCHEMA_VERSION=v3.0.0-rc1
# --------------------------------------------------
......
......@@ -125,7 +125,7 @@
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4</artifactId>
<version>4.7.2</version>
<version>4.8-1</version>
</dependency>
<dependency>
<groupId>org.restlet.jse</groupId>
......@@ -222,7 +222,7 @@
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.7.2</version>
<version>4.8-1</version>
<configuration>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
</configuration>
......
......@@ -18,8 +18,12 @@ public class MySQLGetAllNames extends MySQLTransaction implements GetAllNamesImp
super(access);
}
/** Retrieve tuples (EntityName, EntityRole, ACL) for all entities which have a name. */
public static final String STMT_GET_ALL_NAMES =
"Select e.name as EntityName, e.role as EntityRole, a.acl as ACL FROM entities as e JOIN entity_acl as a ON (a.id=e.acl) WHERE e.name IS NOT NULL and e.role!='ROLE'";
"SELECT d.value as EntityName, e.role AS EntityRole, a.acl AS ACL "
+ "FROM name_data AS d JOIN entities AS e JOIN entity_acl AS a "
+ "ON (d.domain_id = 0 AND d.property_id = 20 AND d.entity_id = e.id AND a.id = e.acl) "
+ "WHERE e.role != 'ROLE' AND e.role != 'DATATYPE'";
@Override
public List<SparseEntity> execute() {
......
......@@ -36,9 +36,19 @@ public class MySQLGetIDByName extends MySQLTransaction implements GetIDByNameImp
super(access);
}
public static final String STMT_GET_ID_BY_NAME = "Select id from entities where name=?";
public static final String STMT_AND_ROLE = " AND role=?";
public static final String STMT_NOT_ROLE = " AND role!='ROLE'";
/**
* Resolves the (primary) name of an entity to an id. This query is not necessarily unique.
* Therefore {@link #STMT_AND_ROLE}, {@link #STMT_NOT_ROLE}, and {@link #STMT_LIMIT} can as
* additional conditions.
*/
public static final String STMT_GET_ID_BY_NAME =
"Select n.entity_id AS id "
+ "FROM name_data AS n JOIN entities AS e "
+ "ON (n.domain_id=0 AND n.property_id=20 AND e.id = n.entity_id)"
+ "WHERE n.value=?";
public static final String STMT_AND_ROLE = " AND e.role=?";
public static final String STMT_NOT_ROLE = " AND e.role!='ROLE'";
public static final String STMT_LIMIT = " LIMIT ";
@Override
......@@ -55,17 +65,13 @@ public class MySQLGetIDByName extends MySQLTransaction implements GetIDByNameImp
if (role != null) {
stmt.setString(2, role);
}
ResultSet rs = null;
try {
rs = stmt.executeQuery();
try (ResultSet rs = stmt.executeQuery()) {
final ArrayList<Integer> ret = new ArrayList<Integer>();
while (rs.next()) {
ret.add(rs.getInt("id"));
}
return ret;
} finally {
rs.close();
}
} catch (final Exception e) {
throw new TransactionException(e);
......
......@@ -15,10 +15,22 @@ public class MySQLInsertEntityDatatype extends MySQLTransaction
super(access);
}
/**
* Inserts atomic data types of properties into the data_type table. Has two parameters, the
* property_id and the data type name.
*/
public static final String STMT_INSERT_ENTITY_DATATYPE =
"INSERT INTO data_type (domain_id, entity_id, property_id, datatype) SELECT 0, 0, ?, ( SELECT id from entities where name = ? LIMIT 1);";
"INSERT INTO data_type (domain_id, entity_id, property_id, datatype) "
+ "SELECT 0, 0, ?, "
+ "( SELECT entity_id FROM name_data WHERE domain_id = 0 AND property_id = 20 AND value = ? LIMIT 1);";
/**
* Inserts collection data types of properties into the data_type table. Has two parameters, the
* property_id and the type of collection (e.g. 'LIST').
*/
public static final String STMT_INSERT_ENTITY_COLLECTION =
"INSERT INTO collection_type (domain_id, entity_id, property_id, collection) SELECT 0, 0, ?, ?;";
"INSERT INTO collection_type (domain_id, entity_id, property_id, collection) "
+ "SELECT 0, 0, ?, ?;";
@Override
public void execute(final SparseEntity entity) {
......
......@@ -38,17 +38,17 @@ public class MySQLRetrieveAll extends MySQLTransaction implements RetrieveAllImp
super(access);
}
public static final String STMT_GET_ALL_HEAD = "Select id from entities where ";
public static final String STMT_GET_ALL_HEAD = "Select id from entities where id > 99";
public static final String STMT_ENTITY_WHERE_CLAUSE =
" ( role=? OR role='"
" AND ( role=? OR role='"
+ Role.RecordType
+ "' OR role='"
+ Role.Property
+ "' OR role='"
+ Role.File
+ "'"
+ " ) AND ( NOT name=role OR name IS NULL)";
public static final String STMT_OTHER_ROLES = " role=? AND ( NOT name=role OR name IS NULL)";
+ " )";
public static final String STMT_OTHER_ROLES = " AND role=?";
@Override
public List<Integer> execute(final String role) throws TransactionException {
......
......@@ -38,8 +38,19 @@ public class MySQLRetrieveDatatypes extends MySQLTransaction implements Retrieve
super(access);
}
/**
* Retrieve (ParentID, ParentName, ParentDescription, ParentRole, ACL) tuple which actually
* contains the ID, name, description, role and ACL of the datatype. The misleading names should
* be fixed sometimes (TODO) but this also requires to adjust the code below, which uses {@link
* DatabaseUtils#parseParentResultSet(ResultSet)}.
*/
private static final String STMT_GET_DATATYPE =
"select id AS ParentID, name AS ParentName, description as ParentDescription, role as ParentRole, (SELECT acl FROM entity_acl as a WHERE a.id=e.acl) as ACL from entities as e where e.role='DATATYPE'";
"SELECT id AS ParentID, "
+ "(SELECT value FROM name_data WHERE domain_id = 0 AND entity_ID = e.id AND property_id = 20) AS ParentName, "
+ "description AS ParentDescription, "
+ "role AS ParentRole, "
+ "(SELECT acl FROM entity_acl AS a WHERE a.id=e.acl) as ACL "
+ "FROM entities AS e WHERE e.role='DATATYPE'";
@Override
public ArrayList<VerySparseEntity> execute() throws TransactionException {
......
......@@ -51,13 +51,10 @@ public class MySQLRetrieveSparseEntity extends MySQLTransaction
final PreparedStatement preparedStatement = prepareStatement(stmtStr);
preparedStatement.setInt(1, id);
final ResultSet rs = preparedStatement.executeQuery();
try {
try (final ResultSet rs = preparedStatement.executeQuery()) {
if (rs.next()) {
return DatabaseUtils.parseEntityResultSet(rs);
}
} finally {
rs.close();
}
} catch (final SQLException e) {
throw new TransactionException(e);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment