Add authentication system and admin dashboard
Security Features:
- Added User model with bcrypt password hashing
- Implemented Flask-Login for session management
- Protected all API write operations with @login_required decorator
- Added authentication routes (login/logout)
Admin Dashboard:
- Created comprehensive admin dashboard with statistics
- Profile management interface
- Skills management (add/edit/delete)
- Projects management with full CRUD operations
- Social links management
- Modern responsive UI with Bootstrap 5
New Files:
- models.py: Added User model with bcrypt
- routes/auth.py: Login/logout functionality
- routes/admin.py: Complete admin dashboard with CRUD operations
- templates/auth/login.html: Login page
- templates/admin/base.html: Admin base template
- templates/admin/dashboard.html: Main dashboard
- templates/admin/profile.html: Profile editor
- templates/admin/skills.html: Skills manager
- templates/admin/projects.html: Projects list
- templates/admin/project_form.html: Project editor
- templates/admin/social_links.html: Social links manager
Modified Files:
- app.py: Integrated Flask-Login and bcrypt, registered new blueprints
- requirements.txt: Added Flask-Login, Flask-Bcrypt, bcrypt
- init_db.py: Creates default admin user (admin/admin123)
- routes/api.py: Protected all write operations with authentication
Default Credentials:
- Username: admin
- Password: admin123
- ⚠️ MUST be changed after first login!
Benefits:
- Secure API access with session-based authentication
- User-friendly admin interface for content management
- No need to edit code or database directly
- Bcrypt password hashing for security
- Protected against unauthorized access
This commit is contained in:
21
init_db.py
21
init_db.py
@@ -1,9 +1,9 @@
|
||||
"""
|
||||
Database initialization script
|
||||
Populates the database with initial portfolio data
|
||||
Populates the database with initial portfolio data and creates default admin user
|
||||
"""
|
||||
from app import app
|
||||
from models import db, Profile, Skill, Project, ProjectTag, SocialLink
|
||||
from models import db, User, Profile, Skill, Project, ProjectTag, SocialLink
|
||||
|
||||
|
||||
def init_database():
|
||||
@@ -16,6 +16,15 @@ def init_database():
|
||||
print("Creating all tables...")
|
||||
db.create_all()
|
||||
|
||||
# Create default admin user
|
||||
print("Creating default admin user...")
|
||||
admin = User(
|
||||
username='admin',
|
||||
email='admin@hersel.it'
|
||||
)
|
||||
admin.set_password('admin123') # CHANGE THIS PASSWORD AFTER FIRST LOGIN!
|
||||
db.session.add(admin)
|
||||
|
||||
# Create profile information
|
||||
print("Adding profile information...")
|
||||
profile = Profile(
|
||||
@@ -169,11 +178,19 @@ def init_database():
|
||||
db.session.commit()
|
||||
|
||||
print("\n✅ Database initialized successfully!")
|
||||
print(f" - Admin User: 1 record")
|
||||
print(f" - Profile: 1 record")
|
||||
print(f" - Skills: {len(skills_data)} records")
|
||||
print(f" - Projects: 3 records")
|
||||
print(f" - Project Tags: {len(project1_tags) + len(project2_tags) + len(project3_tags)} records")
|
||||
print(f" - Social Links: {len(social_links_data)} records")
|
||||
print("\n" + "="*60)
|
||||
print("🔐 DEFAULT ADMIN CREDENTIALS")
|
||||
print("="*60)
|
||||
print(f" Username: admin")
|
||||
print(f" Password: admin123")
|
||||
print(f" ⚠️ CHANGE THIS PASSWORD IMMEDIATELY AFTER FIRST LOGIN!")
|
||||
print("="*60)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user