Untitled

 avatar
unknown
plain_text
a month ago
2.9 kB
4
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)
Leave a Comment