Spaces:
Runtime error
Runtime error
| from flask import Flask, request, jsonify | |
| from flask_sqlalchemy import SQLAlchemy | |
| from flask_security import Security, SQLAlchemyUserDatastore, UserMixin, RoleMixin, login_required | |
| import pyotp | |
| from fido2 import client, cose | |
| import jwt | |
| import os | |
| # Flask app setup | |
| app = Flask(__name__) | |
| app.config['SECRET_KEY'] = 'your_secret_key' | |
| app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' | |
| db = SQLAlchemy(app) | |
| security = Security(app) | |
| # Define User and Role classes | |
| class Role(db.Model, RoleMixin): | |
| id = db.Column(db.Integer, primary_key=True) | |
| name = db.Column(db.String(80), unique=True) | |
| class User(db.Model, UserMixin): | |
| id = db.Column(db.Integer, primary_key=True) | |
| username = db.Column(db.String(100), unique=True) | |
| email = db.Column(db.String(100), unique=True) | |
| password = db.Column(db.String(255)) | |
| otp_secret = db.Column(db.String(255)) # Store OTP secret | |
| user_datastore = SQLAlchemyUserDatastore(db, User, Role) | |
| # CAC card authentication would require middleware integration with external APIs or libraries | |
| # Example: Check for valid CAC card, integrate FIDO2 passkey support | |
| def login(): | |
| # Handle login with OTP | |
| user = User.query.filter_by(username=request.form['username']).first() | |
| if user: | |
| otp = pyotp.TOTP(user.otp_secret).now() | |
| # Send OTP to user via SMS/email, for simplicity here we're just printing | |
| return jsonify({'otp': otp}) | |
| return 'User not found', 404 | |
| def verify_otp(): | |
| user = User.query.filter_by(username=request.form['username']).first() | |
| otp = request.form['otp'] | |
| if pyotp.TOTP(user.otp_secret).verify(otp): | |
| token = jwt.encode({'user_id': user.id}, app.config['SECRET_KEY']) | |
| return jsonify({'token': token}) | |
| return 'Invalid OTP', 401 | |
| # Run the application | |
| if __name__ == '__main__': | |
| app.run(debug=True) | |