Untitled
unknown
plain_text
a year ago
2.9 kB
8
Indexable
# 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)
Editor is loading...
Leave a Comment