--- /dev/null
+package com.pentila.entSavoie.wopiProtocole;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.liferay.portal.kernel.json.JSONFactoryUtil;
+import com.liferay.portal.kernel.json.JSONObject;
+import com.liferay.portal.kernel.log.Log;
+import com.liferay.portal.kernel.log.LogFactoryUtil;
+import com.liferay.portal.kernel.util.Base64;
+import com.liferay.portal.kernel.util.ParamUtil;
+import com.liferay.portlet.documentlibrary.model.DLFileEntry;
+import com.liferay.portlet.documentlibrary.model.DLFileVersion;
+import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
+import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
+import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
+import com.pentila.entSavoie.cartable.model.LoolToken;
+import com.pentila.entSavoie.cartable.service.LoolTokenLocalServiceUtil;
+import com.pentila.entSavoie.utils.TokenCacheUtil;
+
+public class GetWopiFileInfoAction extends Action {
+
+ private static Log logger = LogFactoryUtil.getLog(GetWopiFileInfoAction.class);
+
+ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+ logger.info("Start execute GetWopiFileInfoAction");
+ String[] pathSplitted = mapping.getPath().split("/");
+ String access_token = ParamUtil.getString(request, "access_token");
+ LoolToken loolToken = LoolTokenLocalServiceUtil.getLoolToken(access_token);
+ Long userId = loolToken.getUserId();
+ //Long userId = TokenCacheUtil.getUserIdFromTokenCache(access_token);
+ logger.info("GetWopiFileInfoAction : returned user for token "+access_token+" is "+userId);
+
+ if(userId == null || userId == 0L){
+ response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+ return null;
+ }
+
+ Long fileVersionId = Long.parseLong(pathSplitted[pathSplitted.length - 1]);
+
+ DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getDLFileVersion(fileVersionId);
+
+ DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(dlFileVersion.getFileEntryId());
+
+ InputStream is = DLStoreUtil.getFileAsStream(fileEntry.getCompanyId(), fileEntry.getDataRepositoryId(),
+ fileEntry.getName(), dlFileVersion.getVersion());
+
+ JSONObject fileInfo = JSONFactoryUtil.createJSONObject();
+ fileInfo.put("BaseFileName", fileEntry.getTitle());
+ fileInfo.put("OwnerId", fileEntry.getUserName());
+ fileInfo.put("Size", fileEntry.getSize());
+ fileInfo.put("SHA256", getHash256(is));
+ fileInfo.put("Version", dlFileVersion.getVersion());
+ fileInfo.put("UserCanWrite", true);
+ fileInfo.put("SupportsUpdate", true);
+
+ response.setContentType("application/json");
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.getWriter().write(fileInfo.toString());
+
+ return null;
+ }
+
+ public static String getHash256(InputStream fis) {
+ String value = "";
+ try {
+ byte[] buffer = new byte[1024];
+ int numRead;
+ MessageDigest complete = MessageDigest.getInstance("SHA-256");
+ do {
+ numRead = fis.read(buffer);
+ if (numRead > 0) {
+ complete.update(buffer, 0, numRead);
+ }
+ } while (numRead != -1);
+
+ fis.close();
+ value = new String(Base64.encode(complete.digest()));
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return value;
+ }
+}