diff --git a/README.md b/README.md index f978cec..b44e7be 100644 --- a/README.md +++ b/README.md @@ -1 +1,76 @@ -This is a project that allows me to simplify freeradius user management with mac address authentication as it's primary focus. \ No newline at end of file + +```markdown +# FreeRADIUS Manager (Phase 1) + +A lightweight web UI to manage MAC address-based FreeRADIUS configurations backed by a MariaDB/MySQL database. + +## Features +- Add/edit/delete MAC-based users and VLAN assignments +- View Access-Accept and Access-Reject logs +- Lookup MAC vendors using maclookup.app API +- Dynamically populate vendor cache to reduce API usage + +--- + +## Requirements (Phase 1) +- Existing FreeRADIUS installation +- Existing MariaDB or MySQL server with access credentials + +### Required Tables +Add the following tables to your RADIUS database: + +```sql +CREATE TABLE IF NOT EXISTS rad_description ( + username VARCHAR(64) PRIMARY KEY, + description TEXT +); + +CREATE TABLE IF NOT EXISTS mac_vendor_cache ( + mac_prefix VARCHAR(6) PRIMARY KEY, + vendor_name VARCHAR(255), + last_updated TIMESTAMP +); +``` + +--- + +## Getting Started + +### 1. Clone this repo +```bash +git clone https://github.com/yourname/freeradius-manager.git +cd freeradius-manager +``` + +### 2. Configure environment +Create a `.env` file or configure environment variables: + +```env +FLASK_SECRET_KEY=super-secret-key +MYSQL_HOST=192.168.1.100 +MYSQL_USER=radiususer +MYSQL_PASSWORD=yourpassword +MYSQL_DATABASE=radius +OUI_API_KEY= (leave empty for free tier) +OUI_API_LIMIT_PER_SEC=2 +OUI_API_DAILY_LIMIT=10000 +``` + +### 3. Run using Docker Compose +```bash +docker-compose up --build +``` + +--- + +## Notes +- The MAC vendor database will auto-populate as addresses are discovered +- Only MAC-based users are supported in this release + +--- + +## Phase 2 Goals +- Integrate FreeRADIUS server into Docker Compose +- Optional MariaDB container +- Provide self-contained stack for local or cloud deployment +``` \ No newline at end of file diff --git a/app/Dockerfile b/app/Dockerfile index 0305a18..50b310a 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -1,13 +1,23 @@ FROM python:3.9-slim +# Set working directory WORKDIR /app -COPY requirements.txt . +# Create logs directory +RUN mkdir -p /app/logs +# Install dependencies +COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -RUN apt-get update && apt-get install -y iputils-ping telnet # Add these lines +# Optional tools (useful for debugging) +RUN apt-get update && apt-get install -y iputils-ping telnet && apt-get clean +# Copy application code COPY . . -CMD ["python", "app.py"] \ No newline at end of file +# Expose port (optional, for documentation) +EXPOSE 8080 + +# Default command to run app with Gunicorn +CMD ["gunicorn", "--bind", "0.0.0.0:8080", "wsgi:app"] diff --git a/app/__pycache__/app.cpython-39.pyc b/app/__pycache__/app.cpython-39.pyc new file mode 100644 index 0000000..f0fc4a2 Binary files /dev/null and b/app/__pycache__/app.cpython-39.pyc differ diff --git a/app/__pycache__/wsgi.cpython-39.pyc b/app/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000..fa54b13 Binary files /dev/null and b/app/__pycache__/wsgi.cpython-39.pyc differ diff --git a/app/app.py b/app/app.py index d5a0641..b1fe39e 100644 --- a/app/app.py +++ b/app/app.py @@ -4,6 +4,19 @@ from views.user_views import user from views.group_views import group from config import app_config from database import init_app +import logging +from logging.handlers import RotatingFileHandler +import os + +log_to_file = os.getenv('LOG_TO_FILE', 'false').lower() == 'true' +log_file_path = os.getenv('LOG_FILE_PATH', '/app/logs/app.log') + +if log_to_file: + handler = RotatingFileHandler(log_file_path, maxBytes=1000000, backupCount=3) + handler.setLevel(logging.INFO) + app.logger.addHandler(handler) + +app.logger.setLevel(logging.INFO) app = Flask(__name__) app.config.from_object(app_config) diff --git a/app/requirements.txt b/app/requirements.txt index 6465f07..1754311 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -2,4 +2,5 @@ Flask mysql-connector-python requests BeautifulSoup4 -lxml \ No newline at end of file +lxml +gunicorn \ No newline at end of file diff --git a/app/templates/base.html b/app/templates/base.html index eb8444a..2507dc5 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1,6 +1,12 @@
+ + + + + +