package org.openslx.bwlp.sat.thrift;
import java.nio.ByteBuffer;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.openslx.bwlp.sat.database.mappers.DbImage;
import org.openslx.bwlp.sat.database.mappers.DbImagePermissions;
import org.openslx.bwlp.sat.database.mappers.DbUser;
import org.openslx.bwlp.sat.fileserv.ActiveUpload;
import org.openslx.bwlp.sat.fileserv.FileServer;
import org.openslx.bwlp.sat.permissions.User;
import org.openslx.bwlp.sat.permissions.User.Permission;
import org.openslx.bwlp.sat.thrift.cache.OperatingSystemList;
import org.openslx.bwlp.sat.thrift.cache.OrganizationList;
import org.openslx.bwlp.sat.thrift.cache.VirtualizerList;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.ImageVersionWrite;
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.OperatingSystem;
import org.openslx.bwlp.thrift.iface.Organization;
import org.openslx.bwlp.thrift.iface.SatelliteServer;
import org.openslx.bwlp.thrift.iface.TAuthorizationException;
import org.openslx.bwlp.thrift.iface.TInternalServerError;
import org.openslx.bwlp.thrift.iface.TInvalidTokenException;
import org.openslx.bwlp.thrift.iface.TNotFoundException;
import org.openslx.bwlp.thrift.iface.TTransferRejectedException;
import org.openslx.bwlp.thrift.iface.TransferInformation;
import org.openslx.bwlp.thrift.iface.UploadStatus;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.bwlp.thrift.iface.Virtualizer;
import org.openslx.sat.thrift.version.Version;
public class ServerHandler implements SatelliteServer.Iface {
private static final Logger LOGGER = Logger.getLogger(ServerHandler.class);
private static final FileServer fileServer = FileServer.instance();
@Override
public long getVersion() {
return Version.VERSION;
}
/*
* File Transfer
*/
@Override
public TransferInformation requestImageVersionUpload(String userToken, String imageBaseId, long fileSize,
List<ByteBuffer> blockHashes) throws TTransferRejectedException, TAuthorizationException {
// TODO Auto-generated method stub
return null;
}
@Override
public void cancelUpload(String uploadToken) {
ActiveUpload upload = fileServer.getUploadByToken(uploadToken);
if (upload != null)
upload.cancel();
}
@Override
public UploadStatus queryUploadStatus(String uploadToken) throws TInvalidTokenException {
// TODO Auto-generated method stub
return null;
}
@Override
public TransferInformation requestDownload(String userToken, String imageVersionId)
throws TAuthorizationException {
// TODO Auto-generated method stub
return null;
}
@Override
public void cancelDownload(String downloadToken) {
// TODO Auto-generated method stub
}
/*
* Authentication/Validation
*/
@Override
public boolean isAuthenticated(String userToken) {
return SessionManager.get(userToken) != null;
}
@Override
public void invalidateSession(String userToken) {
SessionManager.remove(userToken);
}
/*
* Query basic information which doesn't require authentication
*/
@Override
public List<OperatingSystem> getOperatingSystems() {
return OperatingSystemList.get();
}
@Override
public List<Virtualizer> getVirtualizers() {
return VirtualizerList.get();
}
@Override
public List<Organization> getAllOrganizations() {
return OrganizationList.get();
}
/*
* Everything below required at least a valid session
*/
@Override
public List<ImageSummaryRead> getImageList(String userToken, List<String> tagSearch)
throws TAuthorizationException, TInternalServerError {
UserInfo user = SessionManager.getOrFail(userToken);
try {
return DbImage.getAllVisible(user, tagSearch);
} catch (SQLException e) {
throw new TInternalServerError();
}
}
@Override
public ImageDetailsRead getImageDetails(String userToken, String imageBaseId)
throws TAuthorizationException, TNotFoundException, TInternalServerError {
UserInfo user = SessionManager.getOrFail(userToken);
try {
return DbImage.getImageDetails(user, imageBaseId);
} catch (SQLException e) {
throw new TInternalServerError();
}
}
@Override
public boolean createImage(String userToken, String imageName) throws TAuthorizationException {
UserInfo user = SessionManager.getOrFail(userToken);
User.canCreateImageOrFail(user);
// TODO: Create image
return true;
}
@Override
public boolean updateImageBase(String userToken, String imageBaseId, ImageBaseWrite image)
throws TAuthorizationException, TInternalServerError, TNotFoundException {
UserInfo user = SessionManager.getOrFail(userToken);
User.hasImageBasePermissionOrFail(user, imageBaseId, Permission.EDIT);
// TODO: Permissions cleared; Now update image base data
return false;
}
@Override
public boolean updateImageVersion(String userToken, String imageVersionId, ImageVersionWrite image)
throws TAuthorizationException, TInternalServerError, TNotFoundException {
UserInfo user = SessionManager.getOrFail(userToken);
User.hasImageVersionPermissionOrFail(user, imageVersionId, Permission.EDIT);
// TODO: Permissions cleared; Now update image version data
return false;
}
@Override
public boolean deleteImageVersion(String userToken, String imageVersionId)
throws TAuthorizationException, TNotFoundException, TInternalServerError {
UserInfo user = SessionManager.getOrFail(userToken);
User.hasImageVersionPermissionOrFail(user, imageVersionId, Permission.ADMIN);
// TODO: Permissions cleared; Now mark image for deletion (set expire time in the past...)
return false;
}
@Override
public boolean writeImagePermissions(String userToken, String imageBaseId,
Map<String, ImagePermissions> permissions) throws TAuthorizationException, TNotFoundException,
TInternalServerError {
UserInfo user = SessionManager.getOrFail(userToken);
User.hasImageBasePermissionOrFail(user, imageBaseId, Permission.ADMIN);
// TODO: Permissions cleared; Now update image base data
return false;
}
@Override
public Map<String, ImagePermissions> getImagePermissions(String userToken, String imageBaseId)
throws TAuthorizationException, TNotFoundException, TInternalServerError {
UserInfo user = SessionManager.getOrFail(userToken);
boolean adminOnly = !User.hasImageBasePermission(user, imageBaseId, Permission.ADMIN);
try {
return DbImagePermissions.getForImageBase(imageBaseId, adminOnly);
} catch (SQLException e) {
throw new TInternalServerError();
}
}
@Override
public String createLecture(String userToken, LectureWrite lecture) throws TAuthorizationException {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean updateLecture(String userToken, String lectureId, LectureWrite lecture)
throws TAuthorizationException, TNotFoundException {
// TODO Auto-generated method stub
return false;
}
@Override
public List<LectureSummary> getLectureList(String userToken) throws TAuthorizationException {
// TODO Auto-generated method stub
return null;
}
@Override
public LectureRead getLectureDetails(String userToken, String lectureId) throws TAuthorizationException,
TNotFoundException {
// TODO Auto-generated method stub
return null;
}
@Override
public List<LectureSummary> getLecturesByImageVersion(String userToken, String imageVersionId)
throws TAuthorizationException, TNotFoundException {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean deleteLecture(String userToken, String lectureId) throws TAuthorizationException,
TNotFoundException {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean writeLecturePermissions(String userToken, String lectureId,
Map<String, LecturePermissions> permissions) throws TAuthorizationException, TNotFoundException {
// TODO Auto-generated method stub
return false;
}
@Override
public Map<String, LecturePermissions> getLecturePermissions(String userToken, String lectureId)
throws TAuthorizationException, TNotFoundException {
// TODO Auto-generated method stub
return null;
}
@Override
public List<UserInfo> getUserList(String userToken, int page) throws TAuthorizationException,
TInternalServerError {
try {
return DbUser.getAll(page);
} catch (SQLException e) {
throw new TInternalServerError();
}
}
}