Skip to content

Commit

Permalink
Feature/SK-1202 | Added log-in functionality (#759)
Browse files Browse the repository at this point in the history
  • Loading branch information
KatHellg authored Dec 2, 2024
1 parent 74d400f commit 403f4c9
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 4 deletions.
1 change: 1 addition & 0 deletions fedn/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
from .status_cmd import status_cmd # noqa: F401
from .validation_cmd import validation_cmd # noqa: F401
from .controller_cmd import controller_cmd # noqa: F401
from .login_cmd import login_cmd # noqa: F401
3 changes: 0 additions & 3 deletions fedn/cli/combiner_cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ def list_combiners(ctx, protocol: str, host: str, port: str, token: str = None,
if _token:
headers["Authorization"] = _token


try:
response = requests.get(url, headers=headers)
print_response(response, "combiners", None)
Expand All @@ -112,7 +111,6 @@ def get_combiner(ctx, protocol: str, host: str, port: str, token: str = None, id
url = get_api_url(protocol=protocol, host=host, port=port, endpoint="combiners")
headers = {}


_token = get_token(token)

if _token:
Expand All @@ -121,7 +119,6 @@ def get_combiner(ctx, protocol: str, host: str, port: str, token: str = None, id
if id:
url = f"{url}{id}"


try:
response = requests.get(url, headers=headers)
print_response(response, "combiner", id)
Expand Down
61 changes: 61 additions & 0 deletions fedn/cli/login_cmd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import os
from getpass import getpass

import click
import requests
import yaml

from .main import main

# Replace this with the platform's actual login endpoint
home_dir = os.path.expanduser("~")


@main.group("studio")
@click.pass_context
def login_cmd(ctx):
""":param ctx:"""
pass


@login_cmd.command("login")
@click.option("-p", "--protocol", required=False, default="https", help="Communication protocol")
@click.option("-H", "--host", required=False, default="fedn.scaleoutsystems.com", help="Hostname of controller (api)")
@click.pass_context
def login_cmd(ctx, protocol: str, host: str):
"""Logging into FEDn Studio"""
# Step 1: Display welcome message
click.secho("Welcome to Scaleout FEDn!", fg="green")

url = f"{protocol}://{host}/api/token/"

# Step 3: Prompt for username and password
username = input("Please enter your username: ")
password = getpass("Please enter your password: ")

# Call the authentication API
try:
response = requests.post(url, json={"username": username, "password": password}, headers={"Content-Type": "application/json"})
response.raise_for_status() # Raise an error for HTTP codes 4xx/5xx
except requests.exceptions.RequestException as e:
click.secho("Error connecting to the platform. Please try again.", fg="red")
click.secho(str(e), fg="red")
return

# Handle the response
if response.status_code == 200:
data = response.json()
if data.get("access"):
click.secho("Login successful!", fg="green")
context_path = os.path.join(home_dir, ".fedn")
if not os.path.exists(context_path):
os.makedirs(context_path)
try:
with open(f"{context_path}/context.yaml", "w") as yaml_file:
yaml.dump(data, yaml_file, default_flow_style=False) # Add access and refresh tokens to context yaml file
except Exception as e:
print(f"Error: Failed to write to YAML file. Details: {e}")
else:
click.secho("Login failed. Please check your credentials.", fg="red")
else:
click.secho(f"Unexpected error: {response.text}", fg="red")
2 changes: 1 addition & 1 deletion fedn/utils/dist.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import fedn


def get_version(pacakge):
def get_version(package):
# Dynamically get the version of the package
try:
version = importlib.metadata.version("fedn")
Expand Down

0 comments on commit 403f4c9

Please sign in to comment.