summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/timeprivacy270
1 files changed, 270 insertions, 0 deletions
diff --git a/src/timeprivacy b/src/timeprivacy
new file mode 100644
index 0000000..5fd6fd7
--- /dev/null
+++ b/src/timeprivacy
@@ -0,0 +1,270 @@
+#!/bin/bash
+
+## Copyright (c) 2013, adrelanos at riseup dot net
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+## 1. Redistributions of source code must retain the above copyright notice, this
+## list of conditions and the following disclaimer.
+## 2. Redistributions in binary form must reproduce the above copyright notice,
+## this list of conditions and the following disclaimer in the documentation
+## and/or other materials provided with the distribution.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+## ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#set -x
+
+SCRIPTNAME="$(basename $0)"
+
+usage() {
+ echo "$SCRIPTNAME
+
+Usage: $SCRIPTNAME [-h help] [-d day] [-m month] [-y year] [-i increment in seconds (0-60)] [-r random increment in seconds (0-60)] [-f history folder]
+Example: $SCRIPTNAME -d 30 -m 12 -y 2013 -i 10 -f /tmp/$SCRIPTNAMEtest
+ sudo $SCRIPTNAME -d 30 -m 12 -y 2013 -r -f /tmp/$SCRIPTNAMEtest"
+}
+
+_randomincrement="none"
+_increment="none"
+
+while [ -n "$1" ]; do
+ case "$1" in
+ -h)
+ usage
+ exit 0
+ ;;
+ -d)
+ _day="$2"
+ shift
+ ;;
+ -m)
+ _month="$2"
+ shift
+ ;;
+ -y)
+ _year="$2"
+ shift
+ ;;
+ -i)
+ _increment="$2"
+ shift
+ ;;
+ -r)
+ _randomincrement="$2"
+ shift
+ ;;
+ -f)
+ TIMEDIR="$2"
+ shift
+ ;;
+ *)
+ command="$(which $1)"
+ ## From now on the complete to-be wrapped command + its args
+ ## are stored in $@, which will expand like we want it for
+ ## handling quoted arguments with whitespaces in it, etc.
+ break
+ esac
+ shift
+done
+
+if [ -z "$_day" ]; then
+ _day="$(date +"%d")"
+fi
+
+if [ -z "$_month" ]; then
+ _month="$(date +"%m")"
+fi
+
+if [ -z "$_year" ]; then
+ _year="$(date +"%Y")"
+fi
+
+if [ "$_randomincrement" = "none" ] && [ "$_increment" = "none" ]; then
+ _increment="1"
+fi
+
+if [ "$_randomincrement" = "none" ]; then
+ if [ -z "$_increment" ]; then
+ _increment="1"
+ fi
+elif [ "$_increment" = "none" ]; then
+ if [ "$_randomincrement" = "" ]; then
+ echo "randomincrement must be a positive number."
+ exit 1
+ else
+ ## random number between 1 and $_randomincrement
+ random_number="$(( 0+($(od -An -N2 -i /dev/random) )%($_randomincrement-0+1) ))"
+ _increment="$random_number"
+ fi
+else
+ echo "You can not combine -r and -i."
+ exit 1
+fi
+
+if [ -z "$TIMEDIR" ]; then
+ TIMEDIR=~/.timeprivacy
+fi
+
+nodigits="$(echo $_increment | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "increment is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_year | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "_day is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_year | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "year is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_month | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "month is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_day | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "day is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_increment | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "increment is not a digit."
+ exit 1
+fi
+
+SECONDS_FILE="$TIMEDIR/seconds_file"
+MINUTES_FILE="$TIMEDIR/minutes_file"
+HOURS_FILE="$TIMEDIR/hours_file"
+
+#DAYS_FILE="$TIMEDIR/days_file"
+#MONTHS_FILE="$TIMEDIR/months_file"
+#YEARS_FILE="$TIMEDIR/years_file"
+
+#true "TIMEDIR: $TIMEDIR"
+#true "year: $_year"
+#true "month: $_month"
+#true "day: $_day"
+#true "_randomincrement: $_randomincrement"
+#true "_increment: $_increment"
+
+read_date_file() {
+ if [ ! -d "$TIMEDIR" ]; then
+ mkdir -p "$TIMEDIR"
+ fi
+
+ if [ ! -f "$SECONDS_FILE" ]; then
+ echo "0" > "$SECONDS_FILE"
+ fi
+
+ if [ ! -f "$MINUTES_FILE" ]; then
+ echo "0" > "$MINUTES_FILE"
+ fi
+
+ if [ ! -f "$HOURS_FILE" ]; then
+ echo "0" > "$HOURS_FILE"
+ fi
+
+ #if [ ! -f "$DAYS_FILE" ]; then
+ #echo "1" > "$DAYS_FILE"
+ #fi
+
+ #if [ ! -f "$MONTHS_FILE" ]; then
+ #echo "1" > "$MONTHS_FILE"
+ #fi
+
+ #if [ ! -f "$YEARS_FILE" ]; then
+ #echo "2013" > "$YEARS_FILE"
+ #fi
+
+ SECONDS="$(cat "$SECONDS_FILE")"
+ MINUTES="$(cat "$MINUTES_FILE")"
+ HOURS="$(cat "$HOURS_FILE")"
+
+ if [ -z "$SECONDS" ]; then
+ SECONDS="0"
+ fi
+
+ if [ -z "$MINUTES" ]; then
+ MINUTES="0"
+ fi
+
+ if [ -z "$HOURS" ]; then
+ HOURS="0"
+ fi
+
+ local nodigits="$(echo $SECONDS | sed 's/[[:digit:]]//g')"
+ if [ ! -z "$nodigits" ]; then
+ SECONDS="0"
+ fi
+
+ local nodigits="$(echo $MINUTES | sed 's/[[:digit:]]//g')"
+ if [ ! -z "$nodigits" ]; then
+ MINUTES="0"
+ fi
+
+ local nodigits="$(echo $HOURS | sed 's/[[:digit:]]//g')"
+ if [ ! -z "$nodigits" ]; then
+ HOURS="0"
+ fi
+
+ SECONDS="$(expr "$SECONDS" + "$_increment")" || true
+ if [ "$SECONDS" -ge "60" ]; then
+ SECONDS="0"
+
+ MINUTES="$(expr "$MINUTES" + "1")" || true
+ if [ "$MINUTES" -ge "60" ]; then
+ MINUTES="0"
+
+ HOURS="$(expr "$HOURS" + "1")" || true
+ if [ "$HOURS" -ge "24" ]; then
+ HOURS="0"
+ fi
+ echo "$HOURS" > "$HOURS_FILE"
+
+ fi
+ echo "$MINUTES" > "$MINUTES_FILE"
+
+ fi
+
+ echo "$SECONDS" > "$SECONDS_FILE"
+
+ #echo "$HOURS $MINUTES $SECONDS"
+}
+
+need_new_date() {
+ ## Testing
+ #while [ 1 ]; do
+ # read_date_file
+ #done
+
+ read_date_file
+
+ ## Testing
+ #echo "faketime '$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS' /bin/date"
+ #faketime "$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS" /bin/date
+
+ echo "$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS"
+}
+
+need_new_date
+