From 570a6d2d284ed189972ebd6f0f0e26ffebf3470a Mon Sep 17 00:00:00 2001 From: louixs Date: Sat, 27 May 2017 14:09:32 +0100 Subject: [PATCH] fresh start --- .gitignore | 15 + LICENSE | 201 +++++++++++ README.md | 75 ++++ calendar.widget/assets/calendar.sh | 214 ++++++++++++ calendar.widget/assets/debugLogger.sh | 58 +++ calendar.widget/assets/lib/underscore.js | 6 + calendar.widget/assets/networkAlive.sh | 9 + calendar.widget/assets/oauth.sh | 406 +++++++++++++++++++++ calendar.widget/assets/parsej.sh | 426 +++++++++++++++++++++++ calendar.widget/assets/run.sh | 52 +++ calendar.widget/calendar.coffee | 255 ++++++++++++++ clean.sh | 12 + deployReady_zip.sh | 27 ++ gitPushOriginMaster.sh | 7 + note_for_dev | 26 ++ screenshot.png | Bin 0 -> 161707 bytes widget.json | 6 + zip.sh | 13 + 18 files changed, 1808 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100755 calendar.widget/assets/calendar.sh create mode 100755 calendar.widget/assets/debugLogger.sh create mode 100644 calendar.widget/assets/lib/underscore.js create mode 100755 calendar.widget/assets/networkAlive.sh create mode 100755 calendar.widget/assets/oauth.sh create mode 100755 calendar.widget/assets/parsej.sh create mode 100755 calendar.widget/assets/run.sh create mode 100644 calendar.widget/calendar.coffee create mode 100755 clean.sh create mode 100755 deployReady_zip.sh create mode 100755 gitPushOriginMaster.sh create mode 100644 note_for_dev create mode 100644 screenshot.png create mode 100644 widget.json create mode 100755 zip.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b602ae3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Logs and databases # +###################### +*.log +*.db +log/ + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + 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/README.md b/README.md new file mode 100644 index 0000000..b67332a --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# Google Calendar widget for Übersicht +## (Übersicht Google Widgets Bundle) + +Here it comes, a new year and a new widget. Let's make 2017 a good year! + +This widget shows events for today and tomorrow based on the time zone set in your Google calendar settings. As opposed to the other widgets for google calendars, this uses Google Calendar API and Google Oauth2. This widget is a part of the Übersicht Google Suite comprising of widgets that uses Google API (other widgets are on their way). + +![Google Calendar](screenshot.png "Google Calendar") + +## Setup: +1. Perhaps obvious but you would need a google account +2. Go to https://console.developers.google.com > click on API Project > select Create project > fill in your project name > click on create +3. Make sure you are in API Manager and click on Enable API and select Calendar API to enable +4. Go to OAuth consent screen > fill in/choose your gmail address > fill in Product name shown to users with the same name that you chose in the step 2 above > make sure to save +5. Select Credentials > select Create credentials > select OAuth client ID > select Other > fill in the name such as ubersicht > copy client ID and client secret > paste them in the calendar.coffee file after CLIENT_ID: and CLIENT_SECRET: under the Google API Credentials section. Note that you would need to store them as string i.e. surround them with ```""```. +Your calendar.coffee file's Google API Credentials section should look like the following: + + ``` + CLIENT_ID: "your_client_id" + CLIENT_SECRET: "your_client_secret" + AUTHORIZATION_CODE:"" + ``` + +6. Saving your script should launch a web browser asking whether you would like to allow your app to view gmail. Click Allow and the next screen will show a code. Please copy and paste it in the cred file besides AUTHORIZATION_CODE:. In case a browser does not launch please click on Refresh All Widgets option found in Ubersichts icon on your mac menu bar. At this point your calendar.coffee file's Google API Credentials section should have the following: + + ``` + CLIENT_ID: "your_client_id" + CLIENT_SECRET: "your_client_secret" + AUTHORIZATION_CODE: "your_authorizaion_code" + ``` + +7. Please put the name(s) of your calendar(s) that you would like to display - seperated with commnas ```,``` after calendar_name: in calendar.coffee file. Note that you would need to store them as string. Please note calendar names are case sensitive. + + ``` + CALENDAR_NAME:"calendar 1, calendar_2, calendar 3" + ``` + +8. Save the calendar and your calendar events should now show if all goes well. If they do not show after 30 sec to 1 min. try clicking on Refresh All Widgets option. + +## Notes: +- Make sure to name the project name (where you get your client ID and client secret) the same as the oauth product name. Else it seems to return an error when obtaining authorization code. +- You may add calendars as you like. Please make sure the calendar names do not contain white spaces due to the current limitation. You can for instance use underscore to bind words in the calendar names. + +## Time Zone: +Your calendars' timezone (Triangle on the right of your calendar > Calendar settings > Calendar Time Zone > Calendar Time zone) need to match your time zone for your Calendar Settings (Cogwheel on the right in Google Calendar > Settings > Your current time zone) for events to show correctly. +For instance, I have set both time zones as (GMT+00:00). When they are different, All Day events may be show in both Today and Tomorrow even though they are supposed to be only for today. + +Generally if the calendar does not display even though you have filled correct client ID and clinet secret and authorization code, try to refresh ubersicht to re-read your calendar data. A network disruption while calendar data is being read could cause errors. + +## Lastly... +The sample events on the screenshot are not supposed to make sense. They were written for testing purposes. +Translation was done using the tool :http://translatr.varunmalhotra.xyz/ + +## Credits: +parsej.sh is made by the devs at ShellShoccar-jpn. Huge thanks to ShellShoccar-jpn. +https://github.com/ShellShoccar-jpn/Parsrs/blob/master/parsrj.sh + +## Disclaimer: +This widget especially the oauth.sh is still at beta stage. Please use at your own risk. I would also highly appreciate constructive feedback. Many thanks. + +## To-do: +- fix sorting; sorting of the event is not in the order of time but number at the moment +- Add locations? +- enable switch view feature + - now you can only see today's and tomorrow's events + - add weekly view + +## Changelog +- abolished google oauth credentials file for users and moved the credential location back to .coffee file for the ease for users +- changed the location of google oauth credentials due to the security and ease of development and deployment + + +## Issues: +- Skips one day between today and tomorrow + diff --git a/calendar.widget/assets/calendar.sh b/calendar.widget/assets/calendar.sh new file mode 100755 index 0000000..e60b454 --- /dev/null +++ b/calendar.widget/assets/calendar.sh @@ -0,0 +1,214 @@ +#!/bin/bash + +# Name: Script for Google calendar API +# Description: Obtain google calendar events using google oauth2 for widget for Mac OSX app Übersicht +# Author: Ryuei Sasaki +# Github: https://github.com/louixs/ + +# -- For debugging +function runDebugLogger(){ + if [ ! -e debugLogger.sh ]; then + cd assets + source debugLogger.sh + else + source debugLogger.sh + fi + # Debug function to trace all scripts run below it + activate_debug_logger +} + +# Uncomment the below to enalbe the debugger +# runDebugLogger + +# If any error occurs, exit a script with exit 1 +function exitIfFail(){ + #https://sanctum.geek.nz/arabesque/testing-exit-values-bash/ + if $1; then :; else exit 1; fi +} + +function runOauth (){ + if [ ! -e oauth.sh ]; then + cd assets + exitIfFail ./oauth.sh + else + exitIfFail ./oauth.sh + fi +} + +runOauth + +function readCredVar(){ #rename as this is confusing this applies to extracting all values in a file after a colon : + #$1 = file name + #$2 = var name e.g. CLIENT_ID + local credVar=$(sed -e 1b "$1" | grep "$2" | sed 's/.*://' | sed 's/"//' | sed '$s/"/ /g' | xargs) + echo "$credVar" +} + +readonly PARENT_DIR=${PWD%/*} +readonly three_DIR_UP=${PWD%/*/*/*} +readonly COFFEE_FILE_NAME=$(ls ../ | grep .coffee) +readonly COFFEE_FILE="$PARENT_DIR"/"$COFFEE_FILE_NAME" +readonly GOOGLE_APP=$( readCredVar "$COFFEE_FILE" GOOGLE_APP ) +readonly CONFIG_FILE="$three_DIR_UP"/google_oauth_"$GOOGLE_APP".config + +function setVars(){ + whereAwk=$(which awk) + whereCat=$(which cat) + whereNetstat=$(which netstat) + foundPaths="${whereCat///cat}:${whereAwk///awk}:${whereNetstat///netstat}" + export PATH="$foundPaths" && + + TOKEN_FILE=token.db + ACCESS_TOKEN=$(cat "$TOKEN_FILE" | grep access_token | awk '{print $2}' | tr -d \",) + CAL_LIST_URL="https://www.googleapis.com/calendar/v3/users/me/calendarList/?showHidden=true" +} + +setVars + +getCal(){ + curl -sH "Authorization: Bearer $ACCESS_TOKEN" $1 +} + +function getCalList(){ + local list=$( getCal $CAL_LIST_URL ) + echo $list > list.db +} +getCalList + +function makeCalUrl(){ + # Expects 3 arguments + # $1 calendar ID which should be supplied when calling the parten function + # $2 date in ISO8601 format + # $3 date in ISO8601 format + local orderBy="startTime" + echo "https://www.googleapis.com/calendar/v3/calendars/$1/events/?timeMin=$2&timeMax=$3&singleEvents=true&orderBy=$orderBy" +} + +function getEventTime(){ + local eventTime=$(./parsej.sh $1 | grep $2 | sed "s/.*$2[[:space:]].*/$ All Day/" | awk '{$1="";print $0"+|+"}' | sed '$s/+|+/ /g' | xargs) + echo "$eventTime" +} + +function getEventName(){ + local eventName=$(./parsej.sh $1 | grep '].summary' | sed "s/.*start.date[[:space:]].*/$ All Day/" | awk '{$1="";print $0"+|+"}' | sed '$s/+|+//g' | xargs -0 | sed '/^$/d') + echo "$eventName" +} + +function getEventsById(){ + # Accepts 1 argument + # $1 = calendar ID + todayStart=$(date -u +"%Y-%m-%dT00:00:00") + todayEnd=$(date -u +"%Y-%m-%dT23:59:59") + + tmrwStart=$(date -v +1d -u +"%Y-%m-%dT00:00:00") + tmrwEnd=$(date -v +1d -u +"%Y-%m-%dT23:59:59") + + local todayUrl=$( makeCalUrl $1 $todayStart $todayEnd ) + local tmrwUrl=$( makeCalUrl $1 $tmrwStart $tmrwEnd ) + local today=$( getCal $todayUrl ) + local tmrw=$( getCal $tmrwUrl ) + + echo $today > today.db + echo $tmrw > tmrw.db + + todayStartTime=$(getEventTime today.db "start.date" ) + todayEndTime=$(getEventTime today.db "end.date" ) + todayTime="$todayStartTime~$todayEndTime" + + tmrwStartTime=$(getEventTime tmrw.db "start.date" ) + tmrwEndTime=$(getEventTime tmrw.db "end.date" ) + tmrwTime="$tmrwStartTime~$tmrwEndTime" + + todayEventName=$(getEventName today.db ) + tmrwEventName=$(getEventName tmrw.db ) + + # ; to seperate start time and event + # --!-- to seperate today's and tomorrow's events + # || to seperate calendar type + echo "$todayTime§-§$todayEventName--!--$tmrwTime§-§$tmrwEventName||" +} + +function calIdByName(){ + local CAL_ID=$(./parsej.sh list.db | grep -B 1 "$1" | head -n1 | awk '{$1="";print $0}') + echo $CAL_ID +} + +function varExists(){ + # check if the variable exists or not + if [ "$1" ]; then + echo 1 # var exists + else + echo 0 # var does not exist + fi +} + +function getCalendarNames(){ + local coffee_file_calendar_names=$(sed -e 1b "$COFFEE_FILE" | grep CALENDAR_NAME | sed 's/.*://' | xargs) + local config_file_calendar_names=$(sed -e 1b "$CONFIG_FILE" | grep CALENDAR_NAME | sed 's/.*://' | xargs) + + config_file_calendar_names_exist=$(varExists "$config_file_calendar_names") + + coffee_file_calendar_names_exist=$(varExists "$coffee_file_calendar_names") + + if [ "${config_file_calendar_names_exist}" -eq 1 ]; then + local calendar_names="$config_file_calendar_names" + elif [ "${coffee_file_calendar_names_exist}" -eq 1 ]; then + local calendar_names="$coffee_file_calendar_names" + else + : + fi + + echo "$calendar_names" +} + +function getCalendarIDToShow(){ + local calendar_name=$(getCalendarNames) + local calendarIDToShow=$(calIdByName "$calendar_name" ) + echo "$calendarIDToShow" +} + +function getCalIds(){ + for var in "$@" + do + calIdByName "$var" + done +} + +storeCalendarIDsToFile(){ + local calendar_names=$(getCalendarNames) + + if [ -z "$calendar_names" ]; then + echo 3 + exit 1 + else + + IFS=',' read -ra names <<< "$calendar_names" + for i in "${names[@]}"; do + trimmed=$(echo "$i" | xargs) + calIdByName "$trimmed" + done > calIDs.db + + fi +} + +function getEventsByCalendarIDs(){ + while read line; do + getEventsById $line + done < calIDs.db +} + +storeCalendarIDsToFile +getEventsByCalendarIDs > calEvents.db + +# send results to front end - ubersichts +function concatEvents(){ + local events=$( + while read line; do + echo -n $line + done "$LOG_DIR_NAME"/"$LOG_FILE_NAME" + set -vx +} +#---- End diff --git a/calendar.widget/assets/lib/underscore.js b/calendar.widget/assets/lib/underscore.js new file mode 100644 index 0000000..ee895c2 --- /dev/null +++ b/calendar.widget/assets/lib/underscore.js @@ -0,0 +1,6 @@ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this); +//# sourceMappingURL=underscore-min.map diff --git a/calendar.widget/assets/networkAlive.sh b/calendar.widget/assets/networkAlive.sh new file mode 100755 index 0000000..3441144 --- /dev/null +++ b/calendar.widget/assets/networkAlive.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +ping -q -c 1 -W 1 8.8.8.8 > /dev/null + +# if ping -q -c 1 -W 1 8.8.8.8 > /dev/null; then +# echo 1 #returns 1 if the address is pingable +# else +# echo 0 #returns 0 if the address is unreacheable +# fi diff --git a/calendar.widget/assets/oauth.sh b/calendar.widget/assets/oauth.sh new file mode 100755 index 0000000..870b3fc --- /dev/null +++ b/calendar.widget/assets/oauth.sh @@ -0,0 +1,406 @@ +#!/bin/bash +# Name: Google API Oauth2 for Übersicht +# Description: Handles google oauth2 to use google API with Übersicht +# Author: Ryuei Sasaki +# Github: https://github.com/louixs/ +# ===================================================== +# ==== Google Oauth2 +# ============================= + +<<<<<<< HEAD + +function setWorkingDir(){ + if [ ! -e run.sh ]; then + cd assets + else + : + fi +} + +setWorkingDir + +======= +>>>>>>> 694577d5c068ef51a9dadf06b61079f39d1f2359 +# -- For debugging +source debugLogger.sh +# Debug function to trace all scripts run below it +# uncomment the below to enable the debugger: +# activate_debug_logger + +function readCredVar(){ #rename as this is confusing this applies to extracting all values in a file after a colon : + #$1 = file name + #$2 = var name e.g. CLIENT_ID + local credVar=$(sed -e 1b "$1" | grep "$2" | sed 's/.*://' | sed 's/"//' | sed '$s/"/ /g' | xargs) + echo "$credVar" +} + +<<<<<<< HEAD + + +======= +>>>>>>> 694577d5c068ef51a9dadf06b61079f39d1f2359 +# Set initial variables these should not be mutated +declare -rx PARENT_DIR=${PWD%/*} +readonly COFFEE_FILE_NAME=$(ls ../ | grep .coffee) +declare -rx COFFEE_FILE="$PARENT_DIR"/"$COFFEE_FILE_NAME" +declare -rx three_DIR_UP=${PWD%/*/*/*} +declare -rx GOOGLE_APP=$( readCredVar "$COFFEE_FILE" GOOGLE_APP ) +declare -rx DEV_CONFIG_FILE="$three_DIR_UP"/google_oauth_"$GOOGLE_APP".config + +<<<<<<< HEAD +======= + +>>>>>>> 694577d5c068ef51a9dadf06b61079f39d1f2359 +declare -rx SIGNAL_FILE=signal.db +declare -rx TOKEN_FILE=token.db +declare -rx R_TOKEN_FILE=r_token.db + +#addresses +SCOPE=https://www.googleapis.com/auth/"$GOOGLE_APP".readonly +declare -rx REDIRECT_URI=urn:ietf:wg:oauth:2.0:oob +#================ + +function timeNow(){ + #output date and time for temp file name + date +%b"_"%d"_"%a"_"%T +} + +# A function that checks if a variable exists or no +function varExists(){ + # check if the variable exists or not + if [ "$1" ]; then + echo 1 # var exists + else + echo 0 # var does not exist + fi +} + +function fileExists(){ + # check if the variable exists or not + if [ -f "$1" ] && [ -n "$1" ] ; then + return 0 # file exists + else + return 1 # file does not exist + fi +} + +#Function that creates a file if the said file does not exist in the same directory +function makeFileIfNone(){ +<<<<<<< HEAD + if fileExists "$1"; then :; else > "$1"; fi +======= + if fileExists "$1"; then :; else touch "$1"; fi +>>>>>>> 694577d5c068ef51a9dadf06b61079f39d1f2359 +} + +function makeMultipleFiles(){ + # accepts multiple files + # pass them as a space separated string as below + # "$SIGNAL_FILE $LOG_FILE" + local file + for file in "$1" + do + makeFileIfNone "$file" + done +} + +function overrideLog(){ + echo "$(timeNow) ${1}" > "$LOG_FILE" +} + +function appendToLog(){ + echo "$(timeNow) ${1}" >> "$LOG_FILE" +} + +function signalGetAccessToken(){ + echo 'get' > "$SIGNAL_FILE" + # write 'get' to indicate a signal to get access token next time this script file runs +} + +function isSignalGet(){ + if ([ -s "$SIGNAL_FILE" ] && [ "$signal_var" -eq 'get' ]); then + return 0 + else + return 1 + fi +} + +function setCredVars(){ + # 1. when wrapped in a function, sed doesn't spit out the error if it cannot fild value + # 2. AUTH_URL needs to be set right after reading the variables from .coffee file, else it was not picking up correctly + # most likely due to polluted global scope that mutates variables all the time + + # $1 = config_file location + local FILE="$1" + + CLIENT_ID=$(readCredVar "$FILE" CLIENT_ID) + CLIENT_SECRET=$(readCredVar "$FILE" CLIENT_SECRET) + AUTHORIZATION_CODE=$(readCredVar "$FILE" AUTHORIZATION_CODE) + AUTH_URL="https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI&scope=$SCOPE&access_type=offline" +} + +setupDevConfigFile(){ + makeFileIfNone "$DEV_CONFIG_FILE" + + if [ -s "$DEV_CONFIG_FILE" ]; then # if file has some data + : + else + # if file is empty + echo "CLIENT_ID:" >> "$DEV_CONFIG_FILE" + echo "CLIENT_SECRET:" >> "$DEV_CONFIG_FILE" + echo "AUTHORIZATION_CODE:" >> "$DEV_CONFIG_FILE" + fi +} + +#Make cofig file for client id, cliet secrets and authorization code if it does not exist + +function assignCredentialVars(){ + # check .coffee for credentails + local coffee_cred_var_exists=$( + local coffee_client_id=$(readCredVar "$COFFEE_FILE" CLIENT_ID ) + local coffee_client_secret=$(readCredVar "$COFFEE_FILE" CLIENT_SECRET ) + if [ ! -z "$coffee_client_id" ] && [ ! -z "coffee_client_secret" ] ; then + # if both exist + echo 1 # yes exist + else + echo 0 # nope + fi + ) + + # assign credential variables if they exist in .coffee + # and stop making google_oauth.config file + if [ "${coffee_cred_var_exists}" -eq 1 ]; then + setCredVars "$COFFEE_FILE" + CONFIG_FILE="$COFFEE_FILE" # set CONFIG_FILE globaly here + + if [ -s "$DEV_CONFIG_FILE" ]; then + local DEV_CLIENT_ID=$(readCredVar "$DEV_CONFIG_FILE" CLIENT_ID) + local DEV_CLIENT_SECRET=$(readCredVar "$DEV_CONFIG_FILE" CLIENT_SECRET) + if [ ! -z "$DEV_CLIENT_ID" ] && [ ! -z "$DEV_CLIENT_SECRET"]; then + : + else + rm "$DEV_CONFIG_FILE" + fi + fi + + else + # for dev, credentials should not be filled in .coffee file + # make google_ouath.config outside of the app folder and set credentials from there + setupDevConfigFile + setCredVars "$DEV_CONFIG_FILE" + CONFIG_FILE="$DEV_CONFIG_FILE" + fi +} + +function credCheck(){ + assignCredentialVars + if [ ! -n "$CLIENT_ID" ] || [ ! -n "$CLIENT_SECRET" ]; then + echo 1 + exit 1 #exit this script with error + elif [ -n "$CLIENT_ID" ] && [ -n "$CLIENT_SECRET" ]; then + assignCredentialVars + elif [ -s "$CLIENT_ID" ] && [ -s "$CLIENT_SECRET" ]; then + assignCredentialVars + else + echo "Unhandled case; investigate and need to fix" + echo "Please report this as a bug" + exit 1 + fi +} + +function checkAuthCode(){ + assignCredentialVars + if ([ -s "$CONFIG_FILE" ] && [ "$AUTHORIZATION_CODE" ]); then + : + elif ([ -s "$CONFIG_FILE" ] && [ -n "$AUTHORIZATION_CODE" ]); then + + # Authorization code should be needed only once first + # once it is retrived and a valid access token is issued together with a refresh token + # the refresh token should be used to re-new access token once it expired + echo 2 + signalGetAccessToken + sleep 3 + open $AUTH_URL + exit 1 + fi +} + +function readSignal(){ + if [ -s "$SIGNAL_FILE" ]; then + signal_var=$(cat "$SIGNAL_FILE") + else + : + fi +} + +function removeSignalFile(){ + if [ -s "$SIGNAL_FILE" ]; then + rm "$SIGNAL_FILE" + else + : + fi +} + +function checkRefreshToken(){ + REFRESH_TOKEN=$(sed -e 1b "$R_TOKEN_FILE" | grep refresh_token | sed 's/.*://' | xargs) + local refresh_token_exists=$(varExists "$REFRESH_TOKEN") + if [ "${refresh_token_exists}" -eq 1 ]; then + # curl -sd "refresh_token=$REFRESH_TOKEN&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token > $TOKEN_FILE + # #re-assign access_token to the updated one + # ACCESS_TOKEN=$(cat "$TOKEN_FILE" | grep access_token | awk '{print $2}' | tr -d \",) + # removeSignalFile + # exit 0 + + # refresh token does not expire unless user revokes access to application + # for upgrade, check for validity of refresh token here + : + else + tokenExists + fi +} + +# Needs refactoring +function getToken(){ + #assign signal_var only if $SIGNAL_FILE exists + readSignal + tokenFileContent=$(cat "$TOKEN_FILE") + tokenValidity=$(sed -e 1b "$TOKEN_FILE" | head -n2 | grep error | sed 's/.*://' | sed 's/"//' | sed '$s/",/ /g') + + if ([ -s "$SIGNAL_FILE" ] && [ "$signal_var" == 'get' ]) || [ ! -n "$tokenFileContent" ] || [ "$tokenValidity" == "invalid_grant" ]; then + # if the signal says get then get token first + #get token into the file and assign variables accordingly + curl -sd "code=$AUTHORIZATION_CODE&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&redirect_uri=$REDIRECT_URI&grant_type=authorization_code&access_type=offline" https://www.googleapis.com/oauth2/v4/token > "$TOKEN_FILE" + local new_access_token=$(cat "$TOKEN_FILE" | grep access_token | awk '{print $2}' | tr -d \",) + local new_refresh_token=$(cat "$TOKEN_FILE" | grep refresh_token | awk '{print $2}' | tr -d \",) + local refresh_token_exists=$(varExists "$new_refresh_token") + + if [ "$refresh_token_exists" -eq 1 ] ; then + # check if the newly retrieved token actually exists to make sure + # write refresh token to the r_token.db file + echo "refresh_token:$new_refresh_token" > "$R_TOKEN_FILE" + ACCESS_TOKEN="$new_access_token" + REFRESH_TOKEN=$(sed -e 1b "$R_TOKEN_FILE" | grep refresh_token | sed 's/.*://' | xargs) + removeSignalFile + else + #if token varibles are empty, then need a new authorization code and get them + signalGetAccessToken + echo 2 + sleep 3 + open "$AUTH_URL" + exit 1 + fi + + #removing temp signal file + removeSignalFile + + else + : #do nothing, if you don't add this you get error + fi +} + +# check access token +function tokenExists(){ + #assigning token variables to use for checks + ACCESS_TOKEN=$(cat "$TOKEN_FILE" | grep access_token | awk '{print $2}' | tr -d \",) + REFRESH_TOKEN=$(sed -e 1b "$R_TOKEN_FILE" | grep refresh_token | sed 's/.*://' | xargs) + + if ([ -s "$TOKEN_FILE" ] && [ "${ACCESS_TOKEN}" ]); then + removeSignalFile + elif ([ -s "$TOKEN_FILE" ] && [ -n "${ACCESS_TOKEN}" ]); then + # if refresh token exists, use refresh token to get access token + refresh_token_exists=$(varExists "$REFRESH_TOKEN") + removeSignalFile + if [ "${refresh_token_exists}" -eq 1 ]; then + local new_token=$(curl -sd "refresh_token=$REFRESH_TOKEN&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token) > "$TOKEN_FILE" + #re-assign access_token to the updated one + local new_access_token=$(cat "$TOKEN_FILE" | grep access_token | awk '{print $2}' | tr -d \",) + local new_refresh_token=$(cat "$TOKEN_FILE" | grep refresh_token | awk '{print $2}' | tr -d \",) + + # check if the new access token exists to see if the valid authorization code was used + # if the new access token is empty, need to get a new authorization and then get a new access token + local token_exists=$(varExists "$new_access_token") + + if [ "${token_exists}" -eq 1 ]; then + #save refresh_token to file + echo "refresh_token:$new_refresh_token" > r_token.db + #assign token + ACCESS_TOKEN="$new_access_token" + REFRESH_TOKEN=$(sed -e 1b "$R_TOKEN_FILE" | grep refresh_token | sed 's/.*://' | xargs) + removeSignalFile + exit 0 + else + echo "Copy the code from the browser and paste it right after AUTHORIZATION_CODE: in the .coffee file" + echo "Once the code is pasted in , re-run this script" + signalGetAccessToken + sleep 3 + open "$AUTH_URL" + exit 1 + fi + else + #if refresh token is also missing, then get a new token + #for than you'd need to get a new authorizaiton code anyways + echo "Copy the code from the browser and paste it right after AUTHORIZATION_CODE: in the .coffee file" + echo "Once the code is pasted in , re-run this script" + signalGetAccessToken + sleep 3 + open "$AUTH_URL" + + exit 1 + fi + fi +} + +function checkTokenStatus(){ + # first, check if it is expired + local status=$(curl -sL "https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=$ACCESS_TOKEN" | grep "expires_in") + # this returns some values like 3600 if it's still valid + # if not it returns nothing + + # check that the access token is not expired... + # once passed this test, finally do some cool stuff + if [ -n "${status}" ] ; then + exit 0 #0 success exit + else + # if the acess token is expired, get the new access key using the refresh token + refresh_token_exists=$(varExists "$REFRESH_TOKEN") + + if [ "${refresh_token_exists}" -eq 1 ]; then + + curl -sd "refresh_token=$REFRESH_TOKEN&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token > "$TOKEN_FILE" + #re-assign access_token to the updated one + ACCESS_TOKEN=$(cat "$TOKEN_FILE" | grep access_token | awk '{print $2}' | tr -d \",) + else + tokenExists + fi + fi +} + +# Read client id and secrets first in case they alreay exists for later usage +# IMPORTANT +assignCredentialVars + +# Make necessary files if they don't exist +makeMultipleFiles "$TOKEN_FILE $R_TOKEN_FILE" + +# Check if credntials are filled in +# .coffee is where you store your CLIENT_ID, CLINET_SECRET and Authorization_code +credCheck + +# check if authorization code exists +# If exists, go to next action +# If it doesn't exists it will prompt you to get one and fill it in to a relevant file +checkAuthCode + +# check if refresh token exists and its validiy +checkRefreshToken + +# if refresh token is there, check if access key is expired or not +# if access key is expired, use refresh token to get a new access key +getToken + +# if for some reason, access key is empty or not valid after using refresh key +# get a new authoriation code and get a new access key and refresh token + +tokenExists + +checkTokenStatus diff --git a/calendar.widget/assets/parsej.sh b/calendar.widget/assets/parsej.sh new file mode 100755 index 0000000..bbfeee5 --- /dev/null +++ b/calendar.widget/assets/parsej.sh @@ -0,0 +1,426 @@ +#! /bin/sh +# from https://github.com/ShellShoccar-jpn/Parsrs/blob/master/parsrj.sh + +# parsrj.sh +# JSONテキストから +# JSONPathインデックス付き値(JSONPath-indexed value)テキストへの正規化 +# (例) +# {"hoge":111, +# "foo" :["2\n2", +# {"bar" :"3 3", +# "fizz":{"bazz":444} +# }, +# "\u5555" +# ] +# } +# ↓ +# $.hoge 111 +# $.foo[0] 2\n2 +# $.foo[1].bar 3 3 +# $.foo[1].fizz.bazz 444 +# $.foo[2] \u5555 +# ◇よって grep '^\$foo[1].bar ' | sed 's/^[^ ]* //' などと +# 後ろ grep, sed をパイプで繋げれば目的のキーの値部分が取れる。 +# さらにこれを unescj.sh にパイプすれば、完全な値として取り出せる。 +# +# Usage : parsrj.sh [JSON_file] ←JSONPath表現 +# : parsrj.sh --xpath [JSON_file] ←XPath表現 +# : parsrj.sh [2letters_options...] [JSON_file] ←カスタム表現 +# Options : -sk はキー名文字列内にあるスペースの置換文字列(デフォルトは"_") +# : -rt はルート階層シンボル文字列指定(デフォルトは"$") +# : -kd は各階層のキー名文字列間のデリミター指定(デフォルトは".") +# : -lp は配列キーのプレフィックス文字列指定(デフォルトは"[") +# : -ls は配列キーのサフィックス文字列指定(デフォルトは"]") +# : -fn は配列キー番号の開始番号(デフォルトは0) +# : -li は配列行終了時に添字なしの配列フルパス行(値は空)を挿入する +# : --xpathは階層表現をXPathにする(-rt -kd/ -lp[ -ls] -fn1 -liと等価) +# : -t は、値の型を区別する(文字列はダブルクォーテーションで囲む) +# : -e は、キー名に" ",".","[","]"を含む困ったJSONを扱う場合に指定 +# +# Written by 321516 (@shellshoccarjpn) / Date : Sep 15, 2016 +# +# This is a public-domain software (CC0). It measns that all of the +# people can use this for any purposes with no restrictions at all. +# By the way, I am fed up the side effects which are broght about by +# the major licenses. + + +set -u +PATH='/usr/bin:/bin' +IFS=$(printf ' \t\n_'); IFS=${IFS%_} +export IFS LANG=C LC_ALL=C PATH + +HT=$(printf '\t' ) # タブ +DQ=$(printf '\026' ) # 値のダブルクォーテーション(DQ)エスケープ用 +LF=$(printf '\\\n_');LF=${LF%_} # sed内で改行を変数として扱うためのもの + +file='' +sk='_' +rt='$' +kd='.' +lp='[' +ls=']' +fn=0 +unoptli='#' +unopte='#' +optt='' +unoptt='#' +case $# in [!0]*) + for arg in "$@"; do + if [ \( "_${arg#-sk}" != "_$arg" \) -a \( -z "$file" \) ]; then + sk=${arg#-sk} + elif [ \( "_${arg#-rt}" != "_$arg" \) -a \( -z "$file" \) ]; then + rt=${arg#-rt} + elif [ \( "_${arg#-kd}" != "_$arg" \) -a \( -z "$file" \) ]; then + kd=${arg#-kd} + elif [ \( "_${arg#-lp}" != "_$arg" \) -a \( -z "$file" \) ]; then + lp=${arg#-lp} + elif [ \( "_${arg#-ls}" != "_$arg" \) -a \( -z "$file" \) ]; then + ls=${arg#-ls} + elif [ \( "_${arg#-fn}" != "_$arg" \) -a \( -z "$file" \) -a \ + -n "$(printf '%s\n' "${arg#-fn}" | grep '^[0-9]\{1,\}$')" ]; then + fn=${arg#-fn} + fn=$((fn+0)) + elif [ \( "_$arg" = '_-li' \) -a \( -z "$file" \) ]; then + unoptli='' + elif [ \( "_$arg" = '_--xpath' \) -a \( -z "$file" \) ]; then + rt='' + kd='/' + lp='[' + ls=']' + fn=1 + unoptli='' + elif [ \( "_$arg" = '_-t' \) -a \( -z "$file" \) ]; then + optt='#' + unoptt='' + elif [ \( "_$arg" = '_-e' \) -a \( -z "$file" \) ]; then + unopte='' + elif [ \( \( -f "$arg" \) -o \( -c "$arg" \) \) -a \( -z "$file" \) ]; then + file=$arg + elif [ \( "_$arg" = "_-" \) -a \( -z "$file" \) ]; then + file='-' + else + cat <<______USAGE 1>&2 +Usage : ${0##*/} [JSON_file] ←JSONPath表現 + : ${0##*/} --xpath [JSON_file] ←XPath表現 + : ${0##*/} [2letters_options...] [JSON_file] ←カスタム表現 +Options : -sk はキー名文字列内にあるスペースの置換文字列(デフォルトは"_") + : -rt はルート階層シンボル文字列指定(デフォルトは"$") + : -kd は各階層のキー名文字列間のデリミター指定(デフォルトは".") + : -lp は配列キーのプレフィックス文字列指定(デフォルトは"[") + : -ls は配列キーのサフィックス文字列指定(デフォルトは"]") + : -fn は配列キー番号の開始番号(デフォルトは0) + : -li は配列行終了時に添字なしの配列フルパス行(値は空)を挿入する + : --xpathは階層表現をXPathにする(-rt -kd/ -lp[ -ls] -fn1 -liと等価) + : -t は、値の型を区別する(文字列はダブルクォーテーションで囲む) + : -e は、キー名に" ",".","[","]"を含む困ったJSONを扱う場合に指定 +______USAGE + exit 1 + fi + done + ;; +esac +export sk +export rt +export kd +export lp +export ls +[ -z "$file" ] && file='-' + + +# === データの流し込み ================================================= # +cat "$file" | +# # +# === 値としてのダブルクォーテーション(DQ)をエスケープしつつ =========== # +# ダブルクォーテーションで囲まれた"~"区間を単独行にする # +tr -d '\n' | # 1)元の改行を取り除き、 | +tr '"' '\n' | # 代わりにDQを改行にする | +awk ' # 2)値としてのDQを検出してエスケープ # +BEGIN { # + OFS=""; ORS=""; LF=sprintf("\n"); # + while (getline line) { # + len = length(line); # + if (substr(line,len)!="\\" ) { # + # a. 終端が"\"でないなら次行とは結合しない # + print line,LF; # + } else if (match(line,/^(\\\\)+$|[^\\](\\\\)+$/)) { # + # b. 終端に"\"が偶数個連続していても結合しない # + print line,LF; # + } else { # + # c. 終端に"\"が奇数個連続しているなら次行と結合 # + print substr(line,1,len-1),"'$DQ'"; # + } # + } # +}' | +awk ' # 3)元々DQで囲まれていた行(交互に現れる)を復元する # +BEGIN { # + OFS=""; even=0; # + while (getline line) { # + if (even==0) {print line ;} # + else {print "\"",line,"\"";} # + even=1-even; # + } # +}' | +# # +# === DQ始まり以外の行の"{","}","[","]",":",","の前後に改行を挿入 ====== # +sed "/^[^\"]/s/\([][{}:,]\)/$LF\1$LF/g" | +# # +# === 無駄な前後空白と空行は予め取り除いておく ========================= # +sed 's/^[ '"$HT"']\{1,\}//' | +sed 's/[ '"$HT"']\{1,\}$//' | +grep -v '^[ '"$HT"']*$' | +# # +# === 行頭の記号を見ながら状態遷移させて処理(*1,strict版*2) ============ # +# (*1 エスケープしたDQもここで元に戻す) # +# (*2 JSONの厳密なチェックを省略するならもっと簡素で高速にできる) # +awk ' # +BEGIN { # + # キー文字列内にあるスペースの置換文字列をシェル変数に基づいて定義 # + alt_spc_in_key=ENVIRON["sk"]; # + # 階層表現文字列をシェル変数に基づいて定義する # + root_symbol=ENVIRON["rt"]; # + key_delimit=ENVIRON["kd"]; # + list_prefix=ENVIRON["lp"]; # + list_suffix=ENVIRON["ls"]; # + # データ種別スタックの初期化 # + datacat_stack[0]=""; # + delete datacat_stack[0] # + # キー名スタックの初期化 # + keyname_stack[0]=""; # + delete keyname_stack[0] # + # スタックの深さを0に設定 # + stack_depth=0; # + # エラー終了検出変数を初期化 # + _assert_exit=0; # + # 同期信号キャラクタ(事前にエスケープしていたDQを元に戻すため) # + DQ="'$DQ'"; # + # 改行キャラクター # + LF =sprintf("\n"); # + # print文の自動フィールドセパレーター挿入と文末自動改行をなくす # + OFS=""; # + ORS=""; # + # # + # メインループ # + while (getline line) { # + # "{"行の場合 # + if (line=="{") { # + # データ種別スタックが空、又は最上位が"l0:配列(初期要素値待ち)"、 # + # "l1:配列(値待ち)"、"h3:ハッシュ(値待ち)"であることを確認したら # + # データ種別スタックに"h0:ハッシュ(初期キー待ち)"をpush # + if ((stack_depth==0) || # + (datacat_stack[stack_depth]=="l0") || # + (datacat_stack[stack_depth]=="l1") || # + (datacat_stack[stack_depth]=="h3") ) { # + stack_depth++; # + datacat_stack[stack_depth]="h0"; # + continue; # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + # "}"行の場合 # + } else if (line=="}") { # + # データ種別スタックが空でなく最上位が"h0:ハッシュ(初期キー待ち)"、# + # "h4:ハッシュ(値取得済)"であることを確認したら # + # データ種別スタック、キー名スタック双方をpop # + # もしpop直後の最上位が"l0:配列(初期要素値待ち)"または # + # "l1:配列(値待ち)"だった場合には"l2:配列(値取得直後)"に変更 # + # 同様に"h3:ハッシュ(値待ち)"だった時は"h4:ハッシュ(値取得済)"に # + if (stack_depth>0) { # + s=datacat_stack[stack_depth]; # + if (s=="h0" || s=="h4") { # + if (s=="h0") {print_keys_and_value("");} # + delete datacat_stack[stack_depth]; # + delete keyname_stack[stack_depth]; # + stack_depth--; # + if (stack_depth>0) { # + if ((datacat_stack[stack_depth]=="l0") || # + (datacat_stack[stack_depth]=="l1") ) { # + datacat_stack[stack_depth]="l2" # + } else if (datacat_stack[stack_depth]=="h3") { # + datacat_stack[stack_depth]="h4" # + } # + } # + continue; # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + # "["行の場合 # + } else if (line=="[") { # + # データ種別スタックが空、又は最上位が"l0:配列(初期要素値待ち)"、 # + # "l1:配列(値待ち)"、"h3:ハッシュ(値待ち)"であることを確認したら # + # データ種別スタックに"l0:配列(初期要素値待ち)"をpush、 # + # およびキー名スタックに配列番号0をpush # + if ((stack_depth==0) || # + (datacat_stack[stack_depth]=="l0") || # + (datacat_stack[stack_depth]=="l1") || # + (datacat_stack[stack_depth]=="h3") ) { # + stack_depth++; # + datacat_stack[stack_depth]="l0"; # + keyname_stack[stack_depth]='"$fn"'; # + continue; # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + # "]"行の場合 # + } else if (line=="]") { # + # データ種別スタックが空でなく最上位が"l0:配列(初期要素値待ち)"、 # + # "l2:配列(値取得直後)"であることを確認したら # + # データ種別スタック、キー名スタック双方をpop # + # もしpop直後の最上位が"l0:配列(初期要素値待ち)"または # + # "l1:配列(値待ち)"だった場合には"l2:配列(値取得直後)"に変更 # + # 同様に"h3:ハッシュ(値待ち)"だった時は"h4:ハッシュ(値取得済)"に # + if (stack_depth>0) { # + s=datacat_stack[stack_depth]; # + if (s=="l0" || s=="l2") { # + if (s=="l0") {print_keys_and_value("");} # + '"$unoptli"'if (s=="l2") {print_keys_and_value("");} # + delete datacat_stack[stack_depth]; # + delete keyname_stack[stack_depth]; # + stack_depth--; # + if (stack_depth>0) { # + if ((datacat_stack[stack_depth]=="l0") || # + (datacat_stack[stack_depth]=="l1") ) { # + datacat_stack[stack_depth]="l2" # + } else if (datacat_stack[stack_depth]=="h3") { # + datacat_stack[stack_depth]="h4" # + } # + } # + continue; # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + # ":"行の場合 # + } else if (line==":") { # + # データ種別スタックが空でなく # + # 最上位が"h2:ハッシュ(キー取得済)"であることを確認したら # + # データ種別スタック最上位を"h3:ハッシュ(値待ち)"に変更 # + if ((stack_depth>0) && # + (datacat_stack[stack_depth]=="h2") ) { # + datacat_stack[stack_depth]="h3"; # + continue; # + } else { # + _assert_exit=1; # + exit _assert_exit; # + } # + # ","行の場合 # + } else if (line==",") { # + # 1)データ種別スタックが空でないことを確認 # + if (stack_depth==0) { # + _assert_exit=1; # + exit _assert_exit; # + } # + '"$unoptli"'# 1.5)-liオプション有効時の動作 # + '"$unoptli"'if (substr(datacat_stack[stack_depth],1,1)=="l") { # + '"$unoptli"' print_keys_and_value(""); # + '"$unoptli"'} # + # 2)データ種別スタック最上位値によって分岐 # + # 2a)"l2:配列(値取得直後)"の場合 # + if (datacat_stack[stack_depth]=="l2") { # + # 2a-1)データ種別スタック最上位を"l1:配列(値待ち)"に変更 # + datacat_stack[stack_depth]="l1"; # + # 2a-2)キー名スタックに入っている配列番号を+1 # + keyname_stack[stack_depth]++; # + continue; # + # 2b)"h4:ハッシュ(値取得済)"の場合 # + } else if (datacat_stack[stack_depth]=="h4") { # + # 2b-1)データ種別スタック最上位を"h1:ハッシュ(次キー待ち)"に変更 # + datacat_stack[stack_depth]="h1"; # + continue; # + # 2c)その他の場合 # + } else { # + # 2c-1)エラー # + _assert_exit=1; # + exit _assert_exit; # + } # + # それ以外の行(値の入っている行)の場合 # + } else { # + # 1)データ種別スタックが空でないことを確認 # + if (stack_depth==0) { # + _assert_exit=1; # + exit _assert_exit; # + } # + # 2)DQ囲みになっている場合は予めそれを除去しておく # + # 3)事前にエスケープしていたDQをここで元に戻す # + if (match(line,/^".*"$/)) { # + gsub(DQ,"\\\"",line); # + key=substr(line,2,length(line)-2); # + '"$optt"'value=key; # + '"$unoptt"'value=line; # + } else { # + gsub(DQ,"\\\"",line); # + key=line; # + value=line; # + } # + '"$unopte"'gsub(/ / ,"\\u0020",key); # + '"$unopte"'gsub(/\./,"\\u002e",key); # + '"$unopte"'gsub(/\[/,"\\u005b",key); # + '"$unopte"'gsub(/\]/,"\\u005d",key); # + # 4)データ種別スタック最上位値によって分岐 # + # 4a)"l0:配列(初期要素値待ち)"又は"l1:配列(値待ち)"の場合 # + s=datacat_stack[stack_depth]; # + if ((s=="l0") || (s=="l1")) { # + # 4a-1)キー名スタックと値を表示 # + print_keys_and_value(value); # + # 4a-2)データ種別スタック最上位を"l2:配列(値取得直後)"に変更 # + datacat_stack[stack_depth]="l2"; # + # 4b)"h0,h1:ハッシュ(初期キー待ち,次キー待ち)"の場合 # + } else if (s=="h0" || (s=="h1")) { # + # 4b-1)値をキー名としてキー名スタックにpush # + gsub(/ /,alt_spc_in_key,value); # + keyname_stack[stack_depth]=key; # + # 4b-2)データ種別スタック最上位を"h2:ハッシュ(キー取得済)"に変更 # + datacat_stack[stack_depth]="h2"; # + # 4c)"h3:ハッシュ(値待ち)"の場合 # + } else if (s=="h3") { # + # 4c-1)キー名スタックと値を表示 # + print_keys_and_value(value); # + # 4a-2)データ種別スタック最上位を"h4:ハッシュ(値取得済)"に変更 # + datacat_stack[stack_depth]="h4"; # + # 4d)その他の場合 # + } else { # + # 4d-1)エラー # + _assert_exit=1; # + exit _assert_exit; # + } # + } # + } # +} # +END { # + # 最終処理 # + if (_assert_exit) { # + print "Invalid JSON format", LF > "/dev/stderr"; # + line1="keyname-stack:"; # + line2="datacat-stack:"; # + for (i=1;i<=stack_depth;i++) { # + line1=line1 sprintf("{%s}",keyname_stack[i]); # + line2=line2 sprintf("{%s}",datacat_stack[i]); # + } # + print line1, LF, line2, LF > "/dev/stderr"; # + } # + exit _assert_exit; # +} # +# キー名一覧と値を表示する関数 # +function print_keys_and_value(str) { # + print root_symbol; # + for (i=1;i<=stack_depth;i++) { # + if (substr(datacat_stack[i],1,1)=="l") { # + print list_prefix, keyname_stack[i], list_suffix; # + } else { # + print key_delimit, keyname_stack[i]; # + } # + } # + print " ", str, LF; # +} # +' diff --git a/calendar.widget/assets/run.sh b/calendar.widget/assets/run.sh new file mode 100755 index 0000000..3dfef94 --- /dev/null +++ b/calendar.widget/assets/run.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# -- For debugging +function runDebugLogger(){ + if [ ! -e debugLogger.sh ]; then + cd assets + source debugLogger.sh + else + source debugLogger.sh + fi + # Debug function to trace all scripts run below it + activate_debug_logger +} +# Uncomment the below to enalbe the debugger +# runDebugLogger + +function setWorkingDir(){ + if [ ! -e oauth.sh ]; then + cd assets + else + : + fi +} + +setWorkingDir + +function readCredVar(){ #rename as this is confusing this applies to extracting all values in a file after a colon : + #$1 = file name + #$2 = var name e.g. CLIENT_ID + local credVar=$(sed -e 1b "$1" | grep "$2" | sed 's/.*://' | sed 's/"//' | sed '$s/"/ /g' | xargs) + echo "$credVar" +} + +readonly PARENT_DIR=${PWD%/*} +readonly COFFEE_FILE_NAME=$(ls ../ | grep .coffee) +readonly COFFEE_FILE="$PARENT_DIR"/"$COFFEE_FILE_NAME" +readonly GOOGLE_APP=$( readCredVar "$COFFEE_FILE" GOOGLE_APP ) +readonly APP=$( echo "./$GOOGLE_APP.sh" ) + +function isNetworkAlive(){ + ./networkAlive.sh +} + +function runApp(){ + "$APP" +} + +until isNetworkAlive; do + sleep 10 +done + +runApp diff --git a/calendar.widget/calendar.coffee b/calendar.widget/calendar.coffee new file mode 100644 index 0000000..e4527bd --- /dev/null +++ b/calendar.widget/calendar.coffee @@ -0,0 +1,255 @@ +# Name: Google Calendar for Übersicht using oauth2 +# Description: Obtain google calendar events using google oauth2 for widget for Mac OSX app Übersicht. Sorts and displays events for today and tomorrow based on user's Google calendar's timezone. Allows multiple google calendars in user's calendar list. +# Author: Ryuei Sasaki +# Github: https://github.com/louixs/ + +# Dependencies. Best to leave them alone. +_ = require('./assets/lib/underscore.js'); + +GOOGLE_APP:"calendar" + +#==== Google API Credentials ==== +# Fill in your Google API cleint id and client secret +# Save this file and a browser should launch asking you to allow widget to access google calendar +# Once you allow, you will be presented with your Authorization code. Please fill it in and save the file. +# Your calendar events should now show. If not try refreshing Übersicht. +# If you don't have your client id and/or client secret, please follow the steps in the Setup section in README.md. + +CLIENT_ID:"" +CLIENT_SECRET:"" +AUTHORIZATION_CODE:"" + +#==== Calendar Name +# Place calendar names seperated with commas. +# i.e. "Calendar_1, Calendar_2, Calendar_3, Calendar Name 4" +# Calendar names are case sensitive. +CALENDAR_NAME:"" +#==== + +command:""" + if [ ! -d assets ]; then + cd "$PWD"/calendar.widget + "$PWD"/assets/run.sh + else + "$PWD"/run.sh + fi +""" + +refreshFrequency: '30m' #30 min. +#Other permitted formats: '2 days', '1d', '10h', '2.5 hrs', '2h', '1m', or '5s' + +#
~~~~~~~~~~~~~~~~
+render: (output) -> """ +
+ +""" + +update: (output, domEl)-> + show=(item)-> # for debugging + console.log(item) + + #zip #https://cedricruiz.me/blog/functional-coffeescript-for-the-impatient/ + zip = (xss...) -> xss[0].map (_, i) -> xss.map (xs) -> xs[i] + + # Clear DOM upon every update to avoid duplicated display + $(domEl).find(".container").empty() + + trimSpaceOfStringInNestedArr=(arr)-> + _.map(arr,(innerArr)-> _.map(innerArr, (item)-> item.trim())) + #-- + + trimSpaceOfStringInArr=(arr)-> + _.map(arr, (item)-> item.trim()) + + parseHoursMins=(time)-> + #time = e.g. "2017-01-02T13:00:00Z" + d= new Date(time) + mins = ('0'+d.getMinutes()).slice(-2) + hoursMinsParsed="#{d.getHours()}:#{mins}" + if hoursMinsParsed == "0:00" + return "0#{hoursMinsParsed}" + else + return hoursMinsParsed + + parseTime=(arr)-> + _.map(arr, (innerArr)-> # O(N^2); improve + _.map(innerArr, (item)-> + if item == "All Day" + return item + else + return parseHoursMins(item))) + + + splitClean=(data, pos)-> + return trimSpaceOfStringInArr(data[pos].split(",")) + + getStartEndTime=(data)-> + time=data.split("§-§")[0].split("~") + splitClean=(data, pos)-> + return trimSpaceOfStringInArr(data[pos].split("+|+")) + startTime=splitClean(time, 0) + endTime=splitClean(time, 1) + zippedStartAndEndTime= zip startTime, endTime + timeAllDayConcat= _.map(zippedStartAndEndTime, (item)-> _.unique(item)) + convertedTime=parseTime(timeAllDayConcat) + returnTime= _.chain(convertedTime) + .map((arrWithin)-> + if _.size(arrWithin) > 1 + arrWithin.join("~") + else if _.size(arrWithin) == 1 + _.map(arrWithin, (item)-> + if item isnt "All Day" + return "#{item}      " + else + return item) + else + arrWithin) + .flatten() + .value() + return returnTime + + zipTimeAndEvent=(data,pos)-> + inputData=data[pos] + time=getStartEndTime(inputData) + show inputData + eventName=inputData.split("§-§")[1].split("+|+") + arr= zip time, eventName + return arr + + #- The first processing for the output data directly from the shell command + splitMultiCalendar=-> + calendarData=output.split("||") + return calendarData + + getEventsPerCal=(cal,pos)-> + #pos 0 is today, pos 1 is tmrw + split_calendar=cal.split("--!--") + evts=zipTimeAndEvent(split_calendar,pos) + return evts + + flattenOneLevel=(nestedArr)-> + resArr=[] + for item in nestedArr + for i in item + resArr.push i + return resArr + + getEvents=(todayOrTmrw)-> + # Param todayOrTmrw: + # 0 for today + # 1 for tomorrow + calArr=splitMultiCalendar() + eventsArr=[] + for cal in calArr + eventsArr.push getEventsPerCal(cal,todayOrTmrw) + return eventsArr + + removeEmptyItem=(arr)-> + returnArr= _.chain(arr) + .reject((item)-> _.contains(item,"")) + .value() + return returnArr + + addSpaceToAllDay=(arr)-> + _.map(arr, (innerArr)-> + _.map(innerArr, (item)-> + if item == "All Day" + return "#{item}    " + else + return item)) + + sortArrForDisplay=(arr)-> + trimmedArr= _.map(arr,(innerArr)-> _.map(innerArr, (item)-> item.trim())) + sortedArrAllDayLast=_.sortBy(trimmedArr, (item)-> item) + sortedArrGroupedTwoItems=_.chain(sortedArrAllDayLast) + .partition((item)-> _.contains(item, "All Day")) + .value() + sortedArr=flattenOneLevel(sortedArrGroupedTwoItems) + cleanedArr=removeEmptyItem(sortedArr) + formattedArr=addSpaceToAllDay(cleanedArr) + return formattedArr + #-- + + makeHTMLTitle=(title)-> + return titleToAdd="
#{title}
" + + + addArrToDom = (title,arr)-> + titleToAdd=makeHTMLTitle(title) + $(domEl).find(".container").append(titleToAdd) + for element,index in arr + itemToAdd="
#{arr[index].join(" ")}
" + $(domEl).find(".container").append(itemToAdd) + + addStrToDom = (title, str) -> + titleToAdd=makeHTMLTitle(title) + $(domEl).find(".container").append(titleToAdd) + $(domEl).find(".container").append(str) + + addItemsFilterNoEventsDay=(arr, title)-> + arrSize=_.size(arr) + if arrSize is 0 + addStrToDom(title, "No events") + # enhancement idea - add radom tips for activities (from some sites or hard coded?) + # or maybe take some stuff from timeout? + # addStrToDom(title, "No events. How about (fill in the blank)?") + else + addArrToDom(title, arr) + + addCalItemsToDom=-> + todayArr=flattenOneLevel(getEvents(0)) + tmrwArr=flattenOneLevel(getEvents(1)) + sortedTodayArr=sortArrForDisplay(todayArr) + sortedTmrwArr=sortArrForDisplay(tmrwArr) + + addToday=()-> + addItemsFilterNoEventsDay(sortedTodayArr, "--Today-----") + + addTmrw=()-> + addItemsFilterNoEventsDay(sortedTmrwArr, "
--Tomorrow--") + addToday() + addTmrw() + + makeDomClassP=(text)-> + "
#{text}

