Untitled
# app.py import os from flask import Flask, request, Response import requests from dotenv import load_dotenv # Çevresel değişkenleri yükle load_dotenv() app = Flask(__name__) # Konfigürasyon WISENET_API_BASE_URL = os.getenv('WISENET_API_BASE_URL') WISENET_API_KEY = os.getenv('WISENET_API_KEY') # Proxy yapacak fonksiyon def proxy_request(method, endpoint, **kwargs): url = f"{WISENET_API_BASE_URL}{endpoint}" headers = kwargs.pop('headers', {}) # Wisenet API için gerekli yetkilendirme başlığını ekleyin headers['Authorization'] = f"Bearer {WISENET_API_KEY}" # Gerekirse Content-Type'i ayarlayın if 'json' in kwargs: headers['Content-Type'] = 'application/json' elif 'files' in kwargs: headers.pop('Content-Type', None) # requests kütüphanesi multipart/form-data için doğru başlığı ayarlar try: response = requests.request(method, url, headers=headers, **kwargs) # İstemciye Wisenet API'den gelen yanıtı ilet excluded_headers = ['content-encoding', 'transfer-encoding', 'content-length', 'connection'] headers = [(name, value) for (name, value) in response.raw.headers.items() if name.lower() not in excluded_headers] return Response(response.content, response.status_code, headers) except requests.exceptions.RequestException as e: return Response(str(e), 500) # Örnek: Kameraları listeleme rotası @app.route('/api/cameras', methods=['GET']) def get_cameras(): return proxy_request('GET', '/cameras', params=request.args) # Örnek: Dosya kaydı (Registration) rotası @app.route('/api/downloads/<fileName>', methods=['POST']) def register_file(fileName): if 'upload' not in request.args: return {"error": "upload parametresi gerekli."}, 400 return proxy_request('POST', f'/downloads/{fileName}?upload', json=request.get_json()) # Örnek: Chunk yükleme rotası @app.route('/api/downloads/<fileName>/chunks/<int:chunkIndex>', methods=['PUT']) def upload_chunk(fileName, chunkIndex): # İstek gövdesini Wisenet API'sine yönlendir return proxy_request('PUT', f'/downloads/{fileName}/chunks/{chunkIndex}', data=request.get_data()) # Diğer Wisenet API rotalarını buraya ekleyebilirsiniz # Genel bir proxy rotası oluşturmak isterseniz, tüm yolları yakalayabilirsiniz. # Ancak bu basit örnekte sadece belirli rotalar ele alınmıştır. # Sağlık kontrolü rotası @app.route('/', methods=['GET']) def home(): return 'Wisenet Proxy Sunucusu Çalışıyor!' # Hata yönetimi @app.errorhandler(404) def not_found(error): return {"error": "Kaynak bulunamadı."}, 404 @app.errorhandler(500) def internal_error(error): return {"error": "Sunucu hatası."}, 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=int(os.getenv('PORT', 5000)), debug=True)
Leave a Comment