1 package com.pentila.entSavoie.wopiProtocole;
3 import java.io.FileNotFoundException;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.security.MessageDigest;
7 import java.security.NoSuchAlgorithmException;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
12 import org.apache.struts.action.Action;
13 import org.apache.struts.action.ActionForm;
14 import org.apache.struts.action.ActionForward;
15 import org.apache.struts.action.ActionMapping;
17 import com.liferay.portal.kernel.json.JSONFactoryUtil;
18 import com.liferay.portal.kernel.json.JSONObject;
19 import com.liferay.portal.kernel.log.Log;
20 import com.liferay.portal.kernel.log.LogFactoryUtil;
21 import com.liferay.portal.kernel.util.Base64;
22 import com.liferay.portal.kernel.util.ParamUtil;
23 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
24 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
25 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
26 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
27 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
28 import com.pentila.entSavoie.cartable.model.LoolToken;
29 import com.pentila.entSavoie.cartable.service.LoolTokenLocalServiceUtil;
30 import com.pentila.entSavoie.utils.TokenCacheUtil;
32 public class GetWopiFileInfoAction extends Action {
34 private static Log logger = LogFactoryUtil.getLog(GetWopiFileInfoAction.class);
36 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
37 HttpServletResponse response) throws Exception {
38 logger.info("Start execute GetWopiFileInfoAction");
39 String[] pathSplitted = mapping.getPath().split("/");
40 String access_token = ParamUtil.getString(request, "access_token");
41 LoolToken loolToken = LoolTokenLocalServiceUtil.getLoolToken(access_token);
42 Long userId = loolToken.getUserId();
43 //Long userId = TokenCacheUtil.getUserIdFromTokenCache(access_token);
44 logger.info("GetWopiFileInfoAction : returned user for token "+access_token+" is "+userId);
46 if(userId == null || userId == 0L){
47 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
51 Long fileVersionId = Long.parseLong(pathSplitted[pathSplitted.length - 1]);
53 DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getDLFileVersion(fileVersionId);
55 DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(dlFileVersion.getFileEntryId());
57 InputStream is = DLStoreUtil.getFileAsStream(fileEntry.getCompanyId(), fileEntry.getDataRepositoryId(),
58 fileEntry.getName(), dlFileVersion.getVersion());
60 JSONObject fileInfo = JSONFactoryUtil.createJSONObject();
61 fileInfo.put("BaseFileName", fileEntry.getTitle());
62 fileInfo.put("OwnerId", fileEntry.getUserName());
63 fileInfo.put("Size", fileEntry.getSize());
64 fileInfo.put("SHA256", getHash256(is));
65 fileInfo.put("Version", dlFileVersion.getVersion());
66 fileInfo.put("UserCanWrite", true);
67 fileInfo.put("SupportsUpdate", true);
69 response.setContentType("application/json");
70 response.setStatus(HttpServletResponse.SC_OK);
71 response.getWriter().write(fileInfo.toString());
76 public static String getHash256(InputStream fis) {
79 byte[] buffer = new byte[1024];
81 MessageDigest complete = MessageDigest.getInstance("SHA-256");
83 numRead = fis.read(buffer);
85 complete.update(buffer, 0, numRead);
87 } while (numRead != -1);
90 value = new String(Base64.encode(complete.digest()));
91 } catch (NoSuchAlgorithmException e) {
93 } catch (FileNotFoundException e) {
95 } catch (IOException e) {