{"action":"created","comment":{"url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/comments/122405643","pull_request_review_id":44518600,"id":122405643,"diff_hunk":"@@ -0,0 +1,487 @@\n+/*\n+ * $RCSfile$\n+ * $Revision: 19696 $ $Date: 2011-01-04 13:45:05 +0100 (Di, 04 Jan 2011) $\n+ *\n+ * This file is part of ***  M y C o R e  ***\n+ * See http://www.mycore.de/ for details.\n+ *\n+ * This program is free software; you can use it, redistribute it\n+ * and / or modify it under the terms of the GNU General Public License\n+ * (GPL) as published by the Free Software Foundation; either version 2\n+ * of the License or (at your option) any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful, but\n+ * WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU General Public License\n+ * along with this program, in a file called gpl.txt or license.txt.\n+ * If not, write to the Free Software Foundation Inc.,\n+ * 59 Temple Place - Suite 330, Boston, MA  02111-1307 USA\n+ */\n+package org.mycore.restapi.v1.utils;\n+\n+import static org.mycore.access.MCRAccessManager.PERMISSION_DELETE;\n+import static org.mycore.access.MCRAccessManager.PERMISSION_WRITE;\n+\n+import java.io.BufferedInputStream;\n+import java.io.BufferedWriter;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.StringWriter;\n+import java.nio.charset.StandardCharsets;\n+import java.nio.file.Files;\n+import java.nio.file.Paths;\n+import java.nio.file.StandardCopyOption;\n+import java.security.Signature;\n+import java.util.Base64;\n+import java.util.SortedMap;\n+import java.util.TreeMap;\n+import java.util.zip.ZipEntry;\n+import java.util.zip.ZipInputStream;\n+\n+import javax.servlet.http.HttpServletRequest;\n+import javax.ws.rs.core.Response;\n+import javax.ws.rs.core.Response.Status;\n+import javax.ws.rs.core.UriInfo;\n+\n+import org.apache.logging.log4j.LogManager;\n+import org.apache.logging.log4j.Logger;\n+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;\n+import org.jdom2.Document;\n+import org.jdom2.input.SAXBuilder;\n+import org.jdom2.output.Format;\n+import org.jdom2.output.XMLOutputter;\n+import org.mycore.access.MCRAccessException;\n+import org.mycore.access.MCRAccessManager;\n+import org.mycore.common.MCRPersistenceException;\n+import org.mycore.common.MCRSession;\n+import org.mycore.common.MCRSessionMgr;\n+import org.mycore.common.MCRUserInformation;\n+import org.mycore.common.config.MCRConfiguration;\n+import org.mycore.datamodel.ifs.MCRDirectory;\n+import org.mycore.datamodel.ifs.MCRFileImportExport;\n+import org.mycore.datamodel.metadata.MCRDerivate;\n+import org.mycore.datamodel.metadata.MCRMetaIFS;\n+import org.mycore.datamodel.metadata.MCRMetaLinkID;\n+import org.mycore.datamodel.metadata.MCRMetadataManager;\n+import org.mycore.datamodel.metadata.MCRObject;\n+import org.mycore.datamodel.metadata.MCRObjectID;\n+import org.mycore.datamodel.niofs.MCRPath;\n+import org.mycore.datamodel.niofs.utils.MCRRecursiveDeleter;\n+import org.mycore.frontend.cli.MCRObjectCommands;\n+import org.mycore.frontend.servlets.MCRServlet;\n+import org.mycore.restapi.v1.errors.MCRRestAPIError;\n+import org.mycore.restapi.v1.errors.MCRRestAPIException;\n+import org.mycore.user2.MCRUserManager;\n+\n+import com.nimbusds.jose.jwk.JWK;\n+import com.nimbusds.jose.jwk.RSAKey;\n+import com.nimbusds.jwt.SignedJWT;\n+\n+public class MCRRestAPIUploadHelper {\n+    private static final Logger LOGGER = LogManager.getLogger(MCRRestAPIUploadHelper.class);\n+\n+    public static final String FORMAT_XML = \"xml\";\n+\n+    private static java.nio.file.Path UPLOAD_DIR = Paths\n+        .get(MCRConfiguration.instance().getString(\"MCR.RestAPI.v1.Upload.Directory\"));\n+    static {\n+        if (!Files.exists(UPLOAD_DIR)) {\n+            try {\n+                Files.createDirectories(UPLOAD_DIR);\n+            } catch (IOException e) {\n+                LOGGER.error(e);\n+            }\n+        }\n+    }\n+\n+    /**\n+     * uploads a mycore mobject    \n+     * based upon:    \n+     * http://puspendu.wordpress.com/2012/08/23/restful-webservice-file-upload-with-jersey/\n+     */\n+    public static Response uploadObject(UriInfo info, HttpServletRequest request, InputStream uploadedInputStream,\n+        FormDataContentDisposition fileDetails) {\n+        try {\n+            if (MCRRestAPIUtil.checkWriteAccessForIP(request)) {\n+                SignedJWT signedJWT = MCRJSONWebTokenUtil.retrieveAuthenticationToken(request);\n+                java.nio.file.Path fXML = null;\n+                try (MCRJPATransactionWrapper mtw = new MCRJPATransactionWrapper()) {\n+                    SAXBuilder sb = new SAXBuilder();\n+                    Document docOut = sb.build(uploadedInputStream);\n+\n+                    MCRObjectID mcrID = MCRObjectID.getInstance(docOut.getRootElement().getAttributeValue(\"ID\"));\n+                    if (mcrID.getNumberAsInteger() == 0) {\n+                        mcrID = MCRObjectID.getNextFreeId(mcrID.getBase());\n+                    }\n+\n+                    fXML = UPLOAD_DIR.resolve(mcrID.toString() + \".xml\");\n+\n+                    docOut.getRootElement().setAttribute(\"ID\", mcrID.toString());\n+                    docOut.getRootElement().setAttribute(\"label\", mcrID.toString());\n+                    XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());\n+                    try (BufferedWriter bw = Files.newBufferedWriter(fXML, StandardCharsets.UTF_8)) {\n+                        xmlOut.output(docOut, bw);\n+                    }\n+\n+                    MCRSession mcrSession = MCRSessionMgr.getCurrentSession();\n+                    MCRUserInformation currentUser = mcrSession.getUserInformation();\n+                    MCRUserInformation apiUser = MCRUserManager\n+                        .getUser(MCRJSONWebTokenUtil.retrieveUsernameFromAuthenticationToken(signedJWT));\n+                    mcrSession.setUserInformation(apiUser);\n+                    MCRObjectCommands.updateFromFile(fXML.toString(), false); // handles \"create\" as well\n+                    mcrSession.setUserInformation(currentUser);\n+\n+                    return Response.created(info.getBaseUriBuilder().path(\"v1/objects/\" + mcrID.toString()).build())\n+                        .type(\"application/xml; charset=UTF-8\")\n+                        .header(\"Authorization\", \"Bearer \" + MCRJSONWebTokenUtil.createJWT(signedJWT).serialize())\n+                        .build();\n+\n+                } catch (Exception e) {\n+                    LOGGER.error(\"Unable to Upload file: \" + String.valueOf(fXML), e);\n+                    throw new MCRRestAPIException(\n+                        MCRRestAPIError.create(Status.BAD_REQUEST, MCRRestAPIError.CODE_WRONG_PARAMETER,\n+                            \"Unable to Upload file: \" + String.valueOf(fXML), e.getMessage()));\n+                } finally {\n+                    if (fXML != null) {\n+                        try {\n+                            Files.delete(fXML);\n+                        } catch (IOException e) {\n+                            LOGGER.error(\"Unable to delete temporary workflow file: \" + String.valueOf(fXML), e);\n+                        }\n+                    }\n+                }\n+            }\n+\n+        } catch (MCRRestAPIException e) {\n+            return MCRRestAPIError.createHttpResponseFromErrorList(e.getErrors());\n+        }\n+        return MCRRestAPIError.create(Status.INTERNAL_SERVER_ERROR, MCRRestAPIError.CODE_INTERNAL_ERROR,\n+            \"Could not upload the file\", null).createHttpResponse();\n+    }\n+\n+    public static Response uploadDerivate(UriInfo info, HttpServletRequest request, String pathParamMcrObjID,\n+        String formParamlabel) {\n+        Response response = Response.status(Status.INTERNAL_SERVER_ERROR).build();\n+        try {\n+            if (MCRRestAPIUtil.checkWriteAccessForIP(request)) {\n+                SignedJWT signedJWT = MCRJSONWebTokenUtil.retrieveAuthenticationToken(request);\n+                //  File fXML = null;\n+                MCRObjectID mcrObjID = MCRObjectID.getInstance(pathParamMcrObjID);\n+\n+                try (MCRJPATransactionWrapper mtw = new MCRJPATransactionWrapper()) {\n+                    MCRSession session = MCRServlet.getSession(request);\n+                    MCRUserInformation currentUser = session.getUserInformation();\n+                    MCRUserInformation apiUser = MCRUserManager\n+                        .getUser(MCRJSONWebTokenUtil.retrieveUsernameFromAuthenticationToken(signedJWT));\n+                    session.setUserInformation(apiUser);\n+\n+                    MCRObject mcrObj = MCRMetadataManager.retrieveMCRObject(mcrObjID);\n+                    MCRObjectID derID = null;\n+                    for (MCRMetaLinkID derLink : mcrObj.getStructure().getDerivates()) {\n+                        if (formParamlabel.equals(derLink.getXLinkLabel())\n+                            || formParamlabel.equals(derLink.getXLinkTitle())) {\n+                            derID = derLink.getXLinkHrefID();\n+                        }\n+                    }\n+\n+                    if (derID == null) {\n+                        derID = MCRObjectID.getNextFreeId(mcrObjID.getProjectId() + \"_derivate\");\n+                        MCRDerivate mcrDerivate = new MCRDerivate();\n+                        mcrDerivate.setLabel(formParamlabel);\n+                        mcrDerivate.setId(derID);\n+                        mcrDerivate.setSchema(\"datamodel-derivate.xsd\");\n+                        mcrDerivate.getDerivate().setLinkMeta(new MCRMetaLinkID(\"linkmeta\", mcrObjID, null, null));\n+                        mcrDerivate.getDerivate()\n+                            .setInternals(new MCRMetaIFS(\"internal\", UPLOAD_DIR.resolve(derID.toString()).toString()));\n+\n+                        MCRMetadataManager.create(mcrDerivate);\n+                        MCRMetadataManager.addOrUpdateDerivateToObject(mcrObjID,\n+                            new MCRMetaLinkID(\"derobject\", derID, null, formParamlabel));\n+                    }\n+\n+                    response = Response\n+                        .created(info.getBaseUriBuilder()\n+                            .path(\"v1/objects/\" + mcrObjID.toString() + \"/derivates/\" + derID.toString()).build())\n+                        .type(\"application/xml; charset=UTF-8\")\n+                        .header(\"Authorization\", \"Bearer \" + MCRJSONWebTokenUtil.createJWT(signedJWT).serialize())\n+                        .build();\n+                    session.setUserInformation(currentUser);\n+                } catch (Exception e) {\n+                    LOGGER.error(\"Exeption while uploading derivate\", e);\n+                }\n+            }\n+        } catch (MCRRestAPIException e) {\n+            response = MCRRestAPIError.createHttpResponseFromErrorList(e.getErrors());\n+        }\n+        return response;\n+    }\n+\n+    public static Response uploadFile(UriInfo info, HttpServletRequest request, String pathParamMcrObjID,\n+        String pathParamMcrDerID, InputStream uploadedInputStream, FormDataContentDisposition fileDetails,\n+        String formParamPath, boolean formParamMaindoc, boolean formParamUnzip, String formParamMD5,\n+        Long formParamSize) {\n+\n+        Response response = Response.status(Status.INTERNAL_SERVER_ERROR).build();\n+        try {\n+            if (MCRRestAPIUtil.checkWriteAccessForIP(request)) {\n+                SignedJWT signedJWT = MCRJSONWebTokenUtil.retrieveAuthenticationToken(request);\n+                SortedMap<String, String> parameter = new TreeMap<>();\n+                parameter.put(\"mcrObjectID\", pathParamMcrObjID);\n+                parameter.put(\"mcrDerivateID\", pathParamMcrDerID);\n+                parameter.put(\"path\", formParamPath);\n+                parameter.put(\"maindoc\", Boolean.toString(formParamMaindoc));\n+                parameter.put(\"unzip\", Boolean.toString(formParamUnzip));\n+                parameter.put(\"md5\", formParamMD5);\n+                parameter.put(\"size\", Long.toString(formParamSize));\n+\n+                String base64Signature = request.getHeader(\"X-MyCoRe-RestAPI-Signature\");\n+                if (base64Signature == null) {","path":"mycore-restapi/src/main/java/org/mycore/restapi/v1/utils/MCRRestAPIUploadHelper.java","position":241,"original_position":241,"commit_id":"1c9407035503a9e70b6dc75c46749d9604ac77b9","original_commit_id":"1c9407035503a9e70b6dc75c46749d9604ac77b9","user":{"login":"codacy-bot","id":19940114,"avatar_url":"https://avatars2.githubusercontent.com/u/19940114?v=3","gravatar_id":"","url":"https://api.github.com/users/codacy-bot","html_url":"https://github.com/codacy-bot","followers_url":"https://api.github.com/users/codacy-bot/followers","following_url":"https://api.github.com/users/codacy-bot/following{/other_user}","gists_url":"https://api.github.com/users/codacy-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/codacy-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codacy-bot/subscriptions","organizations_url":"https://api.github.com/users/codacy-bot/orgs","repos_url":"https://api.github.com/users/codacy-bot/repos","events_url":"https://api.github.com/users/codacy-bot/events{/privacy}","received_events_url":"https://api.github.com/users/codacy-bot/received_events","type":"User","site_admin":false},"body":"![Codacy](https://www.codacy.com/assets/images/favicon.png) Issue found: [Must have at least one statement.](https://www.codacy.com/app/MyCoRe/mycore/pullRequest?prid=713546)","created_at":"2017-06-16T09:45:47Z","updated_at":"2017-06-16T09:45:47Z","html_url":"https://github.com/MyCoRe-Org/mycore/pull/290#discussion_r122405643","pull_request_url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290","_links":{"self":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/comments/122405643"},"html":{"href":"https://github.com/MyCoRe-Org/mycore/pull/290#discussion_r122405643"},"pull_request":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290"}}},"pull_request":{"url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290","id":125893553,"html_url":"https://github.com/MyCoRe-Org/mycore/pull/290","diff_url":"https://github.com/MyCoRe-Org/mycore/pull/290.diff","patch_url":"https://github.com/MyCoRe-Org/mycore/pull/290.patch","issue_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/290","number":290,"state":"open","locked":false,"title":"Issues/mcr 1637 rest api uploads","user":{"login":"rsteph-de","id":20067327,"avatar_url":"https://avatars1.githubusercontent.com/u/20067327?v=3","gravatar_id":"","url":"https://api.github.com/users/rsteph-de","html_url":"https://github.com/rsteph-de","followers_url":"https://api.github.com/users/rsteph-de/followers","following_url":"https://api.github.com/users/rsteph-de/following{/other_user}","gists_url":"https://api.github.com/users/rsteph-de/gists{/gist_id}","starred_url":"https://api.github.com/users/rsteph-de/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rsteph-de/subscriptions","organizations_url":"https://api.github.com/users/rsteph-de/orgs","repos_url":"https://api.github.com/users/rsteph-de/repos","events_url":"https://api.github.com/users/rsteph-de/events{/privacy}","received_events_url":"https://api.github.com/users/rsteph-de/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-06-15T19:22:39Z","updated_at":"2017-06-16T09:45:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3f71255984df6894d68fa0dbaf4903cfc79a28fb","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290/commits","review_comments_url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290/comments","review_comment_url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/290/comments","statuses_url":"https://api.github.com/repos/MyCoRe-Org/mycore/statuses/1c9407035503a9e70b6dc75c46749d9604ac77b9","head":{"label":"MyCoRe-Org:issues/MCR-1637-REST_API_Uploads","ref":"issues/MCR-1637-REST_API_Uploads","sha":"1c9407035503a9e70b6dc75c46749d9604ac77b9","user":{"login":"MyCoRe-Org","id":20062922,"avatar_url":"https://avatars3.githubusercontent.com/u/20062922?v=3","gravatar_id":"","url":"https://api.github.com/users/MyCoRe-Org","html_url":"https://github.com/MyCoRe-Org","followers_url":"https://api.github.com/users/MyCoRe-Org/followers","following_url":"https://api.github.com/users/MyCoRe-Org/following{/other_user}","gists_url":"https://api.github.com/users/MyCoRe-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/MyCoRe-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MyCoRe-Org/subscriptions","organizations_url":"https://api.github.com/users/MyCoRe-Org/orgs","repos_url":"https://api.github.com/users/MyCoRe-Org/repos","events_url":"https://api.github.com/users/MyCoRe-Org/events{/privacy}","received_events_url":"https://api.github.com/users/MyCoRe-Org/received_events","type":"Organization","site_admin":false},"repo":{"id":70219747,"name":"mycore","full_name":"MyCoRe-Org/mycore","owner":{"login":"MyCoRe-Org","id":20062922,"avatar_url":"https://avatars3.githubusercontent.com/u/20062922?v=3","gravatar_id":"","url":"https://api.github.com/users/MyCoRe-Org","html_url":"https://github.com/MyCoRe-Org","followers_url":"https://api.github.com/users/MyCoRe-Org/followers","following_url":"https://api.github.com/users/MyCoRe-Org/following{/other_user}","gists_url":"https://api.github.com/users/MyCoRe-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/MyCoRe-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MyCoRe-Org/subscriptions","organizations_url":"https://api.github.com/users/MyCoRe-Org/orgs","repos_url":"https://api.github.com/users/MyCoRe-Org/repos","events_url":"https://api.github.com/users/MyCoRe-Org/events{/privacy}","received_events_url":"https://api.github.com/users/MyCoRe-Org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MyCoRe-Org/mycore","description":"MyCoRe (acronym for My Content Repository) is an open source repository software framework for building disciplinary or institutional repositories, digital archives, digital libraries, and scientific journals.","fork":false,"url":"https://api.github.com/repos/MyCoRe-Org/mycore","forks_url":"https://api.github.com/repos/MyCoRe-Org/mycore/forks","keys_url":"https://api.github.com/repos/MyCoRe-Org/mycore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MyCoRe-Org/mycore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MyCoRe-Org/mycore/teams","hooks_url":"https://api.github.com/repos/MyCoRe-Org/mycore/hooks","issue_events_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/events{/number}","events_url":"https://api.github.com/repos/MyCoRe-Org/mycore/events","assignees_url":"https://api.github.com/repos/MyCoRe-Org/mycore/assignees{/user}","branches_url":"https://api.github.com/repos/MyCoRe-Org/mycore/branches{/branch}","tags_url":"https://api.github.com/repos/MyCoRe-Org/mycore/tags","blobs_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/refs{/sha}","trees_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MyCoRe-Org/mycore/statuses/{sha}","languages_url":"https://api.github.com/repos/MyCoRe-Org/mycore/languages","stargazers_url":"https://api.github.com/repos/MyCoRe-Org/mycore/stargazers","contributors_url":"https://api.github.com/repos/MyCoRe-Org/mycore/contributors","subscribers_url":"https://api.github.com/repos/MyCoRe-Org/mycore/subscribers","subscription_url":"https://api.github.com/repos/MyCoRe-Org/mycore/subscription","commits_url":"https://api.github.com/repos/MyCoRe-Org/mycore/commits{/sha}","git_commits_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/commits{/sha}","comments_url":"https://api.github.com/repos/MyCoRe-Org/mycore/comments{/number}","issue_comment_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/comments{/number}","contents_url":"https://api.github.com/repos/MyCoRe-Org/mycore/contents/{+path}","compare_url":"https://api.github.com/repos/MyCoRe-Org/mycore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MyCoRe-Org/mycore/merges","archive_url":"https://api.github.com/repos/MyCoRe-Org/mycore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MyCoRe-Org/mycore/downloads","issues_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues{/number}","pulls_url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls{/number}","milestones_url":"https://api.github.com/repos/MyCoRe-Org/mycore/milestones{/number}","notifications_url":"https://api.github.com/repos/MyCoRe-Org/mycore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MyCoRe-Org/mycore/labels{/name}","releases_url":"https://api.github.com/repos/MyCoRe-Org/mycore/releases{/id}","deployments_url":"https://api.github.com/repos/MyCoRe-Org/mycore/deployments","created_at":"2016-10-07T06:02:02Z","updated_at":"2017-03-30T15:29:08Z","pushed_at":"2017-06-16T09:40:57Z","git_url":"git://github.com/MyCoRe-Org/mycore.git","ssh_url":"git@github.com:MyCoRe-Org/mycore.git","clone_url":"https://github.com/MyCoRe-Org/mycore.git","svn_url":"https://github.com/MyCoRe-Org/mycore","homepage":null,"size":226452,"stargazers_count":9,"watchers_count":9,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":8,"forks":2,"open_issues":8,"watchers":9,"default_branch":"master"}},"base":{"label":"MyCoRe-Org:master","ref":"master","sha":"8f095f2971f44930a3863ef257be317cf5f16355","user":{"login":"MyCoRe-Org","id":20062922,"avatar_url":"https://avatars3.githubusercontent.com/u/20062922?v=3","gravatar_id":"","url":"https://api.github.com/users/MyCoRe-Org","html_url":"https://github.com/MyCoRe-Org","followers_url":"https://api.github.com/users/MyCoRe-Org/followers","following_url":"https://api.github.com/users/MyCoRe-Org/following{/other_user}","gists_url":"https://api.github.com/users/MyCoRe-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/MyCoRe-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MyCoRe-Org/subscriptions","organizations_url":"https://api.github.com/users/MyCoRe-Org/orgs","repos_url":"https://api.github.com/users/MyCoRe-Org/repos","events_url":"https://api.github.com/users/MyCoRe-Org/events{/privacy}","received_events_url":"https://api.github.com/users/MyCoRe-Org/received_events","type":"Organization","site_admin":false},"repo":{"id":70219747,"name":"mycore","full_name":"MyCoRe-Org/mycore","owner":{"login":"MyCoRe-Org","id":20062922,"avatar_url":"https://avatars3.githubusercontent.com/u/20062922?v=3","gravatar_id":"","url":"https://api.github.com/users/MyCoRe-Org","html_url":"https://github.com/MyCoRe-Org","followers_url":"https://api.github.com/users/MyCoRe-Org/followers","following_url":"https://api.github.com/users/MyCoRe-Org/following{/other_user}","gists_url":"https://api.github.com/users/MyCoRe-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/MyCoRe-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MyCoRe-Org/subscriptions","organizations_url":"https://api.github.com/users/MyCoRe-Org/orgs","repos_url":"https://api.github.com/users/MyCoRe-Org/repos","events_url":"https://api.github.com/users/MyCoRe-Org/events{/privacy}","received_events_url":"https://api.github.com/users/MyCoRe-Org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MyCoRe-Org/mycore","description":"MyCoRe (acronym for My Content Repository) is an open source repository software framework for building disciplinary or institutional repositories, digital archives, digital libraries, and scientific journals.","fork":false,"url":"https://api.github.com/repos/MyCoRe-Org/mycore","forks_url":"https://api.github.com/repos/MyCoRe-Org/mycore/forks","keys_url":"https://api.github.com/repos/MyCoRe-Org/mycore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MyCoRe-Org/mycore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MyCoRe-Org/mycore/teams","hooks_url":"https://api.github.com/repos/MyCoRe-Org/mycore/hooks","issue_events_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/events{/number}","events_url":"https://api.github.com/repos/MyCoRe-Org/mycore/events","assignees_url":"https://api.github.com/repos/MyCoRe-Org/mycore/assignees{/user}","branches_url":"https://api.github.com/repos/MyCoRe-Org/mycore/branches{/branch}","tags_url":"https://api.github.com/repos/MyCoRe-Org/mycore/tags","blobs_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/refs{/sha}","trees_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MyCoRe-Org/mycore/statuses/{sha}","languages_url":"https://api.github.com/repos/MyCoRe-Org/mycore/languages","stargazers_url":"https://api.github.com/repos/MyCoRe-Org/mycore/stargazers","contributors_url":"https://api.github.com/repos/MyCoRe-Org/mycore/contributors","subscribers_url":"https://api.github.com/repos/MyCoRe-Org/mycore/subscribers","subscription_url":"https://api.github.com/repos/MyCoRe-Org/mycore/subscription","commits_url":"https://api.github.com/repos/MyCoRe-Org/mycore/commits{/sha}","git_commits_url":"https://api.github.com/repos/MyCoRe-Org/mycore/git/commits{/sha}","comments_url":"https://api.github.com/repos/MyCoRe-Org/mycore/comments{/number}","issue_comment_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/comments{/number}","contents_url":"https://api.github.com/repos/MyCoRe-Org/mycore/contents/{+path}","compare_url":"https://api.github.com/repos/MyCoRe-Org/mycore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MyCoRe-Org/mycore/merges","archive_url":"https://api.github.com/repos/MyCoRe-Org/mycore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MyCoRe-Org/mycore/downloads","issues_url":"https://api.github.com/repos/MyCoRe-Org/mycore/issues{/number}","pulls_url":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls{/number}","milestones_url":"https://api.github.com/repos/MyCoRe-Org/mycore/milestones{/number}","notifications_url":"https://api.github.com/repos/MyCoRe-Org/mycore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MyCoRe-Org/mycore/labels{/name}","releases_url":"https://api.github.com/repos/MyCoRe-Org/mycore/releases{/id}","deployments_url":"https://api.github.com/repos/MyCoRe-Org/mycore/deployments","created_at":"2016-10-07T06:02:02Z","updated_at":"2017-03-30T15:29:08Z","pushed_at":"2017-06-16T09:40:57Z","git_url":"git://github.com/MyCoRe-Org/mycore.git","ssh_url":"git@github.com:MyCoRe-Org/mycore.git","clone_url":"https://github.com/MyCoRe-Org/mycore.git","svn_url":"https://github.com/MyCoRe-Org/mycore","homepage":null,"size":226452,"stargazers_count":9,"watchers_count":9,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":8,"forks":2,"open_issues":8,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290"},"html":{"href":"https://github.com/MyCoRe-Org/mycore/pull/290"},"issue":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/290"},"comments":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/issues/290/comments"},"review_comments":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290/comments"},"review_comment":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/pulls/290/commits"},"statuses":{"href":"https://api.github.com/repos/MyCoRe-Org/mycore/statuses/1c9407035503a9e70b6dc75c46749d9604ac77b9"}}}}
{"actor":{"display_login":"codacy-bot"}}