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 @@
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 %}
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 }})
| | | |