diff --git a/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java b/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java index f87c49e8b650ba1c63e5d69d3b0d9dcb1eca7d74..4b67f562f761aa97a809c9e6a8857763e6aeae6e 100644 --- a/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java +++ b/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java @@ -1,9 +1,12 @@ package net.jami.jams.common.updater; +import java.util.HashMap; + public interface AppUpdater { - String getLocalVersions(); - String getRemoteVersions(); + HashMap<String,FileDescription> getLocalVersions(); + HashMap<String,FileDescription> getRemoteVersions(); + boolean getUpdateAvailable(); void setLicense(); void doUpdate(); diff --git a/jams-common/src/main/java/net/jami/jams/common/updater/subscription/LicenseInformation.java b/jams-common/src/main/java/net/jami/jams/common/updater/subscription/LicenseInformation.java index 6954ac8b3fa04867bbe1a5b9927e795fb60d7ec4..a406d9069d3c80ed6489311ad9ec36bbf37c2ab8 100644 --- a/jams-common/src/main/java/net/jami/jams/common/updater/subscription/LicenseInformation.java +++ b/jams-common/src/main/java/net/jami/jams/common/updater/subscription/LicenseInformation.java @@ -1,6 +1,7 @@ package net.jami.jams.common.updater.subscription; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import java.util.ArrayList; @@ -8,10 +9,13 @@ import java.util.List; @Getter @Setter +@NoArgsConstructor public class LicenseInformation { //TODO: Possibly add the expiry date here based on the certificate. private SubscriptionType type = SubscriptionType.COMMUNITY; private List<String> products = new ArrayList<>(); + + } diff --git a/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java b/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java index 93c6756e1def2d289cfa06d9927b30318ce5fb6b..2e4801f8e621c7681077a6712d39ab947fd17c1d 100644 --- a/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java +++ b/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java @@ -173,10 +173,9 @@ public class X509Utils { LdapName ln = new LdapName(certificate.getSubjectDN().toString()); for (Rdn rdn : ln.getRdns()) { try { - return JsonIterator.deserialize(Base64.getDecoder().decode(((String) rdn.getValue()).getBytes()), + return JsonIterator.deserialize(Base64.getDecoder().decode(rdn.getValue().toString().getBytes()), LicenseInformation.class); - } catch (IllegalArgumentException e) { - //Do nothing here, because this is not critical and thit wi + } catch (Exception e) { } } return null; diff --git a/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java b/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java index 0cafd76b7e285fdec3ed28e53b49f463e8697cf8..682704d7c5a22732d15db3eae6bf35451412e0b8 100644 --- a/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java +++ b/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java @@ -13,7 +13,7 @@ class VersioningUtilsTest { @Disabled public void testFileScan(){ HashMap<String, FileDescription> res = VersioningUtils.checkVersion(null); - Assertions.assertEquals(6,res.size(),"Incorrect number of versions detected!"); + Assertions.assertEquals(7,res.size(),"Incorrect number of versions detected!"); } diff --git a/jams-server/src/main/java/net/jami/jams/server/licensing/LicenseService.java b/jams-server/src/main/java/net/jami/jams/server/licensing/LicenseService.java index 8b0d5b1f1de30d62415b492d6a163c03f4f0d9ba..2cda30c14695c034a22bc92afb7e31403561c485 100644 --- a/jams-server/src/main/java/net/jami/jams/server/licensing/LicenseService.java +++ b/jams-server/src/main/java/net/jami/jams/server/licensing/LicenseService.java @@ -55,6 +55,8 @@ public class LicenseService { //If all these checks have passed then: Server.activated.set(true); licenseInformation = X509Utils.extractSubscriptionTypeFromCertificate(certificate); + log.info("Server is activated with valid license: {}", Server.activated.get()); + log.info("License type: {}",licenseInformation.getType()); } catch (Exception e){ log.error("A generic occurred while trying to load your license or your license could not be found"); diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/NeedsUpdateServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/NeedsUpdateServlet.java deleted file mode 100644 index bdf31aa6236c03d0c1b2aa49ba0e9c20dd87b159..0000000000000000000000000000000000000000 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/NeedsUpdateServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.jami.jams.server.servlets.api.update; - -import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import net.jami.jams.ca.JamsCA; - -import java.io.IOException; - -@WebServlet("/api/checkupdate") -public class NeedsUpdateServlet extends HttpServlet { - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) { - resp.setHeader("Access-Control-Allow-Origin", JamsCA.serverDomain); - resp.setContentType("application/json"); - } - - @Override - protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - - } -} diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/SubscriptionServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/SubscriptionServlet.java index 8aef26c9406b6fed42e424b128c0e0ea3edc3324..d98eb268c63e0377f99cb64b85d5c7e5134084a6 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/SubscriptionServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/update/SubscriptionServlet.java @@ -30,7 +30,7 @@ public class SubscriptionServlet extends HttpServlet { // on disk.. @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - //Create the keystore based on the uploadaded keypair. + req.getInputStream().readAllBytes(); } } diff --git a/jams-server/src/main/resources/oem/ca.crt b/jams-server/src/main/resources/oem/ca.crt new file mode 100644 index 0000000000000000000000000000000000000000..4e4a1fdcdc732799485e301a3686560a26e1ef96 --- /dev/null +++ b/jams-server/src/main/resources/oem/ca.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- diff --git a/jams-server/src/test/java/net/jami/jams/server/licensing/LicenseServiceTest.java b/jams-server/src/test/java/net/jami/jams/server/licensing/LicenseServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e629ce7a25fbd33f0506d9fac2e93c679237e054 --- /dev/null +++ b/jams-server/src/test/java/net/jami/jams/server/licensing/LicenseServiceTest.java @@ -0,0 +1,15 @@ +package net.jami.jams.server.licensing; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class LicenseServiceTest { + + @Test + public void loadLicenseTest(){ + LicenseService licenseService = new LicenseService(); + licenseService.loadLicense(); + } + +} \ No newline at end of file diff --git a/jams-server/src/test/resources/oem/ca.crt b/jams-server/src/test/resources/oem/ca.crt new file mode 100644 index 0000000000000000000000000000000000000000..4e4a1fdcdc732799485e301a3686560a26e1ef96 --- /dev/null +++ b/jams-server/src/test/resources/oem/ca.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- diff --git a/samples/license.dat b/samples/license.dat new file mode 100644 index 0000000000000000000000000000000000000000..6fc3172735bd59eeeb6a8fdbd2d5ee5493836107 --- /dev/null +++ b/samples/license.dat @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZxekNDQTVNQ0FRNHdEUVlKS29aSWh2Y05BUUVMQlFBd2dac3hDekFKQmdOVkJBWVRBa05CTVFzd0NRWUQKVlFRSUV3SlJRekVSTUE4R0ExVUVCeE1JVFc5dWRISmxZV3d4SURBZUJnTlZCQW9URjFOaGRtOXBjaTFtWVdseQpaU0JNYVc1MWVDQkpibU11TVEwd0N3WURWUVFMRXdSS1FVMVRNUm93R0FZRFZRUURFeEZLUVUxVElFeHBZMlZ1CmMybHVaeUJEUVRFZk1CMEdDU3FHU0liM0RRRUpBUllRYzNWd2NHOXlkRUJxWVcxcExtNWxkREFlRncweU1EQXkKTVRneE56RTNNVFJhRncweU1UQXlNVGN4TnpFM01UUmFNSUdhTVFzd0NRWURWUVFHRXdKRFFURVpNQmNHQTFVRQpDZ3dRVTJGMmIybHlSbUZwY21WTWFXNTFlREVOTUFzR0ExVUVBd3dFZEdWemRERmhNRjhHQTFVRURReFlaWGxLCk1HVllRbXhKYW05blNXeENVMUpWTVVwV1ZUQnBURU5CYVdOSVNuWmFTRlpxWkVoTmFVOXBRbUpKYTBaRlVUQTUKVDFSclZrUldSVGxUU1dsM1owbHJlRVZSVmtKRVZEQTFUMUpWVGxWVU1VbHBXRmd3UFRDQ0FpSXdEUVlKS29aSQpodmNOQVFFQkJRQURnZ0lQQURDQ0Fnb0NnZ0lCQU5RcWRJMTlQT0pPc0tOQWJkd3dPSGZmaUZWQUtKTXBqNDQxCjkvaENLQW82ZklaZm9lSGZ6bHRkUTR3S2tFK1FlbHZsdmpoOThGQjRLTzZGMWh1M2FoNGVXTDNxVUF2MWc0cFQKd08yY0s2VDNYSDU1MHIxOEQ1ajIvS08reTBlZWlidHhRc3ZwazFFeVJTUVlsWGZqZnBmS3V3bU1CZ2lHRVFLeApsaEtUdzZnKzBtVHhIa1A1YjcrdVJSc0xYUkpWc0VMRVBYOFZpdk4xQWRUMk5QZjczNEFIOTVra2RoKzVrdlpMCnNwN2ZZRHQ3Q1JJUjNRY0UzejJzRUt3dG51UjZLNEtPQlZjeENCVGgwZjBtWEhicHcySmVBK2pZQ2xrc3ZqOFUKc2JCb1pLTi9FUzRqOEYvN0RhR29qY1JyNEZlcDl0c2lTelQwY3ZMOTM1Zys0UTVSQlBQSkpLUmFsWS81dUJVVQoveFltTDBDajFEWkx3VWpGSXp5OGMwakM0U3FFbmRSRlVtaHN1MHllamFjam5ZRmYyRVY1dkdWM0xnRFY5M2JaCjJxNWVLQjVLRE5TMDVqVGEyZWVNUklJSzVjeDgyQ1NZT0ZxQSswazhTbm1UdllNdy9FUkZvVFdoelVZRDhBL0cKNWFBekFoOEZXd091Mkt1VlJaVW8zd1E2RHc3ejBicE9uSEprNjBUN0Z2QTJqYWVLL3k4WlNvYzFGbElETUVCNwp5VEY1bGVKUTRLVExWL2UzTytSdWJ5TklQRS9LL1kvOE5CMFc0eUc0R014d0FObUd4MmlxbEJiZjJHdG5obE1TCklUc09qV0tJY0R1SzV0SEd6MUdJbzNxK1haOUZoRmlSNnVpMDV1SW1GK1MrNmMvaFFPNXBYSTNhODRncE9mQTQKNS9Hb2xTSWJBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFDcGFqTk1tMTh3NnAxc1IxUzVlZk5JTgppOXZYZ2U2eDRXM3RKTkhFTnhuVW9FWUVUK29NejRNWXBnVXZoNC9pKy8xK25YRnZSdlZIUkdpTnFsd2xUTVRTClYvdFFkSzgvMEdqNjVkZlJvWm1ZT3pqRGFhd05oMFlNSDNqZU9CbzBuN3lvRWxTNldBODJ3OFowSGs5VUFvQzQKWnZqS20vUk1Fc1ZGUlpoVXVnQzY0V1J3a3VXYjEwTnU4dW9WK2QwaXk0K0tmSFJPM3FMZkVJR3pUTjhEVmNKKwpRZ0pGZ1NteFNZSWlUT1ZmWm9MUzR1MFQ3cTJXbkI2cGFXNngxYTVYMWhNRTNheW1Ya3p0bGRVTERrdklNWkJ2ClZwcmNia3piV3FucDc5N0ZJQTVzNjhFeDBaODV3T0dQM1E1NDhyYW5Va29aMVVCd3huVDMrWFBhNUFoWiswSTUKOTYwNWhrSHo5UlJMRzFFTEs1bHVPNWNXY2xab0kxMTBMYW91WHJIWGtWNEZDQWoxbDV0QnhkdGFpbmlvcHlTaApMM2crTjROR0htL2lHWkJzUnZtV2M3U1d3eTl4VzAvY2R5TkRBTjlreEhCNHRQcTRLZzhTYzkzeHhLNTZDd3R6CmpkMmJuSHFKa2FwMWZZUkc1OHAzTGF2Wnp0S3V6VTJnU0UvQnpXaDRVdDJqYTNEUDNnL0dkNkg0aW1YMytXTDEKSDBHSWFUcUJlZ29DVXFjaCtyMG83UllBVVVodHlIREc4ckxUaUF6emNEcnJyNkxHTWxYbU4yUnJPRDVySm9zVAppRE1VMWxxR2NHRFNQRjE0UXlZb2p5b3NxbURvQUlmSWZWWUJ5cHZtZEI0VWdvTVdCRHFmUEtESUpPWUswS2NRCmZ3Sm9YMkZ6YlR2bTJSV1hzd0wrCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1Mwd2dna3BBZ0VBQW9JQ0FRRFVLblNOZlR6aVRyQ2oKUUczY01EaDMzNGhWUUNpVEtZK09OZmY0UWlnS09ueUdYNkhoMzg1YlhVT01DcEJQa0hwYjViNDRmZkJRZUNqdQpoZFlidDJvZUhsaTk2bEFMOVlPS1U4RHRuQ3VrOTF4K2VkSzlmQStZOXZ5anZzdEhub203Y1VMTDZaTlJNa1VrCkdKVjM0MzZYeXJzSmpBWUloaEVDc1pZU2s4T29QdEprOFI1RCtXKy9ya1ViQzEwU1ZiQkN4RDEvRllyemRRSFUKOWpUMys5K0FCL2VaSkhZZnVaTDJTN0tlMzJBN2V3a1NFZDBIQk44OXJCQ3NMWjdrZWl1Q2pnVlhNUWdVNGRIOQpKbHgyNmNOaVhnUG8yQXBaTEw0L0ZMR3dhR1NqZnhFdUkvQmYrdzJocUkzRWErQlhxZmJiSWtzMDlITHkvZCtZClB1RU9VUVR6eVNTa1dwV1ArYmdWRlA4V0ppOUFvOVEyUzhGSXhTTTh2SE5Jd3VFcWhKM1VSVkpvYkx0TW5vMm4KSTUyQlg5aEZlYnhsZHk0QTFmZDIyZHF1WGlnZVNnelV0T1kwMnRubmpFU0NDdVhNZk5na21EaGFnUHRKUEVwNQprNzJETVB4RVJhRTFvYzFHQS9BUHh1V2dNd0lmQlZzRHJ0aXJsVVdWS044RU9nOE84OUc2VHB4eVpPdEUreGJ3Ck5vMm5pdjh2R1VxSE5SWlNBekJBZThreGVaWGlVT0NreTFmM3R6dmtibThqU0R4UHl2MlAvRFFkRnVNaHVCak0KY0FEWmhzZG9xcFFXMzloclo0WlRFaUU3RG8xaWlIQTdpdWJSeHM5UmlLTjZ2bDJmUllSWWtlcm90T2JpSmhmawp2dW5QNFVEdWFWeU4ydk9JS1Rud09PZnhxSlVpR3dJREFRQUJBb0lDQUFiYytMZzYvT1UxTm5HUmUveExjd2d0CnF2TlhCL2o2dHpJYWZOTURFTmlEMjlOYzlKZWg3Y0wyMldDR1Z2Uzc3N2xaVFRYMm5QZDlhNVdMcnNsbXZZQUwKNjBMNWVXMXBtNysxeGQvcDFWK1l3TjAyZzZLdGlMT2lDYm9pU2VFZk44VmdmSkNzRlovaXlHbktnY3RIQ0tsUQpYWXlKZ3doempjbFFoVkpFaFdmRDRIcHpjazh3bW5UUTVsdGhtcmtsSEhhTWNwRFIyWlRXakNDZmRrY3ZWcU9GCm5uVE53U1IxbEZOelQydmtQZkN1b2pSN2IzTHlyV1lKVXVDKytRemJCdDFLU3RIdlBCdXcwbUltQTRlMU9DVE8KZGNIcWV5czNUMUFyRXpScHJCZTkzSWhwa1RVSm9mOUF2SlZHQ0JQTjQ3WmkvWnZRN0liL3YyUGxaTkpadkpjMwpLYTJ6dmZoMlNFUVhjRDlDTlJDdnNlV1hQSVYzSkd4VGlWR2VjMzVydEhIbVMwUExrdGJDVTh1dXczWWlXR3dtCk9lcHhiY2xvWjBiMHdTQXFtWTJsTFUzMlR6UG10V01ValExZkRlelFIM1ZzRVBIZUpZbEswS0JUbkdSOXRmTVUKL0JtRUxHbUgrblYvd0owTExrS0VNa0dPTXBIV1VQa0o5TGZ2TGVGWlEyNjZrWVNGYnRhblpKbkRYaXI3UzBQUwpScUhtSHFOWXlBQ2ZxNGJNVFBIRDdCRkJOdkZCWFpvWHlwNDZTVFdWMmdtSmFYQWNCSG55cFBjVGJodG9KUkFkCjNqdFF1NzZHU1ZxWlNTcGg0anVYeDhHSE1oRnlSMjJVVno5blZpeXE3VUlJd1NPQUJSMGV6UUNGRE9ENXpIZ3YKQ0x6WVY3RWUzSDMraVllV1JySkJBb0lCQVFEMUNucmgxYm0zbFR2SGJPTHp6OW9VVUVUM3h5b0diQXhNaTNiNgowZ0xHb25CUEpSaUJhUFNUWHdsbWRqWkVCY25PU3N6WGtNcTB1QkZsK0xiYTE4M3dsVTc0L2dvMHJRajNPeVdrClRWVzBJdFY1bUVGQUtSN1YxMzdMUi9uSFBmbUorQjlIdEh2dTIrVnh1c3RXcnVZMUszMHpqUHl5VndpeEZra1MKVFo1RTl2bWlNbE1jMk5uVmF4WmdBYUhjZnJBcTl0UEErT0tWVktWc0dYSXppMFZNNWF6UEd5d2FsK3RYbUo3Vwp2YmxaR0UvRmRxYTBycmd2eG1OSUw0UzA3ajlZdHMwMHAramY2YmxQVHRJUnBzQ3lTM2VUSEZRVW9VbThMd2o1CkM1YkVJQlMzbkNQWkpTRHFWbER0VGx1Q0luSVpEY0JrMExpL2JjUWkxVjBhWDhKdEFvSUJBUURkcDVVRGFsRmwKeXFjYTBDOEpSdVo0Qk1EanFWOEc4THVOSzhrZGEwNTYrcmExeTMxMm1KVS9DaVdrSTgzSjRoOFgzNlRITWFPQwp2QmV1elJYNTdiK1kzb0ptUlpyMk0ycHNjbTFMSmdFcHd5RktTMVk1S2lTUHdkQzdWSzNlVnRTRnFVU3dVd2RnCjZmYmRtMGRjYU1DNlcwUzhmUEptOEk4REtoS1lGSFNtaklFb0NhRGJlRk0xczNDTE5FL2oySU1Ya2YxRHY0MXkKU0prck0xQXpQQjFrMkloQXpXY2JWRmNjRUxnRVpuUEg2eDd6dVdvaDVIb1BzczZLc1pldit2RHZoeXJoWnJLVwpIZkZhQ1FnRUVtaVk0UHdmN2lnbzVaZy95K2JWRWNxTHlSbVdUVW9JSHRiNnhuMWFJZmpnNEd0M3pkbmp0MmRCCmd5SVBYaWhoK21HbkFvSUJBUUMvMC9GNDVDRGNlQVp4UzJ1c0pMWjdtbzh6VGdZM090U3lBNmdrR000MWhDcloKdXBlaGozR1FBU0ZSeGc4YlYxQ3huMXNYRW5HdDRqODBqZTFRQ3d0Y1lQYU85QWszVFpLc1FQQnAzR1RRZlVpVApSVDhucEVsUWJNQUZFWmFYaEl2YWw1U2RSTXlVcEM3TnhzYXlXSDg5ZG9zd0ZSb3AzdnFkNzIxSzE5cWo4SmhpCmduVVFLeTcwNVQyQjhTVXVnVHNXbDE0VVBvTGJGb1hkeDFuZ3doR0JibmZITm1WamVEU3p3WFh2ZEYwcVExOEgKbmFoSjRGR3VqT2RpTmxqMGIyTEY1MjFqNEdMdEQ0S1RkSWY5YTRhRXpaR1JaK2JtczVFT3NkK2JYNWdxZDFiZwptbXB4N3FBQzg0bXRETitVVTdUd3FoUkltQ0ZaTXV3TnZPeUMzaDVOQW9JQkFRQ1VKTjlwaXZPZ1R4UGt6ZVBDCkZZc1FDRTFMVy9aUlV6Qm5LQzZnNVFsdEZJaHRkUFlELy9Nd1VQM2JlTHFnQmV1Mkx4bVlzTXFTSkZqSDBmYXcKTm9EcUVUMmlVVDlDOGhaZEtSVjNObzFzZGlpWDJVWmxxbzhKTGdidVRhaHZoQ1ZDdUdGYVlBUDhlQ013OWdsNQo3K0Z3TEhRQ2JwZ3N5UGNzckVBRk9SYkdBZjZJM2ZhTytSclVOM3d1N2VXL2FRUWxDc1AxTmQrNTFGL2JDYzYrCmo1MHR1N05GYklOUE5zMkp5bnJUSmc2WVBjTlFMa3FMSUlPY1htdkJNdlVvLzFWdElqQTh1a0QrS0VFWlpoUGYKZE5aSDU0ZGJaL2ViYmVpV0t4ZTZyTXR0SmhsZDVZWm5hd1ZRVXIyUk1rZC9OVDllc1V6QjcrQ3BYcFd6SThGbAp5c3pkQW9JQkFIWklRem9SWkplR1A4cWV2RzYwOXJvUFFpMkQwTU1MU0xJaDRLL3JNM282MTF2QUsyaVhra0ZmCkVSalpZMHhoSEhMekVoYmtaaXI1RTRUVTMwSFArT1BBb3pydlcwMFFLbjNVRnh0bHl1WjQ2aElVeEZ2ZkFxM28Kb2hha2VLR0piay9OSzNBZUxUS3FUUEU0QjJLZmRnVWwwZ1JsR0dnTHFqaUw3YktOZlJqank3Unlxa2hSRFhRVwpoejJjTEc1MGg3Tm1GekpoQjlTSk1xNWhiekRTSXYxSEtRdHlkdGxqUjVWaWRCdkhNSmkrckozQTlTVWQ5YmZUClZLeWdtaDM5UUVBZkVmT0tOR1ZwNUtNaHM1RUhxaStRK2prYnlxcHQvNEh6RzRWZTN0UkI2OVF2Zjg5cm00LzYKSE1vcXhTWFpFeHdkTEt5WDJKZ1Exdmw0T09NdjdSTT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo= \ No newline at end of file diff --git a/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java b/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java index 371c44e0f71f97c63ceb537137f272cc7d186b5e..d33014568ddbaeb1e8473526cbe3f61774f13f77 100644 --- a/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java +++ b/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java @@ -4,7 +4,11 @@ import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.jami.jams.common.updater.AppUpdater; +import net.jami.jams.common.updater.FileDescription; +import net.jami.jams.common.utils.VersioningUtils; +import java.util.HashMap; +import java.util.Timer; import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @@ -12,24 +16,31 @@ import java.util.concurrent.atomic.AtomicBoolean; @Setter public class JAMSUpdater implements AppUpdater { - private final AtomicBoolean updateAvailable = new AtomicBoolean(false); + public static final AtomicBoolean updateAvailable = new AtomicBoolean(false); private final AtomicBoolean doUpdate; - private final UpdateDownloader updateDownloader = new UpdateDownloader(); + private final UpdateCheckTask updateCheckTask = new UpdateCheckTask(); + private final Timer timer = new Timer(); public JAMSUpdater(AtomicBoolean doUpdate) { this.doUpdate = doUpdate; + timer.schedule(new UpdateCheckTask(),0,150_000); } @Override - public String getLocalVersions() { - return null; + public HashMap<String, FileDescription> getLocalVersions() { + return VersioningUtils.checkVersion(null); } @Override - public String getRemoteVersions() { + public HashMap<String,FileDescription> getRemoteVersions() { return null; } + @Override + public boolean getUpdateAvailable() { + return updateAvailable.get(); + } + @Override public void setLicense() { //Trigger reading the license from disk. @@ -39,6 +50,7 @@ public class JAMSUpdater implements AppUpdater { public void doUpdate() { //Some logic here about replacing the existing files. + //Notify back up-stream to the launcher that we want the update to happen. doUpdate.set(true); synchronized (doUpdate){ diff --git a/updater/src/main/java/net/jami/jams/updater/UpdateCheckTask.java b/updater/src/main/java/net/jami/jams/updater/UpdateCheckTask.java index ac664a8a00e3bee39a746c722ca885bb84663698..a462c04be108c67e049381fe2e1f0653a56dc585 100644 --- a/updater/src/main/java/net/jami/jams/updater/UpdateCheckTask.java +++ b/updater/src/main/java/net/jami/jams/updater/UpdateCheckTask.java @@ -1,12 +1,19 @@ package net.jami.jams.updater; +import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import net.jami.jams.common.updater.FileDescription; +import java.util.HashMap; import java.util.TimerTask; @Slf4j +@Getter +@Setter public class UpdateCheckTask extends TimerTask { + private HashMap<String, FileDescription> remoteData; protected UpdateCheckTask() { } @@ -14,6 +21,11 @@ public class UpdateCheckTask extends TimerTask { @Override public void run() { try { + remoteData = new HashMap<>(); + //Download the info from the remote server. + + //Compare with local -> if(remote > local) + JAMSUpdater.updateAvailable.set(true); } catch (Exception e){ diff --git a/updater/src/main/java/net/jami/jams/updater/UpdateDaemon.java b/updater/src/main/java/net/jami/jams/updater/UpdateDaemon.java deleted file mode 100644 index 11a7225008fb16d4de167322e0939b32d3b2558b..0000000000000000000000000000000000000000 --- a/updater/src/main/java/net/jami/jams/updater/UpdateDaemon.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.jami.jams.updater; - -import lombok.Getter; -import lombok.Setter; - -import java.util.Timer; - -@Getter -@Setter -public class UpdateDaemon extends Timer { - - //TODO: This should come from the resources file. - public static final String UPDATE_SERVER_URI = "https://jami.net"; - - public UpdateDaemon() { - this.schedule(new UpdateCheckTask(),0,150_000); - } - -} diff --git a/updater/src/main/java/net/jami/jams/updater/UpdateDownloader.java b/updater/src/main/java/net/jami/jams/updater/UpdateDownloader.java index f8123accc3d4540b84c6b4477443fc1c3b0f4109..9c753477c47666582b94d9b8549dee3851a48350 100644 --- a/updater/src/main/java/net/jami/jams/updater/UpdateDownloader.java +++ b/updater/src/main/java/net/jami/jams/updater/UpdateDownloader.java @@ -11,19 +11,10 @@ public class UpdateDownloader { private SSLSocketFactory sslSocketFactory; - //returns the activation status of the server. - public boolean getActivationStatus(){ - return loadLicense(); - } - - public boolean doUpdate(){ + //TODO: Download the files and dump them into a tmp folder. + public boolean downloadFiles(){ try { - if (!loadLicense()) { - log.warn("This server does not have a valid license, no files will be download and no update" + - " will take place..."); - return false; - } return true; } catch (Exception e){ @@ -32,26 +23,5 @@ public class UpdateDownloader { } } - private boolean loadLicense(){ - try { - //We assume the keystore already exists, because it gets created upon upload. - //Basically just load the JKS keystore here. - - - - //TODO: Load keystore from file. - //Initialize the SSL context & load the SFL trust store. - SSLContext sslContext = SSLContext.getInstance("SSL"); - //sslContext.init(kmf.getKeyManagers(), new SFLTrustStore[]{new SFLTrustStore()},null); - log.info("License loaded successfully!"); - sslSocketFactory = sslContext.getSocketFactory(); - return true; - } - catch (Exception e){ - log.error("An error occurred while trying to load the license: {}",e.getMessage()); - return false; - } - } - } diff --git a/updater/src/main/java/net/jami/jams/updater/SFLTrustStore.java b/updater/src/main/java/net/jami/jams/updater/internal/SFLTrustStore.java similarity index 91% rename from updater/src/main/java/net/jami/jams/updater/SFLTrustStore.java rename to updater/src/main/java/net/jami/jams/updater/internal/SFLTrustStore.java index 3f7b5cc2a32221b34608c992cd13d59d1bfe3916..17564f6c44ac0a3839e2d483cdf17f8227f456a8 100644 --- a/updater/src/main/java/net/jami/jams/updater/SFLTrustStore.java +++ b/updater/src/main/java/net/jami/jams/updater/internal/SFLTrustStore.java @@ -1,4 +1,4 @@ -package net.jami.jams.updater; +package net.jami.jams.updater.internal; import lombok.extern.slf4j.Slf4j; import net.jami.jams.common.utils.X509Utils; @@ -14,6 +14,8 @@ public class SFLTrustStore implements X509TrustManager { X509Certificate[] sflCertificate = new X509Certificate[1]; //TODO: This just returns the SavoirFaireLinux CA everywhere - get this from the OEM resources folder. + //Also keep in mind that since we fork off the launcher, it will not scan this one, but rather + //The launcher. public SFLTrustStore() { try { InputStream is = SFLTrustStore.class.getClassLoader().getResourceAsStream("ca.crt");