diff --git a/.gitignore b/.gitignore index 7d812e1b..5c93d06c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,8 @@ Gemfile.lock _site/ .env -_team/ +_teams/ +_people/ _reports/ www.divd.nl/ *.bak diff --git a/_layouts/case.html b/_layouts/case.html index 71e4a747..1af022c6 100644 --- a/_layouts/case.html +++ b/_layouts/case.html @@ -13,7 +13,7 @@

{{ page.title | escape }}

Case lead {%- if team contains lead -%} - {{ lead }} + {{ lead }} {%- else -%} {{ lead }} {%- endif -%} @@ -28,7 +28,7 @@

{{ page.title | escape }}

{%- for author in page.author -%}
  • {%- if team contains author -%} - {{ author }} + {{ author }} {%- else -%} {{ author }} {%- endif -%} @@ -37,7 +37,7 @@

    {{ page.title | escape }}

    {%- else -%} {%- if team contains page.author -%} - {{ page.author }} + {{ page.author }} {%- else -%} {{ page.author }} {%- endif -%} @@ -53,7 +53,7 @@

    {{ page.title | escape }}

    {%- for r in page.researchers -%}
  • {%- if team contains r -%} - {{ r }} + {{ r }} {%- else -%} {{ r }} {%- endif -%} diff --git a/_layouts/cve-json-40.html b/_layouts/cve-json-40.html index ad910450..ab5b745f 100644 --- a/_layouts/cve-json-40.html +++ b/_layouts/cve-json-40.html @@ -39,7 +39,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    {% for r in page.discovered_by -%}
  • {% if team contains r %} - {{ r }} + {{ r }} {% else %} {{ r }} {% endif %} @@ -59,11 +59,11 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    {% assign line = r.value %} {% for name in team %} {% if name == line %} - {% capture line %}{{ line }}{% endcapture %} + {% capture line %}{{ line }}{% endcapture %} {% else %} {% if line contains name %} - {% capture linkleft %} {{ name }}{% endcapture %} - {% capture linkright %}{{ name }} {% endcapture %} + {% capture linkleft %} {{ name }}{% endcapture %} + {% capture linkright %}{{ name }} {% endcapture %} {% capture nameleft %} {{ name }}{% endcapture %} {% capture nameright %}{{ name }} {% endcapture %} {% assign line = line | replace: nameleft, linkleft %} @@ -138,7 +138,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    Page author {% if team contains page.author %} - {{ page.author }} + {{ page.author }} {% else %} {{ page.author }} {% endif %} diff --git a/_layouts/cve-json-50.html b/_layouts/cve-json-50.html index 3489f368..2dbe29dd 100644 --- a/_layouts/cve-json-50.html +++ b/_layouts/cve-json-50.html @@ -48,7 +48,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    {% for r in page.discovered_by -%}
  • {% if team contains r %} - {{ r }} + {{ r }} {% else %} {{ r }} {% endif %} @@ -68,11 +68,11 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    {% assign line = r.value %} {% for name in team %} {% if name == line %} - {% capture line %}{{ line }}{% endcapture %} + {% capture line %}{{ line }}{% endcapture %} {% else %} {% if line contains name %} - {% capture linkleft %} {{ name }}{% endcapture %} - {% capture linkright %}{{ name }} {% endcapture %} + {% capture linkleft %} {{ name }}{% endcapture %} + {% capture linkright %}{{ name }} {% endcapture %} {% capture nameleft %} {{ name }}{% endcapture %} {% capture nameright %}{{ name }} {% endcapture %} {% assign line = line | replace: nameleft, linkleft %} @@ -193,7 +193,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    Page author {% if team contains page.author %} - {{ page.author }} + {{ page.author }} {% else %} {{ page.author }} {% endif %} diff --git a/_layouts/cve.html b/_layouts/cve.html index 34b84b31..1409b44d 100644 --- a/_layouts/cve.html +++ b/_layouts/cve.html @@ -17,7 +17,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    {% for r in page.discovered_by -%}
  • {% if team contains r %} - {{ r }} + {{ r }} {% else %} {{ r }} {% endif %} @@ -34,7 +34,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    {% for r in page.researchers -%}
  • {% if team contains r %} - {{ r }} + {{ r }} {% else %} {{ r }} {% endif %} @@ -83,7 +83,7 @@

    {{ page.cve | escape }} - {{ page.title | escape }}

    Page author {% if team contains page.author %} - {{ page.author }} + {{ page.author }} {% else %} {{ page.author }} {% endif %} diff --git a/_layouts/person.html b/_layouts/person.html new file mode 100644 index 00000000..e69de29b diff --git a/_layouts/post.html b/_layouts/post.html index 85fd58de..a24a35bf 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -15,7 +15,7 @@

    {{ page.title }}

    {% endif %} {% assign page_author = a | default: "anonymous" %} {% if team contains page_author %} - {{ page_author }} + {{ page_author }} {% else %} {{ page_author }} {% endif %} @@ -23,7 +23,7 @@

    {{ page.title }}

    {% else %} {% assign page_author = page.author | default: "anonymous" %} {% if team contains page_author %} - {{ page_author }} + {{ page_author }} {% else %} {{ page_author }} {% endif %} diff --git a/_teams/.keep b/_teams/.keep new file mode 100644 index 00000000..e69de29b diff --git a/blog/index.html b/blog/index.html index de0636a7..fbfa4b37 100644 --- a/blog/index.html +++ b/blog/index.html @@ -21,7 +21,7 @@

    , {%- endif -%} {%- if team contains post_author -%} - {{ post_author }} + {{ post_author }} {%- else -%} {{ post_author }} {%- endif -%} @@ -29,7 +29,7 @@

    {%- else -%} {%- assign post_author = post.author | default: "anonymous" -%} {%- if team contains post_author -%} - {{ post_author }} + {{ post_author }} {%- else -%} {{ post_author }} {%- endif -%} diff --git a/cases.html b/cases.html index 7740f262..a94739f0 100644 --- a/cases.html +++ b/cases.html @@ -47,7 +47,7 @@

    {{ p.title }} , {%- endif -%} {%- if team contains case_author -%} - {{ case_author }} + {{ case_author }} {%- else -%} {{ case_author }} {%- endif -%} @@ -55,7 +55,7 @@

    {{ p.title }} {%- else -%} {%- assign case_author = p.author | default: "anonymous" -%} {%- if team contains case_author -%} - {{ case_author }} + {{ case_author }} {%- else -%} {{ case_author }} {%- endif -%} @@ -91,7 +91,7 @@

    {{ p.title }} , {%- endif -%} {%- if team contains case_author -%} - {{ case_author }} + {{ case_author }} {%- else -%} {{ case_author }} {%- endif -%} @@ -99,7 +99,7 @@

    {{ p.title }} {%- else -%} {%- assign case_author = p.author | default: "anonymous" -%} {%- if team contains case_author -%} - {{ case_author }} + {{ case_author }} {%- else -%} {{ case_author }} {%- endif -%} diff --git a/cves.md b/cves.md index 271fb4f7..57fe5835 100644 --- a/cves.md +++ b/cves.md @@ -2,7 +2,6 @@ title: CVEs --- {% assign cvepages = site.cves |reverse %} -{% assign team = site.team | map: "name" %} {% for p in cvepages %}

    {{ p.cve | escape }} - {{ p.title | escape }}

    diff --git a/index.md b/index.md index 09837d0e..2a4b4323 100644 --- a/index.md +++ b/index.md @@ -31,7 +31,6 @@ Last 10 posts ...
      {%- assign cases = site.cases |reverse -%} -{%- assign team = site.team | map: "name" -%} {%- for p in cases -%} {%- if p.status == "Open" -%}
    • diff --git a/proof_html.sh b/proof_html.sh index 95323cd6..32e559b9 100755 --- a/proof_html.sh +++ b/proof_html.sh @@ -9,12 +9,6 @@ set -e # Need to fail on error TIDY_OUT=/tmp/tidy_out.$$ -TEAMCOUNT_HERE=$( ls _team|wc -l ) -TEAMCOUNT_THERE=$( ls www.divd.nl/_team|wc -l ) -if [[ $TEAMCOUNT_HERE -le 0 || $TEAMCOUNT_HERE -ne $TEAMCOUNT_THERE ]]; then - echo "_team directory is not updated, run ./update.sh" - exit 1 -fi echo "*** Internal link check ***" export LANG=en_US.UTF-8 htmlproofer \ diff --git a/serve b/serve index 8f151857..360cb3f7 100755 --- a/serve +++ b/serve @@ -33,6 +33,7 @@ docker run \ -ti mrseccubus/github-pages \ -c " cd /root/project/; + pip install requests if [[ -e Gemfile ]]; then echo \"*** Installing Gems in Gemfile ***\" bundle install diff --git a/test_it.sh b/test_it.sh index 63b86f98..976626a6 100755 --- a/test_it.sh +++ b/test_it.sh @@ -4,6 +4,7 @@ docker pull mrseccubus/github-pages:latest docker run --volume="$PWD:/root/project:delegated" --entrypoint /bin/bash -ti mrseccubus/github-pages \ -c " cd /root/project/; + pip install requests if [[ -e Gemfile ]]; then echo \"*** Installing Gems in Gemfile ***\" bundle install diff --git a/update.sh b/update.sh index ada9bca2..4e1017b5 100755 --- a/update.sh +++ b/update.sh @@ -14,10 +14,12 @@ fi echo "Updating team" ( - cd _team - rm -f *.html - cp ../www.divd.nl/_team/*.html . + cd _teams + rm -f *.md + cd ../_team + rm -f *.md ) +./update_org.py --team-path _teams --member-path _team echo "Updating reports" ( diff --git a/update_org.py b/update_org.py new file mode 100755 index 00000000..c670f670 --- /dev/null +++ b/update_org.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 + +import json +import requests +import argparse + +# Main + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Update team members and teams from theorg.com', allow_abbrev=False) + parser.add_argument('--member-path', type=str, metavar="", default="", required=True, help="path of directory to create member md files") + parser.add_argument('--team-path', type=str, metavar="", default="", required=True, help="path of directory to create member md files") + + + args = parser.parse_args() + + url = 'https://prod-graphql-api.theorg.com/graphql' + #payload = {'some': 'data'} + payload = { + "operationName": "teamsByCompany", + "variables": { + "companySlug": "dutch-institute-for-vulnerability-disclosure", + "membersLimit": 20, + "offset": 0, + "limit": 100 + }, + "query": 'query teamsByCompany($companySlug: String!, $limit: Int!, $offset: Int!, $membersLimit: Int!) {\n teamsByCompany(companySlug: $companySlug, limit: $limit, offset: $offset) {\n ...LightTeam\n __typename\n }\n}\n\nfragment LightTeam on Team {\n id\n slug\n name\n memberCount\n members(limit: $membersLimit) {\n ...LightPositionFragment\n __typename\n }\n __typename\n}\n\nfragment LightPositionFragment on LightPosition {\n id\n slug\n fullName\n profileImage {\n ...ImageFragment\n __typename\n }\n role\n parentPositionId\n isAdviser\n lastUpdate\n __typename\n}\n\nfragment ImageFragment on Image {\n endpoint\n ext\n placeholderDataUrl\n prevailingColor\n uri\n versions\n __typename\n}\n' + } + headers = {'content-type': 'application/json'} + + r = requests.post(url, data=json.dumps(payload), headers=headers) + #r = requests.post(url, data=payload, headers=headers) + + print("updating teams",end="") + for team in r.json()["data"]["teamsByCompany"] : + #print(json.dumps(team)) + with open("{}/{}.md".format(args.team_path,team["slug"]), "w") as tfh : + tfh.write("---\n") + tfh.write("layout: team\n") + tfh.write("slug: {}\n".format(team["slug"])) + tfh.write("name: {}\n".format(team["name"])) + tfh.write("title: {}\n".format(team["name"])) + tfh.write("size: {}\n".format(team["memberCount"])) + tfh.write("members:\n") + for member in team["members"] : + tfh.write(" - {}\n".format(member["id"])) + tfh.write("---\n") + print(".",end="") + print("done") + + payload = { + "operationName": "Company", + "variables": { + "slug": "dutch-institute-for-vulnerability-disclosure" + }, + "query": "query Company($slug: String!) {\n company(slug: $slug) {\n ...FullCompany\n __typename\n }\n}\n\nfragment FullCompany on Company {\n id\n name\n slug\n extensions\n logoImage {\n ...ImageFragment\n __typename\n }\n social {\n ...CompanySocialFragment\n __typename\n }\n location {\n ...CompanyLocation\n __typename\n }\n description\n type\n industry\n status\n private\n teams {\n id\n __typename\n }\n meta {\n ...MetaFragment\n __typename\n }\n nodes {\n ...PositionNode\n __typename\n }\n stats {\n ...CompanyStats\n __typename\n }\n verification {\n verificationType\n __typename\n }\n adminLocked\n stage\n companyValues {\n ...CompanyValue\n __typename\n }\n imageGallery {\n ...ImageFragment\n __typename\n }\n testimonials {\n ...CompanyTestimonialConnection\n __typename\n }\n industries {\n ...CompanyIndustryFragment\n __typename\n }\n lastUpdate\n permissionSettings {\n companyId\n restrictMembersFromEditing\n __typename\n }\n __typename\n}\n\nfragment ImageFragment on Image {\n endpoint\n ext\n placeholderDataUrl\n prevailingColor\n uri\n versions\n __typename\n}\n\nfragment CompanySocialFragment on CompanySocial {\n twitterUrl\n linkedInUrl\n facebookUrl\n websiteUrl\n __typename\n}\n\nfragment CompanyLocation on CompanyLocation {\n id\n street\n postalCode\n city\n subLocality\n country\n countryIso\n state\n locationString\n isPrimary\n __typename\n}\n\nfragment MetaFragment on CompanyMeta {\n noIndex\n importanceScore\n tags\n __typename\n}\n\nfragment PositionNode on OrgChartStructureNode {\n id\n title\n leafMember {\n ...FlatPositionFragment\n __typename\n }\n containingNodeId\n node {\n ... on Vacant {\n job {\n id\n slug\n title\n location {\n city\n state\n country\n __typename\n }\n atsProvider {\n provider\n __typename\n }\n createdOn\n jobFunction\n remote\n manager {\n ... on ChartNodeGroup {\n positions {\n ... on PositionOrgChartPosition {\n positionId\n fullName\n profileImage {\n ...ImageFragment\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n ... on ChartNodeSingular {\n positionId\n position {\n ... on PositionOrgChartPosition {\n profileImage {\n ...ImageFragment\n __typename\n }\n fullName\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n order\n parentId\n section\n type\n __typename\n}\n\nfragment FlatPositionFragment on FlatPosition {\n id\n slug\n fullName\n role\n roleFunction\n roleAutoFunction\n description\n parentPositionId\n profileImage {\n ...ImageFragment\n __typename\n }\n social {\n ...UserSocialFragment\n __typename\n }\n isAdviser\n group {\n ...PositionGroupFragment\n __typename\n }\n companyStartDate {\n day\n month\n year\n __typename\n }\n roleStartDate {\n day\n month\n year\n __typename\n }\n location {\n ...CompanyLocation\n __typename\n }\n invitedAt\n remote\n lastUpdate\n pronoun\n invitedAt\n claimedBy\n __typename\n}\n\nfragment UserSocialFragment on UserSocial {\n twitterUrl\n linkedInUrl\n facebookUrl\n websiteUrl\n __typename\n}\n\nfragment PositionGroupFragment on PositionGroup {\n id\n name\n __typename\n}\n\nfragment CompanyStats on CompanyStats {\n tags\n employeeRange\n followerCount\n positionCount\n jobsCount\n teamsCount\n announcementsCount\n following\n promptDismissals\n latestFundingRound {\n id\n fundingType\n __typename\n }\n __typename\n}\n\nfragment CompanyValue on CompanyValue {\n id\n value\n description\n __typename\n}\n\nfragment CompanyTestimonialConnection on CompanyTestimonialConnection {\n testimonial {\n id\n question\n answer\n __typename\n }\n position {\n id\n slug\n fullName\n profileImage {\n ...ImageFragment\n __typename\n }\n role\n parentPositionId\n isAdviser\n lastUpdate\n __typename\n }\n __typename\n}\n\nfragment CompanyIndustryFragment on CompanyTag {\n id\n title\n __typename\n}\n" + } + r = requests.post(url, data=json.dumps(payload), headers=headers) + + print("Updating people",end="") + for node in r.json()["data"]["company"]["nodes"] : + if node["leafMember"]["slug"] : + with open("{}/{}.md".format(args.member_path, node["leafMember"]["fullName"]), "w") as mfh : + mfh.write("---\n") + mfh.write("layout: person\n") + mfh.write("person_id: {}\n".format(node["leafMember"]["id"] or "")) + mfh.write("name: \"{}\"\n".format(node["leafMember"]["fullName"] or "")) + mfh.write("role: \"{}\"\n".format(node["leafMember"]["role"] or "")) + mfh.write("manager: {}\n".format(node["leafMember"]["parentPositionId"] or "")) + mfh.write("socials :\n") + for social in node["leafMember"]["social"] : + if not social.startswith("__"): + mfh.write(" {}: {}\n".format(social, node["leafMember"]["social"][social] or "")) + if "companyStartDate" in node["leafMember"] and node["leafMember"]["companyStartDate"] : + mfh.write("start: {:04d}-{:02d}-{:02d}\n".format( + node["leafMember"]["companyStartDate"]["year"], + node["leafMember"]["companyStartDate"]["month"], + node["leafMember"]["companyStartDate"]["day"]) + ) + mfh.write("---\n") + mfh.write("{}\n".format(node["leafMember"]["description"] or "")) + print(".",end="") + print("done") diff --git a/you_got_scanned.md b/you_got_scanned.md index 5f56409a..fe88f965 100644 --- a/you_got_scanned.md +++ b/you_got_scanned.md @@ -26,7 +26,6 @@ DIVD does not operate on an opt-in or opt-out basis, but you can block the scann We currently have the following cases open, so the scan you observed is likely related to one of them: {% assign cases = site.cases |reverse -%} -{% assign team = site.team | map: "name" -%} {% for p in cases -%} {%- if p.status == "Open" -%} * [{{ p.title }}]({{ p.url }})