diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..477e061 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at developer@epicm.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..cb742ee --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,17 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Ensure any install or build dependencies are removed before the end of the layer when doing a + build. +2. Update the README.md with details of changes to the interface, this includes new environment + variables, exposed ports, useful file locations and container parameters. +3. Increase the version numbers in any examples files and the README.md to the new version that this + Pull Request would represent. +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..b7e7b12 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms +patreon: epicmorg +ko_fi: epicmorg +custom: https://ko-fi.com/alexz696 + +#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +#open_collective: # Replace with a single Open Collective username +#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +#liberapay: # Replace with a single Liberapay username +#issuehunt: # Replace with a single IssueHunt username +#otechie: # Replace with a single Otechie username +#custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..d41b607 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,27 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'bug, Regular Priority' +assignees: 'stamepicmorg' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/cve_report.md b/.github/ISSUE_TEMPLATE/cve_report.md new file mode 100644 index 0000000..c69f58d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/cve_report.md @@ -0,0 +1,18 @@ +--- +name: CVE report +about: Create a report of some CVE +title: '[CVE] ' +labels: 'CVE, High Priority' +assignees: 'stamepicmorg' + +--- +**CVE number or URL** + +**Describe** +A clear and concise description of what the CVE is. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..982d2cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: 'Feature request, help wanted' +assignees: 'stamepicmorg' +milestone: 'Due 2021 🙏' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/task_generic.md b/.github/ISSUE_TEMPLATE/task_generic.md new file mode 100644 index 0000000..4afb970 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/task_generic.md @@ -0,0 +1,17 @@ +--- +name: Generic task +about: Create a generic task +title: '' +labels: 'task, Regular Priority' +assignees: 'stamepicmorg' + +--- + +**Describe** +A clear and concise description of what the bug is. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..12ce2ff --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: docker + directory: "/atlassian/jira/latest" + schedule: + interval: daily + time: "02:00" + open-pull-requests-limit: 10 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..c7f8007 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,13 @@ +## Purpose +_Describe the problem or feature in addition to a link to the issues._ + +## Approach +_How does this change address the problem?_ + +#### Open Questions and Pre-Merge TODOs +- [ ] Use github checklists. When solved, check the box and explain the answer. + +## Learning +_Describe the research stage_ + +_Links to blog posts, patterns, libraries or addons used to solve this problem_ diff --git a/.github/screenshot-1.png b/.github/screenshot-1.png new file mode 100644 index 0000000..36438ea Binary files /dev/null and b/.github/screenshot-1.png differ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..90fb6b8 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018-2021 EpicMorg: Main + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index e5cda35..ae0d725 100644 --- a/README.md +++ b/README.md @@ -1 +1,75 @@ -# atlassian-downloader \ No newline at end of file +# [![Activity](https://img.shields.io/github/commit-activity/m/EpicMorg/atlassian-downloader?label=commits&style=flat-square)](https://github.com/EpicMorg/atlassian-downloader/commits) [![GitHub issues](https://img.shields.io/github/issues/EpicMorg/atlassian-downloader.svg?style=popout-square)](https://github.com/EpicMorg/atlassian-downloader/issues) [![GitHub forks](https://img.shields.io/github/forks/EpicMorg/atlassian-downloader.svg?style=popout-square)](https://github.com/EpicMorg/atlassian-downloader/network) [![GitHub stars](https://img.shields.io/github/stars/EpicMorg/atlassian-downloader.svg?style=popout-square)](https://github.com/EpicMorg/atlassian-downloader/stargazers) [![Size](https://img.shields.io/github/repo-size/EpicMorg/atlassian-downloader?label=size&style=flat-square)](https://github.com/EpicMorg/atlassian-downloader/archive/master.zip) [![Release](https://img.shields.io/github/v/release/EpicMorg/atlassian-downloader?style=flat-square)](https://github.com/EpicMorg/atlassian-downloader/releases) [![GitHub license](https://img.shields.io/github/license/EpicMorg/atlassian-downloader.svg?style=popout-square)](LICENSE.md) [![Changelog](https://img.shields.io/badge/Changelog-yellow.svg?style=popout-square)](CHANGELOG.md) + +# Atlassian Downloader + +Simple script written with `c#` and `dotnet5` for downloadind all avalible products from `Atlassian`. Why not? + +## Authors +* [@kasthack](https://github.com/kasthack) - core code +* [@stam](https://github.com/stamepicmorg) - edits + +## Requerments +1. Preinstalled `dotnet5`. Download [here](https://dotnet.microsoft.com/download/dotnet/5.0). +2. Supported OS: `win32` or `win64`, `linux`, `macosx` + +## How to +1. `git clone` this repo. +2. `cd` to `repo/src`. +3. execute `donten run` in `src` folder. +4. all data will be downloaded to `src/output` folder and subfolders + +------ + +## Supported products: + +### Current links + +#### Bamboo +* https://my.atlassian.com/download/feeds/current/bamboo.json + +#### Bitbucket (Stash) +* https://my.atlassian.com/download/feeds/current/stash.json + +#### Confluence +* https://my.atlassian.com/download/feeds/current/confluence.json + +#### Crowd +* https://my.atlassian.com/download/feeds/current/crowd.json + +#### Crucible +* https://my.atlassian.com/download/feeds/current/crucible.json + +#### FishEye +* https://my.atlassian.com/download/feeds/current/fisheye.json + +#### Jira +* https://my.atlassian.com/download/feeds/current/jira-core.json +* https://my.atlassian.com/download/feeds/current/jira-software.json +* https://my.atlassian.com/download/feeds/current/jira-servicedesk.json + + +### Archived links + +#### Bamboo +* https://my.atlassian.com/download/feeds/archived/bamboo.json + +#### Bitbucket (Stash) +* https://my.atlassian.com/download/feeds/archived/stash.json + +#### Confluence +* https://my.atlassian.com/download/feeds/archived/confluence.json + +#### Crowd +* https://my.atlassian.com/download/feeds/archived/crowd.json + +#### Crucible +* https://my.atlassian.com/download/feeds/archived/crucible.json + +#### FishEye +* https://my.atlassian.com/download/feeds/archived/fisheye.json + +#### Jira +* https://my.atlassian.com/download/feeds/archived/jira.json +* https://my.atlassian.com/download/feeds/archived/jira-core.json +* https://my.atlassian.com/download/feeds/archived/jira-software.json +* https://my.atlassian.com/download/feeds/archived/jira-servicedesk.json \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..7eb47ee --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,14 @@ +# Security Policy + +## Supported Docker Engine Versions + +| Version | Supported | +| ------- | ------------------ | +| Docker >=19.x | :white_check_mark: | +| Linux x86_64 Images | :white_check_mark: | + +## Reporting a Vulnerability +1. Open `Issues` tab [here](https://github.com/EpicMorg/docker-scripts/issues). +2. Select `CVE Report`. +3. Publish `CVE Report`. +4. Thank you :heart: diff --git a/src/AtlassianDownloader.csproj b/src/AtlassianDownloader.csproj new file mode 100644 index 0000000..ed82557 --- /dev/null +++ b/src/AtlassianDownloader.csproj @@ -0,0 +1,29 @@ + + + + Exe + net5.0 + favicon.ico + EpicMorg.Atlassian.Downloader + Atlassian Downloader + Atlassian Downloader by EpicMorg, code by kasthack + https://github.com/EpicMorg/atlassian-downloader + favicon.png + 1.0.0.2 + git + https://github.com/EpicMorg/atlassian-downloader + atlassian, donwloader, epicmorg + 1.0.0.3 + 1.0.0.3 + EpicMorg 20201 + Atlassian Downloader + + + + + True + + + + + diff --git a/src/AtlassianDownloader.sln b/src/AtlassianDownloader.sln new file mode 100644 index 0000000..da0bb6a --- /dev/null +++ b/src/AtlassianDownloader.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30803.129 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AtlassianDownloader", "AtlassianDownloader.csproj", "{9C7EA014-5883-4FCD-BF1D-DC561F8958DD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C7EA014-5883-4FCD-BF1D-DC561F8958DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C7EA014-5883-4FCD-BF1D-DC561F8958DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C7EA014-5883-4FCD-BF1D-DC561F8958DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C7EA014-5883-4FCD-BF1D-DC561F8958DD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6DE5A36D-883D-4DA1-9962-38FDD1EAD190} + EndGlobalSection +EndGlobal diff --git a/src/Program.cs b/src/Program.cs new file mode 100644 index 0000000..1a6c69b --- /dev/null +++ b/src/Program.cs @@ -0,0 +1,106 @@ +using System; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.Json; + +var appTitle = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; +var appVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; +var appStartupDate = DateTime.Now; +var appBuildType = "[Release]"; +#if DEBUG + appBuildType = "[Debug]"; +#endif + +var outputDir = "output"; +var feedUrls = + new[] { + "https://my.atlassian.com/download/feeds/archived/bamboo.json", + "https://my.atlassian.com/download/feeds/archived/confluence.json", + "https://my.atlassian.com/download/feeds/archived/crowd.json", + "https://my.atlassian.com/download/feeds/archived/crucible.json", + "https://my.atlassian.com/download/feeds/archived/fisheye.json", + "https://my.atlassian.com/download/feeds/archived/jira-core.json", + "https://my.atlassian.com/download/feeds/archived/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/archived/jira-software.json", + "https://my.atlassian.com/download/feeds/archived/jira.json", + "https://my.atlassian.com/download/feeds/archived/stash.json", + + "https://my.atlassian.com/download/feeds/current/bamboo.json", + "https://my.atlassian.com/download/feeds/current/confluence.json", + "https://my.atlassian.com/download/feeds/current/crowd.json", + "https://my.atlassian.com/download/feeds/current/crucible.json", + "https://my.atlassian.com/download/feeds/current/fisheye.json", + "https://my.atlassian.com/download/feeds/current/jira-core.json", + "https://my.atlassian.com/download/feeds/current/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/current/jira-software.json", + "https://my.atlassian.com/download/feeds/current/stash.json" + }; + +Console.Title = $"{appTitle} {appVersion} {appBuildType}"; +Console.WriteLine($"Download started at {appStartupDate}."); + +var client = new HttpClient(); +foreach (var feedUrl in feedUrls) +{ + var feedDir = Path.Combine(outputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); + var atlassianJson = await client.GetStringAsync(feedUrl); + var callString = "downloads("; + var json = atlassianJson[callString.Length..^1]; + var parsed = JsonSerializer.Deserialize(json, new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }); + var versions = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.ToArray()); + + foreach (var version in versions) + { + var directory = Path.Combine(feedDir, version.Key); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + foreach (var file in version.Value) + { + var serverPath = file.ZipUrl.PathAndQuery; + var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); + if (!File.Exists(outputFile)) + { + if (!string.IsNullOrEmpty(file.Md5)) + { + File.WriteAllText(outputFile + ".md5", file.Md5); + } + using var outputStream = File.OpenWrite(outputFile); + using var request = await client.GetStreamAsync(file.ZipUrl).ConfigureAwait(false); + await request.CopyToAsync(outputStream).ConfigureAwait(false); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"[INFO] File \"{file.ZipUrl}\" successfully downloaded to \"{outputFile}\"."); + Console.ResetColor(); + } + else + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine($"[WARN] File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); + Console.ResetColor(); + } + } + } + Console.WriteLine($"[SUCCESS] All files from \"{feedUrl}\" successfully downloaded."); +} +Console.WriteLine($"Download complete at {appStartupDate}."); + +public partial class ResponseArray +{ + public string Description { get; set; } + public string Edition { get; set; } + public Uri ZipUrl { get; set; } + public object TarUrl { get; set; } + public string Md5 { get; set; } + public string Size { get; set; } + public string Released { get; set; } + public string Type { get; set; } + public string Platform { get; set; } + public string Version { get; set; } + public Uri ReleaseNotes { get; set; } + public Uri UpgradeNotes { get; set; } +} \ No newline at end of file diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..cb7476e Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/favicon.png b/src/favicon.png new file mode 100644 index 0000000..eab24e9 Binary files /dev/null and b/src/favicon.png differ