Skip to content

Commit

Permalink
Adding support for req-username-file and req-password-file cli flags …
Browse files Browse the repository at this point in the history
…for basic auth requests

Signed-off-by: Syed Nihal <[email protected]>
  • Loading branch information
wasim-nihal committed Jan 24, 2024
1 parent af8ed76 commit 8b340ad
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ metadata:
If the filename ends with `.url` suffix, the content will be processed as a URL which the target file contents will be downloaded from.

## Configuration CLI Flags
| name | description | required | default | type |
|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------|---------|
| `--req-username-file` | Path to file containing username to use for basic authentication for requests to `REQ_URL` and for `*.url` triggered requests. This overrides the `REQ_USERNAME` | false | - | string |
| `--req-password-file` | Path to file containing password to use for basic authentication for requests to `REQ_URL` and for `*.url` triggered requests. This overrides the `REQ_PASSWORD` | false | - | string |

## Configuration Environment Variables

| name | description | required | default | type |
Expand Down
37 changes: 34 additions & 3 deletions src/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@
from requests.packages.urllib3.util.retry import Retry

from logger import get_logger
import argparse

parser = argparse.ArgumentParser(description="CLI flags for kiwigrid sidecar")
parser.add_argument("--req-username-file", type=str, metavar=argparse.REMAINDER, help="path to file containing basic-auth username for REQ. This takes precedence over the environment variable REQ_USERNAME")
parser.add_argument("--req-password-file", type=str, metavar=argparse.REMAINDER, help="path to file containing basic-auth password for REQ. This takes precedence over the environment variable REQ_PASSWORD")
args = parser.parse_args()

CONTENT_TYPE_TEXT = "ascii"
CONTENT_TYPE_BASE64_BINARY = "binary"
Expand Down Expand Up @@ -110,11 +116,36 @@ def remove_file(folder, filename):
return False


def request(url, method, enable_5xx=False, payload=None):
enforce_status_codes = list() if enable_5xx else [500, 502, 503, 504]

def read_file_content(file_path):
try:
with open(file_path, 'r') as file:
return file.read().strip()
except FileNotFoundError:
logger.warning(f"File not found at: {file_path}")
except PermissionError:
logger.error(f"No read permission for file: {file_path}")
except Exception as e:
logger.error(f"An unexpected error occurred: {e}")
return None


def fetch_basic_auth_credentials():
username = os.getenv("REQ_USERNAME")
password = os.getenv("REQ_PASSWORD")
if args.req_username_file:
username_from_file = read_file_content(args.req_username_file)
if username_from_file is not None:
username = username_from_file
if args.req_password_file:
password_from_file = read_file_content(args.req_password_file)
if password_from_file is not None:
password = password_from_file
return username, password


def request(url, method, enable_5xx=False, payload=None):
enforce_status_codes = list() if enable_5xx else [500, 502, 503, 504]
username,password = fetch_basic_auth_credentials()
encoding = 'latin1' if not os.getenv("REQ_BASIC_AUTH_ENCODING") else os.getenv("REQ_BASIC_AUTH_ENCODING")
if username and password:
auth = HTTPBasicAuth(username.encode(encoding), password.encode(encoding))
Expand Down
3 changes: 2 additions & 1 deletion src/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
kubernetes==28.1.0
requests==2.31.0
python-json-logger==2.0.7
logfmter==0.0.6
logfmter==0.0.6
argparse==1.4.0

0 comments on commit 8b340ad

Please sign in to comment.