mirror of
https://github.com/avatao-content/test-tutorial-framework
synced 2024-11-15 04:37:17 +00:00
Make webservice run as user and use tfwconnector pip package
This commit is contained in:
parent
ba0f92d2ac
commit
3ee5db6e57
@ -3,7 +3,8 @@ FROM eu.gcr.io/avatao-challengestore/tutorial-framework
|
|||||||
# Install webservice dependencies
|
# Install webservice dependencies
|
||||||
RUN pip3 install Flask==1.0 \
|
RUN pip3 install Flask==1.0 \
|
||||||
SQLAlchemy==1.2.7 \
|
SQLAlchemy==1.2.7 \
|
||||||
passlib==1.7.1
|
passlib==1.7.1 \
|
||||||
|
git+https://github.com/avatao-content/tfwconnector.git#subdirectory=python3
|
||||||
|
|
||||||
# Define variables to use later
|
# Define variables to use later
|
||||||
ENV TFW_SERVER_DIR="/srv/.tfw" \
|
ENV TFW_SERVER_DIR="/srv/.tfw" \
|
||||||
@ -21,7 +22,8 @@ ADD solvable/src/webservice/frontend-deps.tar ${TFW_WEBSERVICE_DIR}/static
|
|||||||
# Create IDE directory, symlink server source and give proper permissions to AVATAO_USER
|
# Create IDE directory, symlink server source and give proper permissions to AVATAO_USER
|
||||||
RUN mkdir -p ${TFW_IDE_WD} &&\
|
RUN mkdir -p ${TFW_IDE_WD} &&\
|
||||||
ln -s ${TFW_WEBSERVICE_DIR}/user_ops.py ${TFW_IDE_WD} &&\
|
ln -s ${TFW_WEBSERVICE_DIR}/user_ops.py ${TFW_IDE_WD} &&\
|
||||||
chown -R ${AVATAO_USER}: ${TFW_IDE_WD} && chmod -R 755 ${TFW_IDE_WD}
|
chown -R ${AVATAO_USER}: "${TFW_IDE_WD}" "${TFW_WEBSERVICE_DIR}" &&\
|
||||||
|
chmod -R 755 "${TFW_IDE_WD}" "${TFW_WEBSERVICE_DIR}"
|
||||||
|
|
||||||
# Hide TFW related code from user
|
# Hide TFW related code from user
|
||||||
RUN chown -R root:root ${TFW_SERVER_DIR} && chmod -R 700 ${TFW_SERVER_DIR}
|
RUN chown -R root:root ${TFW_SERVER_DIR} && chmod -R 700 ${TFW_SERVER_DIR}
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
from functools import partial
|
||||||
|
|
||||||
|
from tfwconnector import MessageSender
|
||||||
|
|
||||||
from crypto import PasswordHasher
|
from crypto import PasswordHasher
|
||||||
from model import User
|
from model import User
|
||||||
from errors import InvalidCredentialsError, UserExistsError
|
from errors import InvalidCredentialsError, UserExistsError
|
||||||
@ -8,6 +12,8 @@ class UserOps:
|
|||||||
self.username = username
|
self.username = username
|
||||||
self.password = password
|
self.password = password
|
||||||
self.db_session = db_session
|
self.db_session = db_session
|
||||||
|
self.message_sender = MessageSender()
|
||||||
|
self.log = partial(self.message_sender.send, 'Authenticator')
|
||||||
|
|
||||||
def authenticate(self):
|
def authenticate(self):
|
||||||
"""
|
"""
|
||||||
@ -20,8 +26,11 @@ class UserOps:
|
|||||||
user = self.db_session.query(User).filter(User.username == self.username).first()
|
user = self.db_session.query(User).filter(User.username == self.username).first()
|
||||||
|
|
||||||
if not user or not PasswordHasher.verify(self.password, user.passwordhash):
|
if not user or not PasswordHasher.verify(self.password, user.passwordhash):
|
||||||
|
self.log(f'Invalid credentials for user "{self.username}"!')
|
||||||
raise InvalidCredentialsError
|
raise InvalidCredentialsError
|
||||||
|
|
||||||
|
self.log(f'User "{self.username}" logged in!')
|
||||||
|
|
||||||
def register(self):
|
def register(self):
|
||||||
"""
|
"""
|
||||||
Attempts to register a user.
|
Attempts to register a user.
|
||||||
@ -37,3 +46,5 @@ class UserOps:
|
|||||||
passwordhash=PasswordHasher.hash(self.password))
|
passwordhash=PasswordHasher.hash(self.password))
|
||||||
self.db_session.add(user)
|
self.db_session.add(user)
|
||||||
self.db_session.commit()
|
self.db_session.commit()
|
||||||
|
|
||||||
|
self.log(f'User "{self.username}" registered!')
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
[program:webservice]
|
[program:webservice]
|
||||||
|
user=%(ENV_AVATAO_USER)s
|
||||||
directory=%(ENV_TFW_WEBSERVICE_DIR)s
|
directory=%(ENV_TFW_WEBSERVICE_DIR)s
|
||||||
environment=BASEURL="/webservice"
|
environment=BASEURL="/webservice"
|
||||||
command=python3 server.py
|
command=python3 server.py
|
||||||
|
Loading…
Reference in New Issue
Block a user