forked from kompetenzinventar/ki-backend
implement login
This commit is contained in:
32
ki/auth.py
Normal file
32
ki/auth.py
Normal file
@ -0,0 +1,32 @@
|
||||
import uuid
|
||||
import yaml
|
||||
|
||||
from app import app, db
|
||||
from ki.models import User, Token
|
||||
|
||||
|
||||
def auth(username, password):
|
||||
auth_file_path = app.config["KI_DATA_DIR"] + "/auth.yml"
|
||||
|
||||
with open(auth_file_path, "r") as auth_file_stream:
|
||||
users = yaml.safe_load(auth_file_stream)
|
||||
|
||||
if username not in users:
|
||||
return None
|
||||
|
||||
auth_user = users[username]
|
||||
|
||||
if auth_user["password"] != password:
|
||||
return None
|
||||
|
||||
user = User.query.filter(User.auth_id.__eq__(username)).first()
|
||||
|
||||
if user is None:
|
||||
user = User(nickname=username, auth_id=username)
|
||||
db.session.add(user)
|
||||
|
||||
token = Token(token=str(uuid.uuid4()), user=user)
|
||||
db.session.add(token)
|
||||
db.session.commit()
|
||||
|
||||
return token
|
14
ki/models.py
14
ki/models.py
@ -14,15 +14,15 @@ class User(db.Model):
|
||||
pronouns = Column(String(25), default="")
|
||||
volunteerwork = Column(String(4000), default="")
|
||||
freetext = Column(String(4000), default="")
|
||||
created = Column(DateTime, nullable=False)
|
||||
updated = Column(DateTime, onupdate=datetime.now, nullable=False)
|
||||
auth_id = Column(String(50), nullable=False)
|
||||
created = Column(DateTime, nullable=False, default=datetime.now)
|
||||
updated = Column(DateTime, onupdate=datetime.now, nullable=False, default=datetime.now)
|
||||
auth_id = Column(String(50), nullable=False, unique=True)
|
||||
|
||||
contacts = relationship("Contact")
|
||||
address = relationship("Address", uselist=False, back_populates="user")
|
||||
tokens = relationship("Token", uselist=False, back_populates="user")
|
||||
skills = relationship("UserSkill", back_populates="users")
|
||||
languages = relationship("UserLanguage", "users")
|
||||
skills = relationship("UserSkill", back_populates="user")
|
||||
languages = relationship("UserLanguage", back_populates="user")
|
||||
|
||||
|
||||
class Token(db.Model):
|
||||
@ -75,7 +75,7 @@ class Skill(db.Model):
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String(25), unique=True, nullable=False)
|
||||
|
||||
users = relationship("User", back_populates="skills")
|
||||
users = relationship("UserSkill", back_populates="skill")
|
||||
|
||||
def to_dict(self):
|
||||
return {"id": self.id, "name": self.name}
|
||||
@ -98,7 +98,7 @@ class Language(db.Model):
|
||||
id = Column(String(2), primary_key=True)
|
||||
name = Column(String(25), nullable=False)
|
||||
|
||||
users = relationship("UserLanguage", back_populates="languages")
|
||||
users = relationship("UserLanguage", back_populates="language")
|
||||
|
||||
def to_dict(self):
|
||||
return {"id": self.id, "name": self.name}
|
||||
|
14
ki/routes.py
14
ki/routes.py
@ -1,6 +1,7 @@
|
||||
import os
|
||||
from flask import make_response, request, send_file
|
||||
from flask import jsonify, make_response, request, send_file
|
||||
|
||||
from ki.auth import auth
|
||||
from ki.models import Language, Skill
|
||||
from app import app
|
||||
|
||||
@ -64,6 +65,17 @@ def handle_icon_request(model, id, path):
|
||||
def hello_world():
|
||||
return "KI"
|
||||
|
||||
@app.route("/users/login", methods=["POST"])
|
||||
def login():
|
||||
username = request.json.get("username", "")
|
||||
password = request.json.get("password", "")
|
||||
token = auth(username, password)
|
||||
|
||||
if token is None:
|
||||
return make_response({}, 403)
|
||||
|
||||
return make_response({"token": token.token})
|
||||
|
||||
|
||||
@app.route("/skills")
|
||||
def get_skills():
|
||||
|
Reference in New Issue
Block a user