Skip to content

Commit

Permalink
add api key auth in cli
Browse files Browse the repository at this point in the history
  • Loading branch information
earthpulse committed Feb 8, 2024
1 parent a2424e4 commit d45ae3e
Show file tree
Hide file tree
Showing 21 changed files with 103 additions and 451 deletions.
66 changes: 38 additions & 28 deletions eotdl/eotdl/auth/auth.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import time
import os

from ..repos import AuthRepo, AuthAPIRepo
from .errors import LoginError, AuthTimeOut
Expand All @@ -10,34 +11,43 @@ def auth(max_t=30, interval=2):
if user:
return user
repo, api_repo = AuthRepo(), AuthAPIRepo()
response = api_repo.login()
if response.status_code != 200:
raise LoginError()
data = response.json()
print("On your computer or mobile device navigate to: ", data["login_url"])
authenticated = False
t0 = time.time()
while not authenticated and time.time() - t0 < max_t:
response = api_repo.token(data["code"])
token_data = response.json()
if response.status_code == 200:
print("Authenticated!")
print("- Id Token: {}...".format(token_data["id_token"][:10]))
# get user credentials
credentials = api_repo.retrieve_credentials(token_data["id_token"])[0]
if credentials:
token_data.update(credentials)
# save token data in file
creds_path = repo.save_creds(token_data)
print("Saved credentials to: ", creds_path)
current_user = repo.decode_token(token_data)
authenticated = True
current_user["id_token"] = token_data["id_token"]
return current_user
else:
time.sleep(interval)
if not authenticated:
raise AuthTimeOut()
api_key = os.environ.get("EOTDL_API_KEY", None)
if api_key:
print("Using API Key")
user = {"api_key": api_key}
user_data, error = api_repo.retrieve_user_data(user)
if error:
raise LoginError()
user.update({"email": user_data["email"]})
else:
response = api_repo.login()
if response.status_code != 200:
raise LoginError()
data = response.json()
print("On your computer or mobile device navigate to: ", data["login_url"])
authenticated = False
t0 = time.time()
while not authenticated and time.time() - t0 < max_t:
response = api_repo.token(data["code"])
token_data = response.json()
if response.status_code == 200:
print("Authenticated!")
print("- Id Token: {}...".format(token_data["id_token"][:10]))
user = repo.decode_token(token_data)
authenticated = True
user = {"id_token": token_data["id_token"], "email": user["email"]}
else:
time.sleep(interval)
if not authenticated:
raise AuthTimeOut()
# get user credentials
credentials = api_repo.retrieve_credentials(user)[0]
if credentials:
user.update(credentials)
# save token data in file
creds_path = repo.save_creds(user)
print("Saved credentials to: ", creds_path)
return user


# auth decorator
Expand Down
10 changes: 4 additions & 6 deletions eotdl/eotdl/datasets/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def download_dataset(
dst_path = repo.download_file(
dataset["id"],
filename,
user["id_token"],
user,
download_path,
file_version,
progress=True,
Expand All @@ -70,7 +70,7 @@ def download_dataset(
repo = DatasetsAPIRepo()
gdf, error = repo.download_stac(
dataset["id"],
user["id_token"],
user,
)
if error:
raise Exception(error)
Expand All @@ -89,7 +89,7 @@ def download_dataset(
_, filename = href.split("/download/")
# will overwrite assets with same name :(
repo.download_file_url(
href, filename, f"{download_path}/assets", user["id_token"]
href, filename, f"{download_path}/assets", user
)
else:
if verbose:
Expand All @@ -101,6 +101,4 @@ def download_dataset(
def download_file_url(url, path, progress=True, logger=print, user=None):
repo = FilesAPIRepo()
_, filename = url.split("/download/")
return repo.download_file_url(
url, filename, f"{path}/assets", user["id_token"], progress
)
return repo.download_file_url(url, filename, f"{path}/assets", user, progress)
10 changes: 4 additions & 6 deletions eotdl/eotdl/datasets/ingest.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def retrieve_dataset(metadata, user):
raise Exception("Dataset already exists.")
if error and error == "Dataset doesn't exist":
# create dataset
data, error = repo.create_dataset(metadata.dict(), user["id_token"])
data, error = repo.create_dataset(metadata.dict(), user)
# print(data, error)
if error:
raise Exception(error)
Expand Down Expand Up @@ -58,7 +58,7 @@ def retrieve_stac_dataset(dataset_name, user):
raise Exception("Dataset already exists.")
if error and error == "Dataset doesn't exist":
# create dataset
data, error = repo.create_stac_dataset(dataset_name, user["id_token"])
data, error = repo.create_stac_dataset(dataset_name, user)
# print(data, error)
if error:
raise Exception(error)
Expand Down Expand Up @@ -87,7 +87,7 @@ def ingest_stac(stac_catalog, logger=None, user=None):
data, error = files_repo.ingest_file(
v["href"],
dataset_id,
user["id_token"],
user,
calculate_checksum(v["href"]), # is always absolute?
"datasets",
version,
Expand All @@ -101,9 +101,7 @@ def ingest_stac(stac_catalog, logger=None, user=None):
break
# ingest the STAC catalog into geodb
logger("Ingesting STAC catalog...")
data, error = repo.ingest_stac(
json.loads(df.to_json()), dataset_id, user["id_token"]
)
data, error = repo.ingest_stac(json.loads(df.to_json()), dataset_id, user)
if error:
# TODO: delete all assets that were uploaded
raise Exception(error)
Expand Down
Empty file.
30 changes: 0 additions & 30 deletions eotdl/eotdl/datasets/usecases/datasets/DownloadFile.py

This file was deleted.

22 changes: 0 additions & 22 deletions eotdl/eotdl/datasets/usecases/datasets/DownloadFileURL.py

This file was deleted.

30 changes: 0 additions & 30 deletions eotdl/eotdl/datasets/usecases/datasets/IngestDataset.py

This file was deleted.

43 changes: 0 additions & 43 deletions eotdl/eotdl/datasets/usecases/datasets/IngestLargeDataset.py

This file was deleted.

This file was deleted.

Loading

0 comments on commit d45ae3e

Please sign in to comment.