diff --git a/.dockerignore b/.dockerignore
index 947d3f5..e4b29ef 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,3 +1,4 @@
dist/
db.sqlite
build/
+.git
diff --git a/Dockerfile b/Dockerfile
index 1c22bac..001cbc9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,27 +1,43 @@
# focal amd64 as of 2020-03-10
FROM ubuntu@sha256:d050ed7278c16ff627e4a70d7d353f1a2ec74d8a0b66e5a865356d92f5f6d87b
-#######################################################################33
+################################################################################
## Mirror Setup
## - option to use local mirror to speed build
-#######################################################################33
+################################################################################
ARG UBUNTU_MIRROR=http://archive.ubuntu.com/ubuntu
-RUN echo "deb $UBUNTU_MIRROR focal main universe restricted multiverse" > /etc/apt/sources.list.new && \
-echo "deb $UBUNTU_MIRROR focal-updates main universe restricted multiverse" >> /etc/apt/sources.list.new && \
-echo "deb $UBUNTU_MIRROR focal-security main universe restricted multiverse" >> /etc/apt/sources.list.new && \
-echo "deb $UBUNTU_MIRROR focal-backports main universe restricted multiverse" >> /etc/apt/sources.list.new && \
-mv /etc/apt/sources.list.new /etc/apt/sources.list
+RUN echo "deb $UBUNTU_MIRROR focal main universe restricted multiverse" > \
+ /etc/apt/sources.list.new && \
+ echo "deb $UBUNTU_MIRROR focal-updates main universe restricted multiverse" >> \
+ /etc/apt/sources.list.new && \
+ echo "deb $UBUNTU_MIRROR focal-security main universe restricted multiverse" >> \
+ /etc/apt/sources.list.new && \
+ echo "deb $UBUNTU_MIRROR focal-backports main universe restricted multiverse" >> \
+ /etc/apt/sources.list.new && \
+ mv /etc/apt/sources.list.new /etc/apt/sources.list
-#######################################################################33
+
+ARG UID=61000
+ARG GID=61000
+
+RUN groupadd \
+ --system --gid $GID \
+ app && \
+ useradd \
+ --system --gid $GID --uid $UID \
+ --no-log-init -m -s /bin/false --home-dir /home/app \
+ app
+
+################################################################################
## Versions
-#######################################################################33
+################################################################################
# master as of 2020-03-10
ARG PYENV_COMMIT=df9fa1dc30b6448ef8605e2c2d4dfc2a94d6a35d
ARG PYTHON_VERSION=3.8.1
-#######################################################################33
+################################################################################
## Packages
-#######################################################################33
+################################################################################
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && \
apt upgrade -y && \
@@ -39,6 +55,7 @@ RUN apt update && \
libssl-dev \
llvm \
locales \
+ locales \
make \
python-openssl \
tk-dev \
@@ -46,30 +63,48 @@ RUN apt update && \
xz-utils \
zlib1g-dev \
&& \
+ echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && \
+ dpkg-reconfigure --frontend=noninteractive locales && \
+ update-locale LANG=en_US.UTF-8 && \
mkdir -p /var/app && \
- git clone https://github.com/pyenv/pyenv.git /usr/local/pyenv && \
- cd /usr/local/pyenv && \
+ chown app:app /var/app
+
+
+ENV LANG en_US.UTF-8
+
+USER app
+WORKDIR /home/app
+ENV HOME /home/app
+
+RUN git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv && \
+ cd $HOME/.pyenv && \
git checkout $PYENV_COMMIT
-ENV PYENV_ROOT /usr/local/pyenv
-ENV PATH $PYENV_ROOT/bin:$PATH
+ENV PYENV_ROOT $HOME/.pyenv
+ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
-
-#######################################################################33
+################################################################################
## Python
-#######################################################################33
+################################################################################
RUN pyenv install $PYTHON_VERSION && \
- pyenv global $PYTHON_VERISON
+ pyenv global $PYTHON_VERSION && \
+ pyenv rehash && \
+ pip install --upgrade pip && \
+ pip install pipenv
-RUN ls $PYENV_ROOT/bin/
-#######################################################################33
-## Install Deps
-#######################################################################33
-ADD ./Pipfile ./Pipfile.lock /var/app/
+
+################################################################################
+## Install App Deps
+################################################################################j
WORKDIR /var/app
-RUN pipenv install --python $(which python3)
+COPY ./Pipfile ./Pipfile.lock /var/app/
+RUN pipenv install --python $PYENV_ROOT/shims/python
-#######################################################################33
+################################################################################
## Install App
-#######################################################################33
-ADD ./* /var/app/
+################################################################################
+COPY . /var/app
+
+VOLUME /data
+
+CMD ['pipenv', 'run', 'bin/tvidd']
diff --git a/Makefile b/Makefile
index b462c41..7dfb487 100644
--- a/Makefile
+++ b/Makefile
@@ -7,11 +7,11 @@ default: docker
peinstall:
pipenv install --python $(shell which python3)
-serve:
+develop:
pipenv run python ./bin/tvidd
clean:
rm -rf build dist tvid.egg-info
docker:
- docker build --build-arg UBUNTU_MIRROR="http://ubuntu.datavi.be/ubuntu" .
+ docker build -t sneak/tvid --build-arg UBUNTU_MIRROR="http://ubuntu.datavi.be/ubuntu" .
diff --git a/tvid/db.py b/tvid/db.py
index 4b66f5d..a71a7aa 100644
--- a/tvid/db.py
+++ b/tvid/db.py
@@ -14,3 +14,4 @@ class TV(Base):
displayid = Column(String(20))
lastSeen = Column(DateTime)
target = Column(String(255))
+ memo = Column(String(255))
diff --git a/tvid/server.py b/tvid/server.py
index 4fec629..cf41ef8 100644
--- a/tvid/server.py
+++ b/tvid/server.py
@@ -19,9 +19,9 @@ import urllib.parse
import os
import random
import string
-from datetime import datetime
+from datetime import datetime, timedelta
-VERSION = '0.0.1'
+VERSION = '1.0.0'
PORT = os.environ.get('PORT', 8080)
DEBUG = os.environ.get('DEBUG', False)
SQLITE_FILENAME = os.environ.get('SQLITE_FILENAME','/data/db.sqlite')
@@ -46,14 +46,14 @@ def serve():
# pull in models
from .db import TV
- engine = create_engine(DATABASE_URL, echo=True)
+ engine = create_engine(DATABASE_URL, echo=False)
plugin = sqlalchemy.Plugin(
- engine, # SQLAlchemy engine created with create_engine function.
- SQLBASE.metadata, # SQLAlchemy metadata, required only if create=True.
- keyword='db', # Keyword used to inject session database in a route (default 'db').
- create=True, # If it is true, execute `metadata.create_all(engine)` when plugin is applied (default False).
- commit=True, # If it is true, plugin commit changes after route is executed (default True).
+ engine,
+ SQLBASE.metadata,
+ keyword='db',
+ create=True,
+ commit=True,
use_kwargs=False
)
@@ -63,17 +63,18 @@ def serve():
# cookie'd value (whether preexisting or new).
@app.get('/')
def indexpage():
- c = request.get_cookie("tvid")
+ c = request.get_cookie("displayid")
if c:
# redirect
- redirect('/tv/' + c)
+ return redirect('/tv/' + c)
else:
newid = genRandomTVID()
- response.set_cookie("tvid", newid)
- redirect('/tv/' + newid)
+ response.set_cookie("displayid", newid)
+ return redirect('/tv/' + newid)
@app.get('/style.css')
def stylesheet():
+ response.content_type = 'text/css'
return template('style')
# here we check to see if they have a redirect URL in the db. if they do
@@ -81,10 +82,8 @@ def serve():
# reloading the page once per hour.
@app.get('/tv/ Powered by tvid v{{version}} Powered by tvid v{{version}}TVs
+
+
+
diff --git a/views/base.tpl b/views/base.tpl
index dc302f5..3e9bf9e 100644
--- a/views/base.tpl
+++ b/views/base.tpl
@@ -7,8 +7,11 @@
% if defined('refresh'):
% end
+
% include('htmlheader.tpl')
-
+
+
+
{{!base}}
diff --git a/views/displayeditform.tpl b/views/displayeditform.tpl
new file mode 100644
index 0000000..b8c38fe
--- /dev/null
+++ b/views/displayeditform.tpl
@@ -0,0 +1,33 @@
+% rebase('adminpagebase.tpl', refresh=None, title='tvid administration')
+
+
+
+
+
-Display ID
+ Descriptive Memo
+ Last Seen
+ Target URL
+ Edit
+
+
+% end
+
+
+{{tv.displayid}}
+ {{tv.memo or '(none)'}}
+ {{tv.lastSeen}}
+ {{tv.target}}
+ Edit
+ Edit {{tv.displayid}}
+
+
Powered by tvid v{{version}}
+ (Letters only: I like INDIA, O like + OSCAR.)+
Powered by tvid v{{version}}
+ +Display ID | +Last Seen | +Target URL | +Edit | +
---|---|---|---|
{{tv.displayid}} | +{{tv.lastSeen}} | +{{tv.target}} | +Edit | +
Powered by tvid v{{version}}
+