{"id":22138971,"url":"https://github.com/cwaldbieser/s3_browser","last_synced_at":"2025-07-31T13:09:32.863Z","repository":{"id":50999833,"uuid":"519972809","full_name":"cwaldbieser/s3_browser","owner":"cwaldbieser","description":"A simple serverless S3 browser.","archived":false,"fork":false,"pushed_at":"2025-05-22T20:15:16.000Z","size":232,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-06T03:41:10.365Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cwaldbieser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-08-01T05:17:03.000Z","updated_at":"2025-05-22T20:15:20.000Z","dependencies_parsed_at":"2025-05-26T05:02:19.272Z","dependency_job_id":null,"html_url":"https://github.com/cwaldbieser/s3_browser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cwaldbieser/s3_browser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwaldbieser%2Fs3_browser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwaldbieser%2Fs3_browser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwaldbieser%2Fs3_browser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwaldbieser%2Fs3_browser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cwaldbieser","download_url":"https://codeload.github.com/cwaldbieser/s3_browser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwaldbieser%2Fs3_browser/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268044547,"owners_count":24186625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-01T20:13:07.909Z","updated_at":"2025-07-31T13:09:32.829Z","avatar_url":"https://github.com/cwaldbieser.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"S3 Browser\n==========\n\nA simple application for browsing and performing basic file operations\non objects in an S3 bucket. Operations supported are:\n\n-   list files\n-   create folder\n-   remove folder\n-   download file\n-   upload file\n-   remove file\n\nThese permissions can be configured on a per-user basis.\n\nDeployment\n----------\n\n-   Create a secret in the target account for the application secret.\n-   Deploy auxilliary templates.\n-   Update `zappa_settings.json`.\n-   Deploy zappa app.\n-   Update zappa app.\n-   update auxilliary templates.\n\n### Create Application Secret\n\nA long string of high entropy characters. An easy way to generate it:\n\n``` {.python}\n\u003e import secrets\n\u003e secrets.token_hex()\n```\n\n### Deploy Auxilliary Templates\n\n`$CONFIG_FILE` is the name of your config file in TOML format.\n\n-   Change folders into the `cfn` folder.\n-   Edit the `cfn/$CONFIG_FILE`.\n-   Edit `application` → `project` and `application` →\n    `stack description`.\n-   Edit the `secrets.app_secret` ARN with the ARN of the secret from\n    the previous section.\n-   Edit the `s3.bucket_arn` setting with the ARN of the target S3\n    bucket.\n-   Edit any logging settings as appropriate. The log group won\\'t exist\n    before you deploy with Zappa.\n-   Update the `alarm_description`.\n\nRun the `make_template.py` script to generate the CloudFormation\ntemplate.\n\n``` {.sh}\n$ ./make_template.py --bootstrap configs/$CONFIG_FILE | tee /tmp/template.yml\n```\n\nThe resulting template can be used to deploy a stack in CloudFormation.\n\n### Update `zappa_settings.json`\n\n-   alter stage name (e.g. `dev` → `stage`).\n-   edit `APP_SECRET` with secret name (not full ARN).\n-   edit the `CAS_LOGIN_URL`, `CAS_LOGOUT_URL`, and\n    `CAS_SERVICE_VALIDATE_URL`.\n-   edit the `S3BROWSER_ENTITLEMENT_PREFIX`.\n-   edit `S3_BUCKET` with bucket name (not full ARN).\n-   `s3_bucket` setting must be the name of a code deploy bucket.\n-   edit other settings as appropriate.\n-   set `CAS_SERVICE_URL` to \u003chttps://www.example.net/login\u003e, this will\n    need to be updated after initial deployment.\n-   update the `project_name`.\n-   optionally set environment variable `FRIENDLY_BUCKET` to a friendly\n    bucket name.\n-   edit role and policy ARNs with resources created in previous\n    section:\n    -   `S3_ROLE_ARN` - use the S3AssumedRole\n    -   `DOWNLOAD_POLICY_ARN` - use the S3DownloadPolicy\n    -   `UPLOAD_POLICY_ARN` - use the S3UploadPolicy\n    -   `role_arn` - Use the LambdaExecRole\n\n### Deploy Zappa App\n\n``` {.sh}\n$ zappa deploy $STAGE\n```\n\n### Update Zappa App\n\nUsing the URL produced during the previous step, update the\n`CAS_SERVICE_URL` to be the base URL plus the `login` resource. E.g.\n\u003chttps://$SOME_RANDOM_CHARS.execute-api.$REGION_CODE.amazonaws.com/$STAGE/login\u003e\n\nThen:\n\n``` {.sh}\n$ zappa update $STAGE\n```\n\nThis sets the correct callback URL for CAS authentication.\n\n### Update Auxilliary Templates\n\nRun the `make_template.py` script to generate the CloudFormation\ntemplate.\n\n``` {.sh}\n$ ./make_template.py configs/$CONFIG_FILE | tee /tmp/template.yml\n```\n\nThe resulting template can be used to replace the current template in\nthe auxilliary stack. It will add alarms and notifications.\n\nTarget S3 Bucket CORS\n=====================\n\nCORS must be configured on the target bucket:\n\n``` {.json}\n[\n    {\n        \"AllowedHeaders\": [\n            \"*\"\n        ],\n        \"AllowedMethods\": [\n            \"GET\",\n            \"PUT\"\n        ],\n        \"AllowedOrigins\": [\n            \"*\"\n        ],\n        \"ExposeHeaders\": []\n    }\n]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcwaldbieser%2Fs3_browser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcwaldbieser%2Fs3_browser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcwaldbieser%2Fs3_browser/lists"}