From 6622ff65f93b3a21e3e14b86c6ee4301ccdb696d Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 15:22:51 +0300 Subject: [PATCH 1/8] init --- .github/CODE_OF_CONDUCT.md | 76 +++++++++++++++++++++++ .github/CONTRIBUTING.md | 17 +++++ .github/FUNDING.yml | 13 ++++ .github/ISSUE_TEMPLATE/bug_report.md | 27 ++++++++ .github/ISSUE_TEMPLATE/cve_report.md | 18 ++++++ .github/ISSUE_TEMPLATE/feature_request.md | 21 +++++++ .github/ISSUE_TEMPLATE/task_generic.md | 17 +++++ .github/dependabot.yml | 8 +++ .github/pull_request_template.md | 13 ++++ LICENSE.md | 21 +++++++ SECURITY.md | 14 +++++ 11 files changed, 245 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/cve_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/task_generic.md create mode 100644 .github/dependabot.yml create mode 100644 .github/pull_request_template.md create mode 100644 LICENSE.md create mode 100644 SECURITY.md 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/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/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: From 417066d3817b96efe77bd53f895c156cd06b451a Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 15:24:10 +0300 Subject: [PATCH 2/8] v1.0.0.0 --- src/AtlassianDownloader.csproj | 8 +++++ src/Program.cs | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/AtlassianDownloader.csproj create mode 100644 src/Program.cs diff --git a/src/AtlassianDownloader.csproj b/src/AtlassianDownloader.csproj new file mode 100644 index 0000000..2082704 --- /dev/null +++ b/src/AtlassianDownloader.csproj @@ -0,0 +1,8 @@ + + + + Exe + net5.0 + + + diff --git a/src/Program.cs b/src/Program.cs new file mode 100644 index 0000000..9b78609 --- /dev/null +++ b/src/Program.cs @@ -0,0 +1,62 @@ +using System; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.Json; + +var output = "output"; +var feedUrl = "https://my.atlassian.com/download/feeds/archived/jira.json"; + //https://my.atlassian.com/download/feeds/current/jira-software.json + +var client = new HttpClient(); +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.Select(b => b.ZipUrl).ToArray()); + +foreach (var version in versions) +{ + var directory = Path.Combine(output, version.Key); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + foreach (var link in version.Value) + { + var q = link.PathAndQuery; + var outputFile = Path.Combine(directory, q[(q.LastIndexOf("/") + 1)..]); + if (!File.Exists(outputFile)) + { + using var file = File.OpenWrite(outputFile); + using var request = await client.GetStreamAsync(link).ConfigureAwait(false); + await request.CopyToAsync(file).ConfigureAwait(false); + Console.WriteLine($"Downloaded {link}"); + } + else + { + Console.WriteLine($"File for {link} already exists"); + } + } +} +Console.WriteLine("Download complete"); + + +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 From 2a98e13a2635e869f440c1db16470b6dfd8f3f95 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 15:27:33 +0300 Subject: [PATCH 3/8] v1.0.0.1 --- src/AtlassianDownloader.csproj | 1 + src/AtlassianDownloader.sln | 25 ++++++++++ src/Program.cs | 87 +++++++++++++++++++++++---------- src/favicon.ico | Bin 0 -> 15086 bytes src/favicon.png | Bin 0 -> 1238 bytes 5 files changed, 86 insertions(+), 27 deletions(-) create mode 100644 src/AtlassianDownloader.sln create mode 100644 src/favicon.ico create mode 100644 src/favicon.png diff --git a/src/AtlassianDownloader.csproj b/src/AtlassianDownloader.csproj index 2082704..b657bdb 100644 --- a/src/AtlassianDownloader.csproj +++ b/src/AtlassianDownloader.csproj @@ -3,6 +3,7 @@ Exe net5.0 + favicon.ico 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 index 9b78609..dd5b590 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -4,43 +4,76 @@ using System.Linq; using System.Net.Http; using System.Text.Json; -var output = "output"; -var feedUrl = "https://my.atlassian.com/download/feeds/archived/jira.json"; - //https://my.atlassian.com/download/feeds/current/jira-software.json +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" + }; + + var client = new HttpClient(); -var atlassianJson = await client.GetStringAsync(feedUrl); -var callString = "downloads("; -var json = atlassianJson[callString.Length..^1]; -var parsed = JsonSerializer.Deserialize(json, new JsonSerializerOptions +foreach (var feedUrl in feedUrls) { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, -}); -var versions = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.Select(b => b.ZipUrl).ToArray()); + 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(output, version.Key); - if (!Directory.Exists(directory)) + foreach (var version in versions) { - Directory.CreateDirectory(directory); - } - foreach (var link in version.Value) - { - var q = link.PathAndQuery; - var outputFile = Path.Combine(directory, q[(q.LastIndexOf("/") + 1)..]); - if (!File.Exists(outputFile)) + var directory = Path.Combine(feedDir, version.Key); + if (!Directory.Exists(directory)) { - using var file = File.OpenWrite(outputFile); - using var request = await client.GetStreamAsync(link).ConfigureAwait(false); - await request.CopyToAsync(file).ConfigureAwait(false); - Console.WriteLine($"Downloaded {link}"); + Directory.CreateDirectory(directory); } - else + foreach (var file in version.Value) { - Console.WriteLine($"File for {link} already exists"); + 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.WriteLine($"Downloaded {outputFile}"); + } + else + { + Console.WriteLine($"File for {file.ZipUrl} already exists"); + } } } + Console.WriteLine($"Downloaded all files from " + + $"{feedUrl}"); } Console.WriteLine("Download complete"); diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cb7476e4e77515a1d113a7a24d388401ef1597a3 GIT binary patch literal 15086 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 s@>!mIj?R literal 0 HcmV?d00001 diff --git a/src/favicon.png b/src/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..eab24e91432ac3dbf2398917ff34db74524c3f8e GIT binary patch literal 1238 zcmZ{kdsGs36vux&WGZP}D*`h>L$J~UaWWbC04#{qGCgxj<^xSjrPP^bB*)V77Vl~KpVV~+mZAG_z=`?>di&-c%Jt9Qrj@NoBX z2LO0*IqWzm$sf}d;jCXnKb&>~ejqYB5`eZ^q&>~WIpZ@panS%ABLW~k1%TDL5>Es0 zt<(5A6#%*vfVGDkI`=S~0wSHagYBd`DeOC!QXHRjxnY}Wy%Owd28R;aXaF_yNz#A@$S>NM2+v5i= zyzcRQyjL%Yxay8fK$jp&uE&=7p(>!kW(`6I`Aei}?PF%c%3iIvjkxCf1Z($dMJ&zA zkKGAv-b2#wm8n4AG48?$V?Jp_F}+lum!$S-dIL_urOkF|H$y3XS)(ifc}iNQ5oW@-=Y(TpyZP zjtQj&x^boNez<$rbNQ{T1%$7Kiz`qCkXib1dXOSBj%7F>5lraT&oUp?2zg-j^>awA z9J8@i!Vm@j+boVW5tMJ96{@N}3tq1Pa)DHAq zTbj#iFnKyvT_-hmh|JwrRO}i`i0(`hy?$paF8(TD1>9ttZ|4}=bqdPyzx$HivzbO2 zK~G9ZM!PD*EP~C9#?h2LRh&P9G%#N6VxS5 zBU6nvgV9S2WdmVKVZynpz@j*5YJTGkm^}STfnOVVqPZ7ijhKo zh3EpPHWl`a%;90868G&ST{ALQMp#s}V$_2~VX#@6V~zgt8~ksT7Tm6snLyGgf#FkLh;Y1}kczTDqdT^IQ>KyMz&GWWPM zw&#Y|dcX{j@fYy%>Yvc4W!NtjGl>Oh-678V_bZA@EE1#@WzsVWGMxZHW@Kjf!EnGE*!51!+SXo&W#< literal 0 HcmV?d00001 From f333eb5e4c0f9c2e47f4f191a0ba0ff4a88b0797 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 15:52:47 +0300 Subject: [PATCH 4/8] v1.0.0.2 --- src/AtlassianDownloader.csproj | 19 +++++++++++++++++++ src/Program.cs | 18 ++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/AtlassianDownloader.csproj b/src/AtlassianDownloader.csproj index b657bdb..ac54a73 100644 --- a/src/AtlassianDownloader.csproj +++ b/src/AtlassianDownloader.csproj @@ -4,6 +4,25 @@ Exe net5.0 favicon.ico + 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.2 + 1.0.0.2 + EpicMorg 20201 + + + True + + + + diff --git a/src/Program.cs b/src/Program.cs index dd5b590..1104ae2 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -1,9 +1,14 @@ using System; +using System.Drawing; 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 outputDir = "output"; var feedUrls = new[] { @@ -29,7 +34,8 @@ var feedUrls = "https://my.atlassian.com/download/feeds/current/stash.json" }; - +Console.Title = $"{appTitle} {appVersion}"; +Console.WriteLine($"Download started at {appStartupDate}."); var client = new HttpClient(); foreach (var feedUrl in feedUrls) @@ -64,18 +70,22 @@ foreach (var feedUrl in feedUrls) using var outputStream = File.OpenWrite(outputFile); using var request = await client.GetStreamAsync(file.ZipUrl).ConfigureAwait(false); await request.CopyToAsync(outputStream).ConfigureAwait(false); - Console.WriteLine($"Downloaded {outputFile}"); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"File \"{file.ZipUrl}\" downloaded to \"{outputFile}\"."); + Console.ResetColor(); } else { - Console.WriteLine($"File for {file.ZipUrl} already exists"); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine($"[WARN] File \"{outputFile}\" for \"{file.ZipUrl}\" already exists. Skip."); + Console.ResetColor(); } } } Console.WriteLine($"Downloaded all files from " + $"{feedUrl}"); } -Console.WriteLine("Download complete"); +Console.WriteLine("Download complete."); public partial class ResponseArray From 711398a30afb8fcd3b8f5ab8b2a61a5d81479685 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 16:28:36 +0300 Subject: [PATCH 5/8] v1.0.0.3 --- src/AtlassianDownloader.csproj | 7 ++++--- src/Program.cs | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/AtlassianDownloader.csproj b/src/AtlassianDownloader.csproj index ac54a73..ed82557 100644 --- a/src/AtlassianDownloader.csproj +++ b/src/AtlassianDownloader.csproj @@ -4,7 +4,7 @@ Exe net5.0 favicon.ico - Atlassian Downloader + EpicMorg.Atlassian.Downloader Atlassian Downloader Atlassian Downloader by EpicMorg, code by kasthack https://github.com/EpicMorg/atlassian-downloader @@ -13,9 +13,10 @@ git https://github.com/EpicMorg/atlassian-downloader atlassian, donwloader, epicmorg - 1.0.0.2 - 1.0.0.2 + 1.0.0.3 + 1.0.0.3 EpicMorg 20201 + Atlassian Downloader diff --git a/src/Program.cs b/src/Program.cs index 1104ae2..1a6c69b 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -1,14 +1,17 @@ using System; -using System.Drawing; 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[] { @@ -34,7 +37,7 @@ var feedUrls = "https://my.atlassian.com/download/feeds/current/stash.json" }; -Console.Title = $"{appTitle} {appVersion}"; +Console.Title = $"{appTitle} {appVersion} {appBuildType}"; Console.WriteLine($"Download started at {appStartupDate}."); var client = new HttpClient(); @@ -71,22 +74,20 @@ foreach (var feedUrl in feedUrls) using var request = await client.GetStreamAsync(file.ZipUrl).ConfigureAwait(false); await request.CopyToAsync(outputStream).ConfigureAwait(false); Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"File \"{file.ZipUrl}\" downloaded to \"{outputFile}\"."); + Console.WriteLine($"[INFO] File \"{file.ZipUrl}\" successfully downloaded to \"{outputFile}\"."); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Yellow; - Console.WriteLine($"[WARN] File \"{outputFile}\" for \"{file.ZipUrl}\" already exists. Skip."); + Console.WriteLine($"[WARN] File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); Console.ResetColor(); } } } - Console.WriteLine($"Downloaded all files from " + - $"{feedUrl}"); + Console.WriteLine($"[SUCCESS] All files from \"{feedUrl}\" successfully downloaded."); } -Console.WriteLine("Download complete."); - +Console.WriteLine($"Download complete at {appStartupDate}."); public partial class ResponseArray { From 4f99bd0a6d11096cda782b3f2e55ea62a1abf01b Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 16:33:45 +0300 Subject: [PATCH 6/8] screenshot --- .github/screenshot-1.png | Bin 0 -> 22419 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/screenshot-1.png diff --git a/.github/screenshot-1.png b/.github/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..36438ea9a8804336570a6d37aeedf36b2d5eb5c7 GIT binary patch literal 22419 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 Date: Wed, 13 Jan 2021 16:40:51 +0300 Subject: [PATCH 7/8] readme --- README.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e5cda35..c55f2eb 100644 --- a/README.md +++ b/README.md @@ -1 +1,71 @@ -# 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? + +## 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 From a3906ad207516c9203faa0d82c5b0b9378647f42 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 13 Jan 2021 16:41:54 +0300 Subject: [PATCH 8/8] readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index c55f2eb..ae0d725 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ 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`