From 9585c0b048d93e0893b33ca59866c1a944019f96 Mon Sep 17 00:00:00 2001 From: Unrud Date: Wed, 31 May 2017 13:18:42 +0200 Subject: [PATCH] Web interface for managing calendars and addressbooks --- config | 3 +- radicale/config.py | 2 +- radicale/web.py | 42 + radicale/web/css/fonts.css | 12 + radicale/web/css/fonts/COPYRIGHT.txt | 1 + radicale/web/css/fonts/LICENSE.txt | 202 ++++ radicale/web/css/fonts/Roboto-Light.woff2 | Bin 0 -> 62832 bytes radicale/web/css/fonts/Roboto-Regular.woff2 | Bin 0 -> 63412 bytes radicale/web/css/icon.png | Bin 0 -> 1069 bytes radicale/web/css/main.css | 44 + radicale/web/fn.js | 964 ++++++++++++++++++++ radicale/web/index.html | 105 +++ 12 files changed, 1373 insertions(+), 2 deletions(-) create mode 100644 radicale/web/css/fonts.css create mode 100644 radicale/web/css/fonts/COPYRIGHT.txt create mode 100644 radicale/web/css/fonts/LICENSE.txt create mode 100644 radicale/web/css/fonts/Roboto-Light.woff2 create mode 100644 radicale/web/css/fonts/Roboto-Regular.woff2 create mode 100644 radicale/web/css/icon.png create mode 100644 radicale/web/css/main.css create mode 100644 radicale/web/fn.js create mode 100644 radicale/web/index.html diff --git a/config b/config index dd7b385..9ce8e1f 100644 --- a/config +++ b/config @@ -119,7 +119,8 @@ [web] # Web interface backend -#type = none +# Value: none | internal +#type = internal [logging] diff --git a/radicale/config.py b/radicale/config.py index 0010dea..03aaffe 100644 --- a/radicale/config.py +++ b/radicale/config.py @@ -149,7 +149,7 @@ INITIAL_CONFIG = OrderedDict([ "type": str})])), ("web", OrderedDict([ ("type", { - "value": "none", + "value": "internal", "help": "web interface backend", "type": str})])), ("logging", OrderedDict([ diff --git a/radicale/web.py b/radicale/web.py index b2e8225..251ee14 100644 --- a/radicale/web.py +++ b/radicale/web.py @@ -14,9 +14,16 @@ # You should have received a copy of the GNU General Public License # along with Radicale. If not, see . +import os +import posixpath +import time from http import client from importlib import import_module +import pkg_resources + +from . import storage + NOT_FOUND = ( client.NOT_FOUND, (("Content-Type", "text/plain"),), "The requested resource could not be found.") @@ -43,6 +50,8 @@ def load(configuration, logger): web_type = configuration.get("web", "type") if web_type in ("None", "none"): # DEPRECATED: use "none" web_class = NoneWeb + elif web_type == "internal": + web_class = Web else: try: web_class = import_module(web_type).Web @@ -64,3 +73,36 @@ class NoneWeb(BaseWeb): if path != "/.web": return NOT_FOUND return client.OK, {"Content-Type": "text/plain"}, "Radicale works!" + + +class Web(BaseWeb): + def __init__(self, configuration, logger): + super().__init__(configuration, logger) + self.folder = pkg_resources.resource_filename(__name__, "web") + + def get(self, environ, base_prefix, path, user): + try: + filesystem_path = storage.path_to_filesystem( + self.folder, path[len("/.web"):]) + except ValueError: + return NOT_FOUND + if os.path.isdir(filesystem_path) and not path.endswith("/"): + location = posixpath.basename(path) + "/" + return (client.SEE_OTHER, + {"Location": location, "Content-Type": "text/plain"}, + "Redirected to %s" % location) + if os.path.isdir(filesystem_path): + filesystem_path = os.path.join(filesystem_path, "index.html") + if not os.path.isfile(filesystem_path): + return NOT_FOUND + content_type = MIMETYPES.get( + os.path.splitext(filesystem_path)[1].lower(), FALLBACK_MIMETYPE) + with open(filesystem_path, "rb") as f: + answer = f.read() + last_modified = time.strftime( + "%a, %d %b %Y %H:%M:%S GMT", + time.gmtime(os.fstat(f.fileno()).st_mtime)) + headers = { + "Content-Type": content_type, + "Last-Modified": last_modified} + return client.OK, headers, answer diff --git a/radicale/web/css/fonts.css b/radicale/web/css/fonts.css new file mode 100644 index 0000000..297998e --- /dev/null +++ b/radicale/web/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/Roboto-Light.woff2) format('woff2'); +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(fonts/Roboto-Light.woff2) format('woff2'); +} diff --git a/radicale/web/css/fonts/COPYRIGHT.txt b/radicale/web/css/fonts/COPYRIGHT.txt new file mode 100644 index 0000000..e69c54c --- /dev/null +++ b/radicale/web/css/fonts/COPYRIGHT.txt @@ -0,0 +1 @@ +Copyright 2011 Google Inc. All Rights Reserved. diff --git a/radicale/web/css/fonts/LICENSE.txt b/radicale/web/css/fonts/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/radicale/web/css/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/radicale/web/css/fonts/Roboto-Light.woff2 b/radicale/web/css/fonts/Roboto-Light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2882017887433f9a4e4e621c60187d8a96f6d355 GIT binary patch literal 62832 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

