diff options
author | Simon Rettberg | 2015-07-03 16:43:38 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-07-03 16:43:38 +0200 |
commit | 90c159d622f234b99e47293f3ff2a35d64e6f8c9 (patch) | |
tree | e967412b1464e9e3cad381399d5dd1c596c0bf28 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java | |
parent | [server] Refactored permission checking classes a bit (diff) | |
download | tutor-module-90c159d622f234b99e47293f3ff2a35d64e6f8c9.tar.gz tutor-module-90c159d622f234b99e47293f3ff2a35d64e6f8c9.tar.xz tutor-module-90c159d622f234b99e47293f3ff2a35d64e6f8c9.zip |
[server] Adapt to API changes, refine permission checking for image version deletion
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java | 77 |
1 files changed, 74 insertions, 3 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java index 18f21498..a40fbbb3 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java @@ -3,6 +3,7 @@ package org.openslx.bwlp.sat.database.mappers; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.UUID; @@ -12,9 +13,10 @@ import org.openslx.bwlp.sat.database.MysqlConnection; import org.openslx.bwlp.sat.database.MysqlStatement; import org.openslx.bwlp.sat.permissions.User; import org.openslx.bwlp.sat.util.Json; -import org.openslx.bwlp.thrift.iface.LecturePermissions; +import org.openslx.bwlp.thrift.iface.LectureRead; import org.openslx.bwlp.thrift.iface.LectureSummary; import org.openslx.bwlp.thrift.iface.LectureWrite; +import org.openslx.bwlp.thrift.iface.NetRule; import org.openslx.bwlp.thrift.iface.TNotFoundException; import org.openslx.bwlp.thrift.iface.UserInfo; @@ -80,7 +82,7 @@ public class DbLecture { MysqlStatement stmt = connection.prepareStatement("UPDATE lecture SET " + " displayname = :displayname, description = :description, imageversionid = :imageversionid," + " autoupdate = :autoupdate, isenabled = :isenabled, starttime = :starttime," - + " endtime = :endtime, createtime = :createtime, updatetime = :updatetime," + + " endtime = :endtime, updatetime = UNIX_TIMESTAMP()," + " updaterid = :updaterid, runscript = :runscript, nics = :nics," + " netrules = :netrules, isexam = :isexam, hasinternetaccess = :hasinternetaccess," + " caneditdefault = :caneditdefault, canadmindefault = :canadmindefault" @@ -111,7 +113,7 @@ public class DbLecture { + " l.lectureid, l.displayname AS lecturename, l.imageversionid, l.isenabled," + " l.starttime, l.endtime, l.lastused, l.usecount, l.ownerid, l.updaterid," + " l.isexam, l.hasinternetaccess, l.caneditdefault, l.canadmindefault," - + " perm.canedit, perm.canadmin" + + " perm.canedit, perm.canadmin FROM lecture l" + " LEFT JOIN lecturepermission perm ON (perm.lectureid = l.lectureid AND perm.userid = :userid)" + " WHERE lectureid = :lectureid"); stmt.setString("lectureid", lectureId); @@ -186,4 +188,73 @@ public class DbLecture { } } + public static LectureRead getLectureDetails(UserInfo user, String lectureId) throws SQLException, + TNotFoundException { + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement("SELECT" + + " l.lectureid, l.displayname AS l.lecturename, l.description, l.imageversionid, l.autoupdate," + + " l.isenabled, l.starttime, l.endtime, l.lastused, l.usecount, l.createtime, l.updatetime," + + " l.ownerid, l.updaterid, l.runscript, l.nics, l.netrules, l.isexam, l.hasinternetaccess," + + " l.caneditdefault, l.canadmindefault, p.canedit, p.canadmin" + + " FROM lecture l " + + " LEFT JOIN lecturepermission p ON (l.lectureid = p.lectureid AND p.userid = :userid)" + + " WHERE l.lectureid = :lectureid LIMIT 1"); + stmt.setString("userid", user.userId); + stmt.setString("lectureid", lectureId); + ResultSet rs = stmt.executeQuery(); + if (!rs.next()) + throw new TNotFoundException(); + LectureRead lecture = new LectureRead(); + lecture.setLectureId(rs.getString("lectureid")); + lecture.setLectureName(rs.getString("lecturename")); + lecture.setDescription(rs.getString("description")); + lecture.setAutoUpdate(rs.getBoolean("autoupdate")); + lecture.setIsEnabled(rs.getBoolean("isenabled")); + lecture.setStartTime(rs.getLong("starttime")); + lecture.setEndTime(rs.getLong("endtime")); + lecture.setLastUsed(rs.getLong("lastused")); + lecture.setUseCount(rs.getInt("usecount")); + lecture.setCreateTime(rs.getLong("createtime")); + lecture.setUpdateTime(rs.getLong("updatetime")); + lecture.setOwnerId(rs.getString("ownerid")); + lecture.setUpdaterId(rs.getString("updaterid")); + lecture.setRunscript(rs.getString("runscript")); + lecture.setNetworkExceptions(Arrays.asList(Json.deserializeThrift(rs.getString("netrules"), + NetRule[].class))); + lecture.setImage(DbImage.getImageSummary(connection, user, + DbImage.getBaseIdForVersionId(connection, rs.getString("imageversionid")))); + lecture.setAllowedUsers(getAllowedUsers(connection, lectureId)); + return lecture; + } catch (SQLException e) { + LOGGER.error("Query failed in DbLecture.getLectureDetails()", e); + throw e; + } + } + + public static List<String> getAllowedUsers(MysqlConnection connection, String lectureId) + throws SQLException { + MysqlStatement stmt = connection.prepareStatement("SELECT" + " userlogin FROM lectureuser" + + " WHERE lectureid = :lectureid"); + stmt.setString("lectureid", lectureId); + ResultSet rs = stmt.executeQuery(); + List<String> list = new ArrayList<>(); + while (rs.next()) { + list.add(rs.getString("userlogin")); + } + return list; + } + + public static boolean delete(String lectureId) throws TNotFoundException, SQLException { + int affected; + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement("DELETE FROM lecture WHERE lectureid = :lectureid"); + stmt.setString("lectureid", lectureId); + affected = stmt.executeUpdate(); + connection.commit(); + } catch (SQLException e) { + LOGGER.error("Query failed in DbLecture.delete()", e); + throw e; + } + return affected == 1; + } } |