" + + addErrMsgToDom=(text)-> + elemToAdd=makeDomClassP(text) + $(domEl).find(".container").html(elemToAdd) + + showCalendarItemsIfErrorFree=-> + if parseInt(output) is 1 + errMsg="Please fill in google_oauth.config file (found 2 directories up. If you install .widget folder in the standard übersicht location, it will be in Library/Application Support/Übersicht/widgets) with Client ID and Client secret. Please save and click on Refresh All Widgets from the Übersicht menu. Once you save and have a valid set of client ID/secret, a browser should launch and ask whether you want to allow your app to access google calendar. Please allow and you will be presented with Authorization code. If you don't have Client ID/secret, you would need to generate them on your google developer console. http://console.developers.google.com" + addErrMsgToDom(errMsg) + else if parseInt(output) is 2 + errMsg="A browser window launches asking if you would like to allow your app. Click Allow and your authorization code will be shown. Please copy the code and paste it in .coffee file. Once it is done please save this file to let Übersicht reload or/and use Refresh All Widgets again to reload." + addErrMsgToDom(errMsg) + else if parseInt(output) is 3 + errMsg="Please put calendar names, seperated with commas, in the .coffee file. And save this file and/or refresh Übersicht." + addErrMsgToDom(errMsg) + else + addCalItemsToDom() + + showCalendarItemsIfErrorFree() + +# the CSS style for this widget, written using Stylus +# (http://learnboost.github.io/stylus/) +style: """ + //-webkit-backdrop-filter: blur(20px) + @font-face + font-family: 'hack' + src: url('assets/lib/hack.ttf') + font-family: hack, Andale Mono, Melno, Monaco, Courier, Helvetica Neue, Osaka + color: #df740c //#7eFFFF + font-weight: 100 + font-size: 11 px + top: 15% + left: 2% + line-height: 1.5 + //margin-left: -40px + //padding: 120px 20px 20px + + .title + color: #ffe64d //#6fc3df + text-shadow: 0 0 1px rgba(#000, 0.5) +""" diff --git a/clean.sh b/clean.sh new file mode 100755 index 0000000..2cabad9 --- /dev/null +++ b/clean.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# clean +# ensure not sensitive data is commited +# run this with pre-commit hook + +folder=$1 + +rm "$folder"/assets/*.db +echo ".db files removed" +rm -r "$folder"/assets/log +echo "log files removed" diff --git a/deployReady_zip.sh b/deployReady_zip.sh new file mode 100755 index 0000000..d22882d --- /dev/null +++ b/deployReady_zip.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +function fileExists(){ + # check if the variable exists or not + if [ -f $1 ] && [ -n $1 ] ; then + return 0 # file exists + else + return 1 # file does not exist + fi +} + +folder=$1 + +rm "$folder"/assets/*.db +echo ".db files removed" +rm -r "$folder"/assets/log +echo "log files removed" + +if fileExists "$folder".zip; then + rm "$folder".zip + zip -r "$folder".zip "$folder" + echo "deleted existing .zip and re-zipped" +else + zip -r "$folder".zip "$folder" + echo "re-zipped" +fi + diff --git a/gitPushOriginMaster.sh b/gitPushOriginMaster.sh new file mode 100755 index 0000000..cf38371 --- /dev/null +++ b/gitPushOriginMaster.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# For adding the whole stack, add a commit message and push from origin to master + +git add . +git commit -m "$1" +git push origin master diff --git a/note_for_dev b/note_for_dev new file mode 100644 index 0000000..8ef697b --- /dev/null +++ b/note_for_dev @@ -0,0 +1,26 @@ +Notes for myself... + +For github setup: + +steps: +remove .DS_Store +find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch + +add .DS_Store to .gitignore file + +- steps after creating git repo +- finish and commit any remaining changes first else it will be overridden by merge +git add . +git commit -m "commit" + +git remote add origin "url" +git fetch +git merge origin/master --allow-unrelated-histories +git add . +git commit -m "commit" +git push origin master + +For deployment: + +First, run ./deployReady.sh calendar.widget to clean up and re-zip .widget folder +Secondly, to push to github run ./gitPushOriginMaster.sh calendar.widget "git commit message" to make sure to clean up first (just in case) and add all to stage and commit, push to master \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c6679f95a5dc675fa07edec791b1c07a0070f636 GIT binary patch literal 161707 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 I#SDZ019*fu)Bpeg literal 0 HcmV?d00001 diff --git a/widget.json b/widget.json new file mode 100644 index 0000000..557fd26 --- /dev/null +++ b/widget.json @@ -0,0 +1,6 @@ +{ + "name": "Google Calendar widget for Übersicht", + "description": "Displays today's and tomorrow's events for multiple Google calendars that the user has access to view using Google API and Google oauth2. This is the first in the Übersicht Google Widgets bundle I am working on", + "author": "Ryuei Sasaki", + "email": "ryuei.sasaki@gmail.com" +} diff --git a/zip.sh b/zip.sh new file mode 100755 index 0000000..25236c4 --- /dev/null +++ b/zip.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +folder=$1 + +if fileExists "$folder".zip; then + rm "$folder".zip + zip -r "$folder".zip "$folder" + echo "deleted existing .zip and re-zipped" +else + zip -r "$folder".zip "$folder" + echo "re-zipped" +fi +