from flask import request, jsonify, current_app from flask_login import login_required import os from datetime import datetime from app.utils.gitea_api import GiteaAPI from app.models.gitea_settings import GiteaSettings @admin_api.route('/test-git-connection', methods=['POST']) @login_required def test_git_connection(): try: data = request.get_json() if not data: return jsonify({'success': False, 'error': 'No data provided'}), 400 required_fields = ['gitea_url', 'username', 'api_token', 'repo_name'] for field in required_fields: if field not in data: return jsonify({'success': False, 'error': f'Missing required field: {field}'}), 400 # Test the connection using the provided credentials gitea = GiteaAPI( url=data['gitea_url'], token=data['api_token'] ) # Try to get repository information repo = gitea.get_repo(data['username'], data['repo_name']) if not repo: return jsonify({'success': False, 'error': 'Repository not found'}), 404 return jsonify({ 'success': True, 'message': 'Successfully connected to Gitea', 'data': { 'repo_name': repo.name, 'description': repo.description, 'default_branch': repo.default_branch, 'created_at': repo.created_at, 'updated_at': repo.updated_at } }) except Exception as e: return jsonify({'success': False, 'error': str(e)}), 500 @admin_api.route('/check-docker-compose', methods=['POST']) @login_required def check_docker_compose(): try: data = request.get_json() if not data: return jsonify({'success': False, 'error': 'No data provided'}), 400 required_fields = ['repository', 'branch'] for field in required_fields: if field not in data: return jsonify({'success': False, 'error': f'Missing required field: {field}'}), 400 # Get Gitea settings from database gitea_settings = GiteaSettings.query.first() if not gitea_settings: return jsonify({'success': False, 'error': 'Gitea settings not configured'}), 400 # Initialize Gitea API gitea = GiteaAPI( url=gitea_settings.server_url, token=gitea_settings.api_token ) # Split repository into owner and repo name owner, repo_name = data['repository'].split('/') # Get the docker-compose.yml file content try: file_content = gitea.get_file_content( owner=owner, repo=repo_name, filepath='docker-compose.yml', ref=data['branch'] ) except Exception as e: return jsonify({'success': False, 'error': f'Failed to get docker-compose.yml: {str(e)}'}), 404 # Save the file content to a temporary location temp_dir = os.path.join(current_app.config['UPLOAD_FOLDER'], 'temp') os.makedirs(temp_dir, exist_ok=True) file_path = os.path.join(temp_dir, f'docker-compose-{owner}-{repo_name}.yml') with open(file_path, 'w') as f: f.write(file_content) # Get file stats file_stats = os.stat(file_path) return jsonify({ 'success': True, 'message': 'Successfully found and downloaded docker-compose.yml', 'data': { 'file_path': file_path, 'size': file_stats.st_size, 'last_modified': datetime.fromtimestamp(file_stats.st_mtime).isoformat() } }) except Exception as e: return jsonify({'success': False, 'error': str(e)}), 500