Z=XtEWT1KTfsvcBh(5e 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 literal 0 HcmV?d00001 diff --git a/radicale/web/css/fonts/Roboto-Regular.woff2 b/radicale/web/css/fonts/Roboto-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f966196753d4ccdb88ea42307dd00955570f3154 GIT binary patch literal 63412 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 XLbG$9VI_3Jf0k7RS1XPO@mT->QjP?B literal 0 HcmV?d00001 diff --git a/radicale/web/css/icon.png b/radicale/web/css/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c9c042bbb4535002b829fdcd2d895279a751e2 GIT binary patch literal 1069 zcmV+|1k(G7P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXY< z4GAF*J6#q400XT_L_t(o!@ZV&Xj@ej$3N$#?{$gWEM_yb4Q#Tp38R+6C`Dy3Y1K~h z{%}8nQi?-JgsSup^&b_4{pBVy|L7o5#HO7xDh?V%h0T=>whpw@qR!!T%sE8ry3)EW zeQndTFPv8WD}F>S0m##L}h-AgV8*(j%g~@TnyMh7-;_$YDgj1nmXs1yE$a!WE#$ zFMyOX$xd7ARXHT+{lGKB$+@9e%KAb?9|c)6oN#`vxC3_DdcaOwYdj~;13e0pi0rk~ z=0*|yP*oI&S8EGWK*mm6dt)iHBb#(aMd($f5#()<5fL2ViK+l7dIBYc@-oOFJ8kv@ zmw|VHZ9ok85wxW$0HU%-MR%%byTGTabgRmch)x6F0dD{^K*&y;P1P;Jlyw*Ih>GqP zBnq4bHUSP`0o}t1=c9_Z;bJ=`oomBMCks3Vi~-Hw+K@NpzN(x9wMI}bbwj2EpH zVD%jV@LKYBg@nR{0^SJSF@OapoYTvubqL4<5}MMxzk-H=g;6&MfvN!vLft`leA}yY ztAf)i%VyMAcg&6d1eXQQ3Jd^G4?;u5x}YfeTHrN>X9K{`4;qLI;R~*=`~%U&GXw;V z0yxqPXXPco%%@dkX~O0^7Z>Q~}8^jGHnRJu0vf zcx$PeFiNz(0ciK4Yl+Sk=ClKCejT_M*r4UtO`$AozW^2xl=3^auw;{8fSh;n{9mo~ z3or%zc8jg$$n^^_;k8s*HBfX^Px%7qf*aliRB}=mFbo58`Emqq`=7C<3>&{@;XrA2 zZ_|o}AI)HpU}GbZEn8Fq0r@49Im7I%KY%XyW&lP6npbV!EMgd%pPdz*n?no(!?LJZ zv4UWIJ@>S<(9qdQT~m{sP9_P|)}HVU;C*4nh0b-mcW;Pn-AX=}!*v|QFbD*L)P}+2V%=dWLviIXSKsN-CqQhFa={H(S0Ms9LaRn^shk?Xpus_ysu_UXrw$Wy5@FTEv| zftnAX@A!@#>dwy>C%h^7m9a7XyshncKZL2Y-h<$vNZ-+p4$VzWEILt0e(lmF9kK1J zgYYob(z{?D3K1pKHm+;N{R6|V*Qy+i(rz$00000NkvXXu0mjf#S7-n literal 0 HcmV?d00001 diff --git a/radicale/web/css/main.css b/radicale/web/css/main.css new file mode 100644 index 0000000..7b8330b --- /dev/null +++ b/radicale/web/css/main.css @@ -0,0 +1,44 @@ +@import url(fonts.css); +body { background: #e4e9f6; color: #424247; display: flex; flex-direction: column; font-family: Roboto, sans; font-size: 14pt; line-height: 1.4; margin: 0; min-height: 100vh; } + +a { color: inherit; } + +nav, footer { background: #a40000; color: white; padding: 0 20%; } +nav ul, footer ul { display: flex; flex-wrap: wrap; margin: 0; padding: 0; } +nav ul li, footer ul li { display: block; padding: 0 1em 0 0; } +nav ul li a, footer ul li a { color: inherit; display: block; padding: 1em 0.5em 1em 0; text-decoration: inherit; transition: 0.2s; } +nav ul li a:hover, nav ul li a:focus, footer ul li a:hover, footer ul li a:focus { color: black; outline: none; } + +header { background: url(logo.svg), linear-gradient(to bottom right, #050a02, black); background-position: 22% 45%; background-repeat: no-repeat; color: #efdddd; font-size: 1.5em; min-height: 250px; overflow: auto; padding: 3em 22%; text-shadow: 0.2em 0.2em 0.2em rgba(0, 0, 0, 0.5); } +header > * { padding-left: 220px; } +header h1 { font-size: 2.5em; font-weight: lighter; margin: 0.5em 0; } + +main { flex: 1; } + +section { padding: 0 20% 2em; } +section:not(:last-child) { border-bottom: 1px dashed #ccc; } +section h1 { background: linear-gradient(to bottom right, #050a02, black); color: #e5dddd; font-size: 2.5em; margin: 0 -33.33% 1em; padding: 1em 33.33%; } +section h2, section h3, section h4 { font-weight: lighter; margin: 1.5em 0 1em; } + +article { border-top: 1px solid transparent; position: relative; margin: 3em 0; } +article aside { box-sizing: border-box; color: #aaa; font-size: 0.8em; right: -30%; top: 0.5em; position: absolute; } +article:before { border-top: 1px dashed #ccc; content: ""; display: block; left: -33.33%; position: absolute; right: -33.33%; } + +pre { border-radius: 3px; background: black; color: #d3d5db; margin: 0 -1em; overflow-x: auto; padding: 1em; } + +table { border-collapse: collapse; font-size: 0.8em; margin: auto; } +table td { border: 1px solid #ccc; padding: 0.5em; } + +dl dt { margin-bottom: 0.5em; margin-top: 1em; } + +@media (max-width: 800px) { body { font-size: 12pt; } + header, section { padding-left: 2em; padding-right: 2em; } + nav, footer { padding-left: 0; padding-right: 0; } + nav ul, footer ul { justify-content: center; } + nav ul li, footer ul li { padding: 0 0.5em; } + nav ul li a, footer ul li a { padding: 1em 0; } + header { background-position: 50% 30px, 0 0; padding-bottom: 0; padding-top: 330px; text-align: center; } + header > * { margin: 0; padding-left: 0; } + section h1 { margin: 0 -0.8em 1.3em; padding: 0.5em 0; text-align: center; } + article aside { top: 0.5em; right: -1.5em; } + article:before { left: -2em; right: -2em; } } diff --git a/radicale/web/fn.js b/radicale/web/fn.js new file mode 100644 index 0000000..b464790 --- /dev/null +++ b/radicale/web/fn.js @@ -0,0 +1,964 @@ +/** + * This file is part of Radicale Server - Calendar Server + * Copyright (C) 2017 Unrud + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * Server address (must not end with /) + * @const + * @type {string} + */ +var SERVER = (location.protocol + '//' + location.hostname + + (location.port ? ':' + location.port : '') + + location.pathname.replace(new RegExp("/+[^/]+/*(/index\.html?)?$"), "")); + +/** + * time between updates of collections. + * @const + */ +var UPDATE_INTERVAL = 10000; + +/** + * Regex to match and normalize color + * @const + */ +var COLOR_RE = new RegExp("^(#[0-9A-Fa-f]{6})(?:[0-9A-Fa-f]{2})?$"); + +/** + * Escape string for usage in XML + * @param {string} s + * @return {string} + */ +function escape_xml(s) { + return (s + .replace("&", "&") + .replace('"', """) + .replace("'", "'") + .replace("<", "<") + .replace(">", ">")); +} + +/** + * @enum {string} + */ +var CollectionType = { + PRINCIPAL: "PRINCIPAL", + ADDRESSBOOK: "ADDRESSBOOK", + CALENDAR_JOURNAL_TASKS: "CALENDAR_JOURNAL_TASKS", + CALENDAR_JOURNAL: "CALENDAR_JOURNAL", + CALENDAR_TASKS: "CALENDAR_TASKS", + JOURNAL_TASKS: "JOURNAL_TASKS", + CALENDAR: "CALENDAR", + JOURNAL: "JOURNAL", + TASKS: "TASKS", + is_subset: function(a, b) { + var components = a.split("_"); + var i; + for (i = 0; i < components.length; i++) { + if (b.search(components[i]) === -1) { + return false; + } + } + return true; + }, + union: function(a, b) { + if (a.search(this.ADDRESSBOOK) !== -1 || b.search(this.ADDRESSBOOK) !== -1) { + if (a && a !== this.ADDRESSBOOK || b && b !== this.ADDRESSBOOK) { + throw "Invalid union: " + a + " " + b; + } + return this.ADDRESSBOOK; + } + var union = ""; + if (a.search(this.CALENDAR) !== -1 || b.search(this.CALENDAR) !== -1) { + union += (union ? "_" : "") + this.CALENDAR; + } + if (a.search(this.JOURNAL) !== -1 || b.search(this.JOURNAL) !== -1) { + union += (union ? "_" : "") + this.JOURNAL; + } + if (a.search(this.TASKS) !== -1 || b.search(this.TASKS) !== -1) { + union += (union ? "_" : "") + this.TASKS; + } + return union; + } +}; + +/** + * @constructor + * @struct + * @param {string} href Must always start and end with /. + * @param {CollectionType} type + * @param {string} displayname + * @param {string} description + * @param {string} color + */ +function Collection(href, type, displayname, description, color) { + this.href = href; + this.type = type; + this.displayname = displayname; + this.color = color; + this.description = description; +} + +/** + * Find the principal collection. + * @param {string} user + * @param {string} password + * @param {function(?Collection, ?string)} callback Returns result or error + * @return {XMLHttpRequest} + */ +function get_principal(user, password, callback) { + var request = new XMLHttpRequest(); + request.open("PROPFIND", SERVER, true, user, password); + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } + if (request.status === 207) { + var xml = request.responseXML; + var principal_element = xml.querySelector("*|multistatus:root > *|response:first-of-type > *|propstat > *|prop > *|current-user-principal > *|href"); + var displayname_element = xml.querySelector("*|multistatus:root > *|response:first-of-type > *|propstat > *|prop > *|displayname"); + if (principal_element) { + callback(new Collection( + principal_element.textContent, + CollectionType.PRINCIPAL, + displayname_element ? displayname_element.textContent : "", + "", + ""), null); + } else { + callback(null, "Internal error"); + } + } else { + callback(null, request.status + " " + request.statusText); + } + }; + request.send('' + + '' + + '' + + '' + + '' + + '' + + ''); + return request; +} + +/** + * Find all calendars and addressbooks in collection. + * @param {string} user + * @param {string} password + * @param {Collection} collection + * @param {function(?Array, ?string)} callback Returns result or error + * @return {XMLHttpRequest} + */ +function get_collections(user, password, collection, callback) { + var request = new XMLHttpRequest(); + request.open("PROPFIND", SERVER + collection.href, true, user, password); + request.setRequestHeader("depth", "1"); + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } + if (request.status === 207) { + var xml = request.responseXML; + var collections = []; + var response_query = "*|multistatus:root > *|response"; + var responses = xml.querySelectorAll(response_query); + var i; + for (i = 0; i < responses.length; i++) { + var response = responses[i]; + var href_element = response.querySelector(response_query + " > *|href"); + var resourcetype_query = response_query + " > *|propstat > *|prop > *|resourcetype"; + var resourcetype_element = response.querySelector(resourcetype_query); + var displayname_element = response.querySelector(response_query + " > *|propstat > *|prop > *|displayname"); + var calendarcolor_element = response.querySelector(response_query + " > *|propstat > *|prop > *|calendar-color"); + var addressbookcolor_element = response.querySelector(response_query + " > *|propstat > *|prop > *|addressbook-color"); + var calendardesc_element = response.querySelector(response_query + " > *|propstat > *|prop > *|calendar-description"); + var addressbookdesc_element = response.querySelector(response_query + " > *|propstat > *|prop > *|addressbook-description"); + var components_query = response_query + " > *|propstat > *|prop > *|supported-calendar-component-set"; + var components_element = response.querySelector(components_query); + var href = href_element ? href_element.textContent : ""; + var displayname = displayname_element ? displayname_element.textContent : ""; + var type = ""; + var color = ""; + var description = ""; + if (resourcetype_element) { + if (resourcetype_element.querySelector(resourcetype_query + " > *|addressbook")) { + type = CollectionType.ADDRESSBOOK; + color = addressbookcolor_element ? addressbookcolor_element.textContent : ""; + description = addressbookdesc_element ? addressbookdesc_element.textContent : ""; + } else if (resourcetype_element.querySelector(resourcetype_query + " > *|calendar")) { + if (components_element) { + if (components_element.querySelector(components_query + " > *|comp[name=VEVENT]")) { + type = CollectionType.union(type, CollectionType.CALENDAR); + } + if (components_element.querySelector(components_query + " > *|comp[name=VJOURNAL]")) { + type = CollectionType.union(type, CollectionType.JOURNAL); + } + if (components_element.querySelector(components_query + " > *|comp[name=VTODO]")) { + type = CollectionType.union(type, CollectionType.TASKS); + } + } + color = calendarcolor_element ? calendarcolor_element.textContent : ""; + description = calendardesc_element ? calendardesc_element.textContent : ""; + } + } + // Quirks + if (href === (displayname ? "/" + displayname + "/" : "/")) { + displayname = ""; + } + var sane_color = color.trim(); + if (sane_color) { + var color_match = COLOR_RE.exec(sane_color); + if (color_match) { + sane_color = color_match[1]; + } else { + sane_color = ""; + } + } + if (href.substr(-1) === "/" && href !== collection.href && type) { + collections.push(new Collection(href, type, displayname, description, sane_color)); + } + } + collections.sort(function(a, b) { + /** @type {string} */ var ca = a.displayname || a.href; + /** @type {string} */ var cb = b.displayname || b.href; + return ca.localeCompare(cb); + }); + callback(collections, null); + } else { + callback(null, request.status + " " + request.statusText); + } + }; + request.send('' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''); + return request; +} + +/** + * @param {string} user + * @param {string} password + * @param {Collection} collection + * @param {function(?string)} callback Returns error or null + * @return {XMLHttpRequest} + */ +function delete_collection(user, password, collection, callback) { + var request = new XMLHttpRequest(); + request.open("DELETE", SERVER + collection.href, true, user, password); + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } + if (200 <= request.status && request.status < 300) { + callback(null); + } else { + callback(request.status + " " + request.statusText); + } + }; + request.send(); + return request; +} + +/** + * @param {string} user + * @param {string} password + * @param {Collection} collection + * @param {boolean} create + * @param {function(?string)} callback Returns error or null + * @return {XMLHttpRequest} + */ +function create_edit_collection(user, password, collection, create, callback) { + var request = new XMLHttpRequest(); + request.open(create ? "MKCOL" : "PROPPATCH", SERVER + collection.href, true, user, password); + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } + if (200 <= request.status && request.status < 300) { + callback(null); + } else { + callback(request.status + " " + request.statusText); + } + }; + var displayname = escape_xml(collection.displayname); + var calendar_color = ""; + var addressbook_color = ""; + var calendar_description = ""; + var addressbook_description = ""; + var resourcetype; + var components = ""; + if (collection.type === CollectionType.ADDRESSBOOK) { + addressbook_color = escape_xml(collection.color + (collection.color ? "ff" : "")); + addressbook_description = escape_xml(collection.description); + resourcetype = ''; + } else { + calendar_color = escape_xml(collection.color + (collection.color ? "ff" : "")); + calendar_description = escape_xml(collection.description); + resourcetype = ''; + if (CollectionType.is_subset(CollectionType.CALENDAR, collection.type)) { + components += ''; + } + if (CollectionType.is_subset(CollectionType.JOURNAL, collection.type)) { + components += ''; + } + if (CollectionType.is_subset(CollectionType.TASKS, collection.type)) { + components += ''; + } + } + var xml_request = create ? "mkcol" : "propertyupdate"; + request.send('' + + '<' + xml_request + ' xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:CR="urn:ietf:params:xml:ns:carddav" xmlns:I="http://apple.com/ns/ical/" xmlns:INF="http://inf-it.com/ns/ab/">' + + '' + + '' + + (create ? '' + resourcetype + '' : '') + + '' + components + '' + + '' + displayname + '' + + '' + calendar_color + '' + + '' + addressbook_color + '' + + '' + addressbook_description + '' + + '' + calendar_description + '' + + '' + + '' + + ''); + return request; +} + +/** + * @param {string} user + * @param {string} password + * @param {Collection} collection + * @param {function(?string)} callback Returns error or null + * @return {XMLHttpRequest} + */ +function create_collection(user, password, collection, callback) { + return create_edit_collection(user, password, collection, true, callback); +} + +/** + * @param {string} user + * @param {string} password + * @param {Collection} collection + * @param {function(?string)} callback Returns error or null + * @return {XMLHttpRequest} + */ +function edit_collection(user, password, collection, callback) { + return create_edit_collection(user, password, collection, false, callback); +} + +/** + * @interface + */ +function Scene() {} +/** + * Scene is on top of stack and visible. + */ +Scene.prototype.show = function() {}; +/** + * Scene is no longer visible. + */ +Scene.prototype.hide = function() {}; +/** + * Scene is removed from scene stack. + */ +Scene.prototype.release = function() {}; + + +/** + * @type {Array} + */ +var scene_stack = []; + +/** + * Push scene onto stack. + * @param {Scene} scene + * @param {boolean} replace Replace the scene on top of the stack. + */ +function push_scene(scene, replace) { + if (scene_stack.length >= 1) { + scene_stack[scene_stack.length - 1].hide(); + if (replace) { + scene_stack.pop().release(); + } + } + scene_stack.push(scene); + scene.show(); +} + +/** + * Remove scenes from stack. + * @param {number} index New top of stack + */ +function pop_scene(index) { + if (scene_stack.length - 1 <= index) { + return; + } + scene_stack[scene_stack.length - 1].hide(); + while (scene_stack.length - 1 > index) { + var old_length = scene_stack.length; + scene_stack.pop().release(); + if (old_length - 1 === index + 1) { + break; + } + } + if (scene_stack.length >= 1) { + var scene = scene_stack[scene_stack.length - 1]; + scene.show(); + } else { + throw "Scene stack is empty"; + } +} + +/** + * @constructor + * @implements {Scene} + */ +function LoginScene() { + var html_scene = document.getElementById("loginscene"); + var form = html_scene.querySelector("[name=form]"); + var user_form = html_scene.querySelector("[name=user]"); + var password_form = html_scene.querySelector("[name=password]"); + var error_form = html_scene.querySelector("[name=error]"); + var logout_view = document.getElementById("logoutview"); + var logout_user_form = logout_view.querySelector("[name=user]"); + var logout_btn = logout_view.querySelector("[name=link]"); + + /** @type {?number} */ var scene_index = null; + var user = ""; + var error = ""; + /** @type {?XMLHttpRequest} */ var principal_req = null; + + function read_form() { + user = user_form.value; + } + + function fill_form() { + user_form.value = user; + password_form.value = ""; + error_form.textContent = error ? "Error: " + error : ""; + } + + function onlogin() { + try { + read_form(); + var password = password_form.value; + if (user) { + error = ""; + // setup logout + logout_view.style.display = "block"; + logout_btn.onclick = onlogout; + logout_user_form.textContent = user; + // Fetch principal + var loading_scene = new LoadingScene(); + push_scene(loading_scene, false); + principal_req = get_principal(user, password, function(collection, error1) { + if (scene_index === null) { + return; + } + principal_req = null; + if (error1) { + error = error1; + pop_scene(scene_index); + } else { + // show collections + var saved_user = user; + user = ""; + var collections_scene = new CollectionsScene( + saved_user, password, collection, function(error1) { + error = error1; + user = saved_user; + }); + push_scene(collections_scene, true); + } + }); + } else { + error = "Username is empty"; + fill_form(); + } + } catch(err) { + console.error(err); + } + return false; + } + + function onlogout() { + try { + if (scene_index === null) { + return false; + } + user = ""; + pop_scene(scene_index); + } catch (err) { + console.error(err); + } + return false; + } + + this.show = function() { + this.release(); + fill_form(); + form.onsubmit = onlogin; + html_scene.style.display = "block"; + user_form.focus(); + scene_index = scene_stack.length - 1; + }; + this.hide = function() { + read_form(); + html_scene.style.display = "none"; + form.onsubmit = null; + }; + this.release = function() { + scene_index = null; + // cancel pending requests + if (principal_req !== null) { + principal_req.abort(); + principal_req = null; + } + // remove logout + logout_view.style.display = "none"; + logout_btn.onclick = null; + logout_user_form.textContent = ""; + }; +} + +/** + * @constructor + * @implements {Scene} + */ +function LoadingScene() { + var html_scene = document.getElementById("loadingscene"); + this.show = function() { + html_scene.style.display = "block"; + }; + this.hide = function() { + html_scene.style.display = "none"; + }; + this.release = function() {}; +} + +/** + * @constructor + * @implements {Scene} + * @param {string} user + * @param {string} password + * @param {Collection} collection The principal collection. + * @param {function(string)} onerror Called when an error occurs, before the + * scene is popped. + */ +function CollectionsScene(user, password, collection, onerror) { + var html_scene = document.getElementById("collectionsscene"); + var template = html_scene.querySelector("[name=collectiontemplate]"); + var new_btn = html_scene.querySelector("[name=new]"); + + /** @type {?number} */ var scene_index = null; + var saved_template_display = null; + /** @type {?XMLHttpRequest} */ var collections_req = null; + var timer = null; + /** @type {?Array} */ var collections = null; + /** @type {Array} */ var nodes = []; + + function onnew() { + try { + var create_collection_scene = new CreateEditCollectionScene(user, password, collection); + push_scene(create_collection_scene, false); + } catch(err) { + console.error(err); + } + return false; + } + + function onedit(collection) { + try { + var edit_collection_scene = new CreateEditCollectionScene(user, password, collection); + push_scene(edit_collection_scene, false); + } catch(err) { + console.error(err); + } + return false; + } + + function ondelete(collection) { + try { + var delete_collection_scene = new DeleteCollectionScene(user, password, collection); + push_scene(delete_collection_scene, false); + } catch(err) { + console.error(err); + } + return false; + } + + function show_collections(collections) { + nodes.forEach(function(node) { + template.parentNode.removeChild(node); + }); + nodes = []; + collections.forEach(function (collection) { + var node = template.cloneNode(true); + var title_form = node.querySelector("[name=title]"); + var description_form = node.querySelector("[name=description]"); + var url_form = node.querySelector("[name=url]"); + var color_form = node.querySelector("[name=color]"); + var delete_btn = node.querySelector("[name=delete]"); + var edit_btn = node.querySelector("[name=edit]"); + if (collection.color) { + color_form.style.color = collection.color; + } else { + color_form.style.display = "none"; + } + var possible_types = [CollectionType.ADDRESSBOOK]; + [CollectionType.CALENDAR, ""].forEach(function(e) { + [CollectionType.union(e, CollectionType.JOURNAL), e].forEach(function(e) { + [CollectionType.union(e, CollectionType.TASKS), e].forEach(function(e) { + if (e) { + possible_types.push(e); + } + }); + }); + }); + possible_types.forEach(function(e) { + if (e !== collection.type) { + node.querySelector("[name=" + e + "]").style.display = "none"; + } + }); + title_form.textContent = collection.displayname || collection.href; + description_form.textContent = collection.description; + var href = SERVER.replace("//", "//" + encodeURIComponent(user) + "@") + collection.href; + url_form.href = href; + url_form.textContent = href; + delete_btn.onclick = function(ev) {return ondelete(collection);}; + edit_btn.onclick = function(ev) {return onedit(collection);}; + node.style.display = saved_template_display; + nodes.push(node); + template.parentNode.insertBefore(node, template); + }); + } + + function update() { + if (collections === null) { + var loading_scene = new LoadingScene(); + push_scene(loading_scene, false); + } + collections_req = get_collections(user, password, collection, function(collections1, error) { + if (scene_index === null) { + return; + } + collections_req = null; + if (error) { + onerror(error); + pop_scene(scene_index - 1); + } else { + var old_collections = collections; + collections = collections1; + timer = window.setTimeout(update, UPDATE_INTERVAL); + if (old_collections === null) { + pop_scene(scene_index); + } else { + show_collections(collections); + } + } + }); + } + + this.show = function() { + saved_template_display = template.style.display; + template.style.display = "none"; + html_scene.style.display = "block"; + new_btn.onclick = onnew; + if (scene_index === null) { + scene_index = scene_stack.length - 1; + if (collections === null && collections_req !== null) { + pop_scene(scene_index - 1); + return; + } + update(); + } else if (collections === null) { + pop_scene(scene_index - 1); + } else { + if (timer !== null) { + show_collections(collections); + } else { + collections = null; + update(); + } + } + }; + this.hide = function() { + html_scene.style.display = "none"; + template.style.display = saved_template_display; + new_btn.onclick = null; + if (timer !== null) { + window.clearTimeout(timer); + timer = null; + } + if (collections !== null && collections_req !== null) { + collections_req.abort(); + collections_req = null; + } + show_collections([]); + }; + this.release = function() { + scene_index = null; + if (collections_req !== null) { + collections_req.abort(); + collections_req = null; + } + }; +} + +/** + * @constructor + * @implements {Scene} + * @param {string} user + * @param {string} password + * @param {Collection} collection + */ +function DeleteCollectionScene(user, password, collection) { + var html_scene = document.getElementById("deletecollectionscene"); + var title_form = html_scene.querySelector("[name=title]"); + var error_form = html_scene.querySelector("[name=error]"); + var delete_btn = html_scene.querySelector("[name=delete]"); + var cancel_btn = html_scene.querySelector("[name=cancel]"); + var no_btn = html_scene.querySelector("[name=no]"); + + /** @type {?number} */ var scene_index = null; + /** @type {?XMLHttpRequest} */ var delete_req = null; + var error = ""; + + function ondelete() { + try { + var loading_scene = new LoadingScene(); + push_scene(loading_scene); + delete_req = delete_collection(user, password, collection, function(error1) { + if (scene_index === null) { + return; + } + delete_req = null; + if (error1) { + error = error1; + pop_scene(scene_index); + } else { + pop_scene(scene_index - 1); + } + }); + } catch(err) { + console.error(err); + } + return false; + } + + function oncancel() { + try { + pop_scene(scene_index - 1); + } catch(err) { + console.error(err); + } + return false; + } + + this.show = function() { + this.release(); + scene_index = scene_stack.length - 1; + html_scene.style.display = "block"; + title_form.textContent = collection.displayname || collection.href; + error_form.textContent = error ? "Error: " + error : ""; + delete_btn.onclick = ondelete; + cancel_btn.onclick = oncancel; + }; + this.hide = function() { + html_scene.style.display = "none"; + cancel_btn.onclick = null; + delete_btn.onclick = null; + }; + this.release = function() { + scene_index = null; + if (delete_req !== null) { + delete_req.abort(); + delete_req = null; + } + }; +} + +/** + * Generate random hex number. + * @param {number} length + * @return {string} + */ +function randHex(length) { + var s = Math.floor(Math.random() * Math.pow(16, length)).toString(16); + while (s.length < length) { + s = "0" + s; + } + return s; +} + +/** + * @constructor + * @implements {Scene} + * @param {string} user + * @param {string} password + * @param {Collection} collection if it's a principal collection, a new + * collection will be created inside of it. + * Otherwise the collection will be edited. + */ +function CreateEditCollectionScene(user, password, collection) { + var edit = collection.type !== CollectionType.PRINCIPAL; + var html_scene = document.getElementById(edit ? "editcollectionscene" : "createcollectionscene"); + var title_form = edit ? html_scene.querySelector("[name=title]") : null; + var error_form = html_scene.querySelector("[name=error]"); + var displayname_form = html_scene.querySelector("[name=displayname]"); + var description_form = html_scene.querySelector("[name=description]"); + var type_form = html_scene.querySelector("[name=type]"); + var color_form = html_scene.querySelector("[name=color]"); + var submit_btn = html_scene.querySelector("[name=submit]"); + var cancel_btn = html_scene.querySelector("[name=cancel]"); + + /** @type {?number} */ var scene_index = null; + /** @type {?XMLHttpRequest} */ var create_edit_req = null; + var error = ""; + /** @type {?Element} */ var saved_type_form = null; + + var href = edit ? collection.href : ( + collection.href + randHex(8) + "-" + randHex(4) + "-" + randHex(4) + + "-" + randHex(4) + "-" + randHex(12) + "/"); + var displayname = edit ? collection.displayname : ""; + var description = edit ? collection.description : ""; + var type = edit ? collection.type : CollectionType.CALENDAR_JOURNAL_TASKS; + var color = edit && collection.color ? collection.color : "#" + randHex(6); + + function remove_invalid_types() { + if (!edit) { + return; + } + /** @type {HTMLOptionsCollection} */ var options = type_form.options; + // remove all options that are not supersets + var i; + for (i = options.length - 1; i >= 0; i--) { + if (!CollectionType.is_subset(type, options[i].value)) { + options.remove(i); + } + } + } + + function read_form() { + displayname = displayname_form.value; + description = description_form.value; + type = type_form.value; + color = color_form.value; + } + + function fill_form() { + displayname_form.value = displayname; + description_form.value = description; + type_form.value = type; + color_form.value = color; + error_form.textContent = error ? "Error: " + error : ""; + } + + function onsubmit() { + try { + read_form(); + var sane_color = color.trim(); + if (sane_color) { + var color_match = COLOR_RE.exec(sane_color); + if (!color_match) { + error = "Invalid color"; + fill_form(); + return false; + } + sane_color = color_match[1]; + } + var loading_scene = new LoadingScene(); + push_scene(loading_scene); + var collection = new Collection(href, type, displayname, description, sane_color); + var callback = function(error1) { + if (scene_index === null) { + return; + } + create_edit_req = null; + if (error1) { + error = error1; + pop_scene(scene_index); + } else { + pop_scene(scene_index - 1); + } + }; + if (edit) { + create_edit_req = edit_collection(user, password, collection, callback); + } else { + create_edit_req = create_collection(user, password, collection, callback); + } + } catch(err) { + console.error(err); + } + return false; + } + + function oncancel() { + try { + pop_scene(scene_index - 1); + } catch(err) { + console.error(err); + } + return false; + } + + this.show = function() { + this.release(); + scene_index = scene_stack.length - 1; + // Clone type_form because it's impossible to hide options without removing them + saved_type_form = type_form; + type_form = type_form.cloneNode(true); + saved_type_form.parentNode.replaceChild(type_form, saved_type_form); + remove_invalid_types(); + html_scene.style.display = "block"; + if (edit) { + title_form.textContent = collection.displayname || collection.href; + } + fill_form(); + submit_btn.onclick = onsubmit; + cancel_btn.onclick = oncancel; + }; + this.hide = function() { + read_form(); + html_scene.style.display = "none"; + // restore type_form + type_form.parentNode.replaceChild(saved_type_form, type_form); + type_form = saved_type_form; + saved_type_form = null; + submit_btn.onclick = null; + cancel_btn.onclick = null; + }; + this.release = function() { + scene_index = null; + if (create_edit_req !== null) { + create_edit_req.abort(); + create_edit_req = null; + } + }; +} + +function main() { + push_scene(new LoginScene(), false); +} + +window.addEventListener("load", main); diff --git a/radicale/web/index.html b/radicale/web/index.html new file mode 100644 index 0000000..adb1742 --- /dev/null +++ b/radicale/web/index.html @@ -0,0 +1,105 @@ + + + + + + + + Web interface for Radicale + + + + +

+ + + + + + + +