added credentials endpoint
This commit is contained in:
2
app.py
2
app.py
@@ -1,11 +1,13 @@
|
||||
from flask import Flask
|
||||
from flask_cors import CORS
|
||||
from routes.search import search_bp
|
||||
from routes.credentials import credentials_bp
|
||||
|
||||
def create_app():
|
||||
app = Flask(__name__)
|
||||
CORS(app)
|
||||
app.register_blueprint(search_bp, url_prefix='/api')
|
||||
app.register_blueprint(credentials_bp, url_prefix='/api/credentials')
|
||||
return app
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
BIN
routes/__pycache__/credentials.cpython-312.pyc
Normal file
BIN
routes/__pycache__/credentials.cpython-312.pyc
Normal file
Binary file not shown.
65
routes/credentials.py
Normal file
65
routes/credentials.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from flask import Blueprint, request, jsonify
|
||||
from routes.utils.credentials import (
|
||||
get_credential,
|
||||
list_credentials,
|
||||
create_credential,
|
||||
delete_credential,
|
||||
edit_credential
|
||||
)
|
||||
|
||||
credentials_bp = Blueprint('credentials', __name__)
|
||||
|
||||
@credentials_bp.route('/<service>', methods=['GET'])
|
||||
def handle_list_credentials(service):
|
||||
try:
|
||||
return jsonify(list_credentials(service))
|
||||
except ValueError as e:
|
||||
return jsonify({"error": str(e)}), 400
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@credentials_bp.route('/<service>/<name>', methods=['GET', 'POST', 'PUT', 'DELETE'])
|
||||
def handle_single_credential(service, name):
|
||||
try:
|
||||
if request.method == 'GET':
|
||||
return jsonify(get_credential(service, name))
|
||||
|
||||
elif request.method == 'POST':
|
||||
data = request.get_json()
|
||||
create_credential(service, name, data)
|
||||
return jsonify({"message": "Credential created successfully"}), 201
|
||||
|
||||
elif request.method == 'PUT':
|
||||
data = request.get_json()
|
||||
edit_credential(service, name, data)
|
||||
return jsonify({"message": "Credential updated successfully"})
|
||||
|
||||
elif request.method == 'DELETE':
|
||||
delete_credential(service, name)
|
||||
return jsonify({"message": "Credential deleted successfully"})
|
||||
|
||||
except (ValueError, FileNotFoundError, FileExistsError) as e:
|
||||
status_code = 400
|
||||
if isinstance(e, FileNotFoundError):
|
||||
status_code = 404
|
||||
elif isinstance(e, FileExistsError):
|
||||
status_code = 409
|
||||
return jsonify({"error": str(e)}), status_code
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@credentials_bp.route('/all/<service>', methods=['GET'])
|
||||
def handle_all_credentials(service):
|
||||
try:
|
||||
credentials = []
|
||||
for name in list_credentials(service):
|
||||
credentials.append({
|
||||
"name": name,
|
||||
"data": get_credential(service, name)
|
||||
})
|
||||
return jsonify(credentials)
|
||||
except (ValueError, FileNotFoundError) as e:
|
||||
status_code = 400 if isinstance(e, ValueError) else 404
|
||||
return jsonify({"error": str(e)}), status_code
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
BIN
routes/utils/__pycache__/credentials.cpython-312.pyc
Normal file
BIN
routes/utils/__pycache__/credentials.cpython-312.pyc
Normal file
Binary file not shown.
@@ -2,23 +2,54 @@ import json
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
|
||||
def get_credentials():
|
||||
def get_credential(service, name):
|
||||
"""
|
||||
Retrieves all existing credential names for Spotify and Deezer.
|
||||
Retrieves existing credential contents by name.
|
||||
|
||||
Args:
|
||||
service (str): 'spotify' or 'deezer'
|
||||
name (str): Custom name of the credential to retrieve
|
||||
|
||||
Returns:
|
||||
dict: A dictionary with 'spotify' and 'deezer' keys containing lists of credential names.
|
||||
dict: Credential data as dictionary
|
||||
|
||||
Raises:
|
||||
FileNotFoundError: If the credential doesn't exist
|
||||
ValueError: For invalid service name
|
||||
"""
|
||||
creds = {'spotify': [], 'deezer': []}
|
||||
base_dir = Path('./creds')
|
||||
if service not in ['spotify', 'deezer']:
|
||||
raise ValueError("Service must be 'spotify' or 'deezer'")
|
||||
|
||||
for service in ['spotify', 'deezer']:
|
||||
service_dir = base_dir / service
|
||||
if service_dir.exists() and service_dir.is_dir():
|
||||
# Get all directory names under the service directory
|
||||
creds[service] = [entry.name for entry in service_dir.iterdir() if entry.is_dir()]
|
||||
creds_dir = Path('./creds') / service / name
|
||||
file_path = creds_dir / 'credentials.json'
|
||||
|
||||
return creds
|
||||
if not file_path.exists():
|
||||
raise FileNotFoundError(f"Credential '{name}' not found for {service}")
|
||||
|
||||
with open(file_path, 'r') as f:
|
||||
return json.load(f)
|
||||
|
||||
def list_credentials(service):
|
||||
"""
|
||||
Lists all available credential names for a service
|
||||
|
||||
Args:
|
||||
service (str): 'spotify' or 'deezer'
|
||||
|
||||
Returns:
|
||||
list: Array of credential names
|
||||
|
||||
Raises:
|
||||
ValueError: For invalid service name
|
||||
"""
|
||||
if service not in ['spotify', 'deezer']:
|
||||
raise ValueError("Service must be 'spotify' or 'deezer'")
|
||||
|
||||
service_dir = Path('./creds') / service
|
||||
if not service_dir.exists():
|
||||
return []
|
||||
|
||||
return [d.name for d in service_dir.iterdir() if d.is_dir()]
|
||||
|
||||
|
||||
def create_credential(service, name, data):
|
||||
|
||||
Reference in New Issue
Block a user