CINXE.COM

18F: Digital service delivery | Giving back to open source: Everybody wins

<!DOCTYPE html> <html lang="en-US"> <head> <!-- Basic Page Needs ================================================== --> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- Mobile Specific Metas ================================================== --> <meta name="HandheldFriendly" content="True" /> <meta name="MobileOptimized" content="320" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!-- Title and meta description ================================================== --> <title>18F: Digital service delivery | Giving back to open source: Everybody wins</title> <meta property="og:title" content="18F: Digital service delivery | Giving back to open source: Everybody wins" /> <meta name="description" content="We love when we&#39;re able to contribure to open source projects from other organizations. Recently, we contributed to Bitly&#39;s open source google_auth_proxy to support our Hub and MyUSA applications, and our contribution has already helped other OAuth2 providers." /> <meta property="og:description" content="We love when we&#39;re able to contribure to open source projects from other organizations. Recently, we contributed to Bitly&#39;s open source google_auth_proxy to support our Hub and MyUSA applications, and our contribution has already helped other OAuth2 providers." /> <meta name="twitter:card" content="summary" /> <meta name="twitter:site" content="@18F" /> <meta name="twitter:title" content="Giving back to open source: Everybody wins" /> <meta name="twitter:description" content="We love when we&#39;re able to contribure to open source projects from other organizations. Recently, we contributed to Bitly&#39;s open source google_auth_proxy to support our Hub and MyUSA applications, and our contribution has already helped other OAuth2 providers." /> <meta property="og:type" content="article" /> <link rel="canonical" href="/2015/06/03/giving-back-to-open-source/" /> <meta property="og:url" content="/2015/06/03/giving-back-to-open-source/" /> <script async="" src=/assets/js/uswds-init.js></script> <!-- Favicon ================================================== --> <link rel="icon" type="image/png" sizes="16x16" href="/img/favicons/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="32x32" href="/img/favicons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="192x192" href="/img/favicons/favicon-192x192.png"> <link rel="icon" type="image/svg+xml" href="/img/favicons/favicon.svg"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> <link rel="apple-touch-icon" sizes="180x180" href="/img/favicons/favicon-180x180.png"> <!-- CSS ================================================== --> <link href="https://unpkg.com/prismjs@1.20.0/themes/prism.css" rel="stylesheet"> <link rel="preload" as="style" href="/assets/styles/styles-UKMOJPRN.css" /> <link rel="stylesheet" href="/assets/styles/styles-UKMOJPRN.css" type="text/css" /> </head> <body class=" "> <a class="usa-skipnav" href="#main-content">Skip to main content</a> <div class="page-landing-page layout-demo "> <a class="usa-skipnav" href="#main-content">Skip to main content</a> <div class="usa-banner"> <div class="usa-accordion"> <section id="gov-banner-header-section" aria-label="USA Gov banner section header" class="usa-banner__header" > <div class="usa-banner__inner"> <div class="grid-col-auto"> <img src="/img/us_flag_small-VKjpzbKpq_.png" class="usa-banner__header-flag" alt="U.S. flag" loading="lazy" decoding="async"> </div> <div class="grid-col-fill tablet:grid-col-auto"> <p class="usa-banner__header-text"> An official website of the United States government </p> <p class="usa-banner__header-action" aria-hidden="true"> Here鈥檚 how you know </p> </div> <button class="usa-accordion__button usa-banner__button" aria-expanded="false" aria-controls="gov-banner" type="button" > <span class="usa-banner__button-text">Here's how you know</span> </button> </div> </section> <div class="usa-banner__content usa-accordion__content" id="gov-banner"> <div class="grid-row grid-gap-lg"> <div class="usa-banner__guidance tablet:grid-col-6"> <div class="usa-media-block__body"> <p> <strong>The .gov means it鈥檚 official.</strong> <br /> Federal government websites often end in .gov or .mil. Before sharing sensitive information, make sure you鈥檙e on a federal government site. </p> </div> </div> <div class="usa-banner__guidance tablet:grid-col-6"> <div class="usa-media-block__body"> <p> <strong>The site is secure.</strong> <br /> The <strong>https://</strong> ensures that you are connecting to the official website and that any information you provide is encrypted and transmitted securely. </p> </div> </div> </div> </div> </div> </div> <div class="usa-overlay"></div> </div> <header class="usa-header usa-header--basic usa-header--basic-megamenu" role="banner"> <div class="usa-nav-container"> <div class="usa-navbar"> <div class="usa-logo" id="header-logo"> <a href="/" title="Home"> <img src="/img/18f-logo-60i14872OF.svg" class="usa-logo-img" alt="18F home page" loading="lazy" decoding="async"> </a> </div> <button type="button" class="usa-menu-btn">Menu</button> </div> <nav class="usa-nav" aria-label="Menu navigation" > <button type="button" class="usa-nav__close"> <img src="/img/close-xPu02brD0d.svg" class="" alt="close" loading="lazy" decoding="async"> </button> <ul class="usa-nav__primary usa-accordion"> <li class="usa-nav__primary-item"> <a class="usa-nav__link " href="/our-work/" > <span>Our work</span> </a> </li> <li class="usa-nav__primary-item"> <a class="usa-nav__link " href="/work-with-us/" > <span>Work with us</span> </a> </li> <li class="usa-nav__primary-item"> <a class="usa-nav__link " href="/about/" > <span>About 18F</span> </a> </li> <li class="usa-nav__primary-item"> <a class="usa-nav__link " href="/guides/" > <span>Guides</span> </a> </li> <li class="usa-nav__primary-item"> <a class="usa-nav__link usa-current " href="/blog/" > <span>Blog</span> </a> </li> <li class="usa-nav__primary-item"> <a class="usa-button an18f-button--dark margin-top-3 desktop:margin-top-0 desktop:margin-x-2 " href="/contact/" > <span>Contact</span> </a> </li> </ul> <a href="https://search.usa.gov/search?utf8=%E2%9C%93&affiliate=18F-site&query=&commit=" class="usa-button padding-x-2" > <img src="/img/search--white-ZVwKBtv5eC.svg" class="" alt="Search" loading="lazy" decoding="async"> </a> </nav> </div> </header> <figure class="post-feature_image" role="img" title="" style="background-image: url('/assets/blog/google-auth-proxy/bitly_oauth_github.jpg')" > </figure> <article id="main-content" class="post-article margin-top-6" itemscope itemtype="http://schema.org/BlogPosting"> <div class="grid-container"> <div class="grid-row"> <div class="tablet:grid-col-12"> <header> <h1 itemprop="name headline">Giving back to open source: Everybody wins</h1> <p class="margin-top-1"> Published on <time datetime="Wed Jun 03 2015 00:00:00 GMT+0000 (Coordinated Universal Time)" itemprop="datePublished">June 3, 2015</time> </p> <span class="post-tags display-flex flex-wrap" itemprop="keywords"> <a href="/tags/open-source/" class="usa-label post-tag"> open source </a> <a href="/tags/security/" class="usa-label post-tag"> security </a> <a href="/tags/hub/" class="usa-label post-tag"> hub </a> <a href="/tags/communication-tools-and-practices/" class="usa-label post-tag"> communication tools and practices </a> </span> </header> </div> </div> <hr class="hr-1-dark"> <div class="grid-row grid-gap margin-top-8"> <div class="tablet:grid-col-7"> <div class="post-content" itemprop="articleBody"> <p>Many of our products depend on reusable open source software, and we also publish our own work as open source. What's even cooler is when we鈥檙e able to contribute to an open source product from another organization. <a href="https://github.com/bitly/oauth2_proxy" class="usa-link usa-link--external" rel="noreferrer">oauth2_proxy</a> (formerly google_auth_proxy) is a program from <a href="https://bitly.com/" class="usa-link usa-link--external" rel="noreferrer">Bitly</a> (written in <a href="https://golang.org/" class="usa-link usa-link--external" rel="noreferrer">the Go programming language</a>) that enables a web service to provide authentication via OAuth2 provider accounts, without the need to build authentication code directly into the service. This was a perfect fit for the needs of the internal <a href="/2014/12/23/hub/">18F Hub</a>, which is a <a href="http://jekyllrb.com/" class="usa-link usa-link--external" rel="noreferrer">Jekyll</a>-generated site containing no authentication logic of its own.</p> <p>Because the <a href="http://googleforwork.blogspot.com/2011/07/gsa-has-gone-google.html" class="usa-link usa-link--external" rel="noreferrer">General Services Administration (GSA) is a Google Apps for Government customer</a>, and because we serve the Hub using the <a href="http://nginx.org/" class="usa-link usa-link--external" rel="noreferrer">Nginx web server</a>, it was straightforward to configure Nginx and the oauth2_proxy to provide authentication for 18F team members (and other guests within the GSA) with no changes required to the Hub code.</p> <p>The basic structure is to create a <code>server</code> block as the public-facing internal Hub server that uses the <code>proxy_pass</code> directive to forward requests to the oauth2_proxy, listening on <code>localhost:4180</code>. The oauth2_proxy, in turn, is configured to redirect authenticated requests to a server on <code>localhost:8080</code>, configured as another Nginx <code>server</code> block, that just serves the pre-generated Jekyll site:</p> <pre class="shiki github-light" style="background-color: #ffffff; color: #24292f"><div class='code-container'><code><div class='line'><span style="color: undefined">server {</span></div><div class='line'><span style="color: undefined"> listen 443 ssl spdy;</span></div><div class='line'><span style="color: undefined"> server_name hub.18f.gov;</span></div><div class='line'><span style="color: undefined"> include ssl/star.18f.gov.conf;</span></div><div class='line'><span style="color: undefined"></span></div><div class='line'><span style="color: undefined"> location /logo.png {</span></div><div class='line'><span style="color: undefined"> alias /home/ubuntu/18f-hub/_site/assets/images/logo-18f-oauth.png;</span></div><div class='line'><span style="color: undefined"> }</span></div><div class='line'><span style="color: undefined"></span></div><div class='line'><span style="color: undefined"> location / {</span></div><div class='line'><span style="color: undefined"> proxy_pass http://127.0.0.1:4180/;</span></div><div class='line'><span style="color: undefined"> proxy_set_header Host $host;</span></div><div class='line'><span style="color: undefined"> proxy_set_header X-Real-IP $remote_addr;</span></div><div class='line'><span style="color: undefined"> proxy_set_header X-Scheme $scheme;</span></div><div class='line'><span style="color: undefined"> proxy_connect_timeout 1;</span></div><div class='line'><span style="color: undefined"> proxy_send_timeout 30;</span></div><div class='line'><span style="color: undefined"> proxy_read_timeout 30;</span></div><div class='line'><span style="color: undefined"> }</span></div><div class='line'><span style="color: undefined">}</span></div><div class='line'><span style="color: undefined"></span></div><div class='line'><span style="color: undefined">server {</span></div><div class='line'><span style="color: undefined"> listen 127.0.0.1:8080;</span></div><div class='line'><span style="color: undefined"> server_name hub.18f.gov;</span></div><div class='line'><span style="color: undefined"> port_in_redirect off;</span></div><div class='line'><span style="color: undefined"> error_page 404 /404/index.html;</span></div><div class='line'><span style="color: undefined"></span></div><div class='line'><span style="color: undefined"> location / {</span></div><div class='line'><span style="color: undefined"> ssi on;</span></div><div class='line'><span style="color: undefined"> root /home/ubuntu/hub/_site;</span></div><div class='line'><span style="color: undefined"> index index.html api.json;</span></div><div class='line'><span style="color: undefined"> default_type text/html;</span></div><div class='line'><span style="color: undefined"> set $authenticated_user $http_x_forwarded_email;</span></div><div class='line'><span style="color: undefined"> set $access_token $http_x_forwarded_access_token;</span></div><div class='line'><span style="color: undefined"> }</span></div><div class='line'><span style="color: undefined">}</span></div></code></div></pre> <p>This worked really well for 18F, but there was a problem. Not all government agencies use Google Apps, and we wanted to be able to permit guests from other agencies access to our internal Hub or set up their own. The idea was to use 18F鈥檚 own <a href="/2015/05/18/myusa/">MyUSA</a> product as an <a href="http://oauth.net/articles/authentication/" class="usa-link usa-link--external" rel="noreferrer">OAuth2 authentication provider</a> instead. However, since the Hub didn鈥檛 contain any authentication code of its own, the question was how to implement the switch to MyUSA.</p> <p>Thanks to the fact that Bitly chose to make its oauth2_proxy open source, I was able to inspect the code, learn how it worked, fork my own copy, and produce a prototype that used MyUSA as the OAuth2 provider. Then, <a href="https://github.com/bitly/google_auth_proxy/issues/65" class="usa-link usa-link--external" rel="noreferrer">I engaged the oauth2_proxy maintainer</a>, Jehiah Czebotar, to get feedback and solicit approval to incorporate <a href="https://github.com/bitly/google_auth_proxy/pull/77" class="usa-link usa-link--external" rel="noreferrer">an OAuth2 provider generalization</a> into the main <code>bitly/oauth2_proxy</code> repository. With that generalization interface in place, Jehiah also permitted me to add <a href="https://github.com/bitly/google_auth_proxy/pull/79" class="usa-link usa-link--external" rel="noreferrer">the MyUSA provider</a> to the main repository, potentially enabling any oauth2_proxy user to use MyUSA for authentication. Also, the new generalized provider support also paid dividends for others beyond 18F and Bitly, as another developer built upon the new interface to add <a href="https://github.com/bitly/google_auth_proxy/pull/84" class="usa-link usa-link--external" rel="noreferrer">LinkedIn as an OAuth2 provider</a>, and Jehiah added <a href="https://github.com/bitly/oauth2_proxy/pull/98" class="usa-link usa-link--external" rel="noreferrer">GitHub as a provider</a>.</p> <p>While this was a big step forward for 18F鈥檚 involvement in the open source community, and for MyUSA in particular, the collaboration didn鈥檛 stop there. We wanted the Hub to be able <a href="https://github.com/18F/hub/pull/211" class="usa-link usa-link--external" rel="noreferrer">to integrate with other MyUSA-authenticated services</a> serving JSON API endpoints; to do that, we needed access to the MyUSA access token, which the oauth2_proxy initially discarded. I added <a href="https://github.com/bitly/google_auth_proxy/pull/80" class="usa-link usa-link--external" rel="noreferrer">access token pass-through</a> to the oauth2_proxy to enable this integration (and <a href="https://github.com/bitly/google_auth_proxy/pull/81" class="usa-link usa-link--external" rel="noreferrer">clean it up later</a>).</p> <p>Since then, I鈥檝e contributed a host of other changes to the main oauth2_proxy repository, both to solve minor issues (<a href="https://github.com/bitly/google_auth_proxy/pull/82" class="usa-link usa-link--external" rel="noreferrer">sign-in page redirection</a>, email address <a href="https://github.com/bitly/google_auth_proxy/pull/83" class="usa-link usa-link--external" rel="noreferrer">case sensitivity</a>) and to implement handy new features (<a href="https://github.com/bitly/google_auth_proxy/pull/88" class="usa-link usa-link--external" rel="noreferrer">automatic refresh</a> of the auth cookie, <a href="https://github.com/bitly/google_auth_proxy/pull/89" class="usa-link usa-link--external" rel="noreferrer">watching the authenticated emails file</a> for updates, blocking crawlers with <a href="https://github.com/bitly/google_auth_proxy/pull/90" class="usa-link usa-link--external" rel="noreferrer">robots.txt</a>). I鈥檝e also figured out how to configure the oauth2_proxy to provide <a href="https://github.com/18F/hub/blob/master/deploy/SSO.md" class="usa-link usa-link--external" rel="noreferrer">single-sign on across multiple hosts</a>.</p> <p>The lessons here are twofold. For one, it鈥檚 possible to use oauth2_proxy, Nginx, and Jekyll to produce a highly functional, fully-authenticated web application without the need for complex frameworks, databases, or other moving parts requiring vigilant maintenance. While the Hub has a ways to go, our team has had a great deal of success finding and sharing information with it, particularly when it comes to onboarding new team members; and it鈥檚 incurred very, very low running costs. The new authenticated API integration feature promises to make the Hub and its application model even more powerful, despite the fact that it remains a statically generated Jekyll site at its core. (Fellow 18F team member Dave Cole actually <a href="https://developmentseed.org/blog/2012/07/27/build-cms-free-websites/" class="usa-link usa-link--external" rel="noreferrer">advocated for this model three years ago</a>.)</p> <p>As for the second lesson, it鈥檚 often difficult to achieve this degree of transparency, collaboration, reuse, and contribution in the same organization, let alone between a government agency and a private company. However, thanks to a commitment to open source development on behalf of both 18F and Bitly, our team members can work together to develop features that benefit not just our two organizations, but many others who may be able to apply (and adapt!) the oauth2_proxy to their needs.</p> <p>By continuing to explore new ways to develop and deploy applications and reuse infrastructure as fully-invested members of the open source community, 18F aims to demonstrate to the rest of government, and those it serves, that such methods are safe and productive and ultimately improve the way government works.</p> </div> </div> <aside class="tablet:grid-offset-1 tablet:grid-col-4"> <div class="bg-primary-darker padding-3 text-white usa-dark-background radius-md"> <h2 class="font-sans-lg text-bold margin-bottom-2">Follow 18F</h2> <ul class="usa-list usa-list--unstyled"> <li class="margin-bottom-2"> <a href="https://github.com/18F" class="usa-link--alt usa-link--external" rel="noreferrer" > <img src="/img/github-lightest-dnvvdJeNxl.svg" class="maxw-3 margin-right-2 text-sub" alt="" loading="lazy" decoding="async">18F on GitHub </a> </li> <li class="margin-bottom-2"> <a href="https://twitter.com/18F" class="usa-link--alt usa-link--external" rel="noreferrer" > <img src="/img/twitter-lightest-MyHkS8cnLa.svg" class="maxw-3 margin-right-2 text-sub" alt="" loading="lazy" decoding="async">18F on Twitter </a> </li> <li class="margin-bottom-2"> <a href="https://www.linkedin.com/company/gsa18f" class="usa-link--alt usa-link--external" rel="noreferrer" > <img src="/img/linkedin-lightest-hDYpqtBBKD.svg" class="maxw-3 margin-right-2 text-sub" alt="" loading="lazy" decoding="async">18F on LinkedIn </a> </li> <li class="margin-bottom-2"> <a href="/feed.xml" class="usa-link--alt " > <img src="/img/rss-lightest-29xxdTjXfa.svg" class="maxw-3 margin-right-2 text-sub" alt="" loading="lazy" decoding="async">RSS feed </a> </li> </ul> </div> </aside> </div> </div> </article> <section class="margin-top-6 post-pagination"> <div class="grid-container"> <hr class="hr-1-base-lighter"> <div class="grid-row grid-gap"> <div class="grid-col-6"> <a href="/2015/06/02/taking-the-pulse-of-the-federal-governments-web-presence/" class="text-no-underline post-pagination__link" > <h2 class="post-pagination__heading"> <svg class="icon caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 444.531 444.531" style="enable-background:new 0 0 444.531 444.531;" xml:space="preserve" role="img" aria-hidden="true"> <title>Arrow left</title> <desc>Arrow pointing to the left</desc> <g> <path d="M213.13,222.409L351.88,83.653c7.05-7.043,10.567-15.657,10.567-25.841c0-10.183-3.518-18.793-10.567-25.835 l-21.409-21.416C323.432,3.521,314.817,0,304.637,0s-18.791,3.521-25.841,10.561L92.649,196.425 c-7.044,7.043-10.566,15.656-10.566,25.841s3.521,18.791,10.566,25.837l186.146,185.864c7.05,7.043,15.66,10.564,25.841,10.564 s18.795-3.521,25.834-10.564l21.409-21.412c7.05-7.039,10.567-15.604,10.567-25.697c0-10.085-3.518-18.746-10.567-25.978 L213.13,222.409z" fill="#046b99"/> </g> </svg> Previous post </h2> <p class="measure-1 text-bold text-primary-darkest">Taking the pulse of the federal government's web presence</p> </a> </div> <div class="grid-col-6 text-right"> <a href="/2015/06/08/the-us-government-is-moving-to-https-everywhere/" class="text-no-underline post-pagination__link" > <h2 class="post-pagination__heading"> Next post <svg class="icon caret" xmlns="http://www.w3.org/2000/svg" width="444.819" height="444.819" viewBox="0 0 444.819 444.819" role="img" aria-hidden="true"> <title>Arrow right</title> <desc>Arrow pointing to the right</desc> <path fill="#046b99" d="M352.025 196.712L165.885 10.848C159.028 3.615 150.468 0 140.185 0s-18.84 3.62-25.696 10.848l-21.7 21.416c-7.045 7.043-10.567 15.604-10.567 25.692 0 9.897 3.52 18.56 10.566 25.98L231.544 222.41 92.785 361.168c-7.04 7.043-10.563 15.604-10.563 25.693 0 9.9 3.52 18.566 10.564 25.98l21.7 21.417c7.043 7.043 15.612 10.564 25.697 10.564 10.09 0 18.656-3.52 25.697-10.564L352.025 248.39c7.046-7.423 10.57-16.084 10.57-25.98.002-10.09-3.524-18.655-10.57-25.698z"/> </svg> </h2> <p class="measure-1 float-right text-bold text-primary-darkest text-right">The U.S. government is moving to HTTPS everywhere</p> </a> </div> </div> <hr class="hr-1-base-lighter"> </div> </section> <section class="margin-top-3 margin-bottom-6"> <div class="grid-container"> <ul class="grid-row grid-gap usa-list--unstyled"> <li class="grid-col-12 tablet:grid-col-6 tablet-lg:grid-col-4 margin-bottom-5 "> <a href="/2015/06/15/building-a-better-welcome-wagon/" class="text-no-underline"> <h3 class="border-top-05 border-primary hover-primary-dark padding-top-3 margin-bottom-3 text-bold "> Building a better welcome wagon </h3> </a> As our team expands to meet federal digital needs, we've learned to appreciate documentation for its ability to turn new hires into self-sufficient contributors quickly, with minimal disruption to the organization. </li> <li class="grid-col-12 tablet:grid-col-6 tablet-lg:grid-col-4 margin-bottom-5 "> <a href="/2016/01/04/turning-learning-up-to-11-transparency/" class="text-no-underline"> <h3 class="border-top-05 border-primary hover-primary-dark padding-top-3 margin-bottom-3 text-bold "> Turning learning up to 11: Transparent internal operations </h3> </a> In the second post in this series on how transparency, autonomy, and collaboration produce organizational culture change, I describe a few of the initiatives we鈥檝e undertaken to increase transparency into 18F鈥檚 internal operations. </li> <li class="grid-col-12 tablet:grid-col-6 tablet-lg:grid-col-4 margin-bottom-5 "> <a href="/2014/12/17/snippets/" class="text-no-underline"> <h3 class="border-top-05 border-primary hover-primary-dark padding-top-3 margin-bottom-3 text-bold "> Snippets </h3> </a> 18F has begun collecting and publishing team member "snippets," short lists summarizing what you worked on the previous week and what you plan to work on during the upcoming week. Team members submit their snippets each Monday, and they are published internally for all to peruse. Snippets foster transparency and team cohesion, spark productive interactions, and can be cultivated right away using tools already at-hand. </li> </ul> </div> </div> </section> <footer> <div class="grid-container padding-y-6"> <hr class="hr-1-dark footer-hr-alignment"> <div class="grid-row grid-gap"> <div class="tablet:grid-col-3"> <img src="/img/18f-logo-60i14872OF.svg" class="maxw-5" alt="18F logo" loading="lazy" decoding="async"> <p> Work with us to plan successful projects, choose better vendors, build custom software, or learn how to work in new ways. </p> <a href="/contact/" class="usa-button an18f-button--dark" > Contact us </a> </div> <div class="tablet:grid-offset-1 tablet:grid-col-2"> <h2 class="font-heading-md text-medium margin-top-4 tablet:margin-top-0 margin-bottom-2 tablet:margin-bottom-4"> Pages </h2> <ul class="usa-list usa-list--unstyled font-sans-sm list-item-spacing-2"> <li><a href="/our-work/">Our work</a></li> <li><a href="/work-with-us/">Work with us</a></li> <li><a href="/about/">About 18F</a></li> <li><a href="/guides/">Guides</a></li> <li><a href="/blog/">Blog</a></li> <li><a href="/contact/">Contact</a></li> </ul> </div> <div class="tablet:grid-col-2"> <h2 class="font-heading-md text-medium margin-top-4 tablet:margin-top-0 margin-bottom-2 tablet:margin-bottom-4"> Policies </h2> <ul class="usa-list usa-list--unstyled font-sans-sm list-item-spacing-2"> <li><a href="/linking-policy/">Linking policy</a></li> <li><a href="/open-source-policy/">Open source policy</a></li> <li><a href="/vulnerability-disclosure-policy/">Vulnerability disclosure</a></li> <li><a href="/code-of-conduct/">Code of conduct</a></li> </ul> </div> <div class="tablet:grid-col-2"> <h2 class="font-heading-md text-medium margin-top-4 tablet:margin-top-0 margin-bottom-2 tablet:margin-bottom-4"> Contact </h2> <ul class="usa-list usa-list--unstyled font-sans-sm list-item-spacing-2"> <li> <a href="/contact/" > Get in touch </a> </li> <li> <a href="/about/#for-press" > Press </a> </li> <li> <a href="https://github.com/18F/18f.gsa.gov/issues/new/choose" class="usa-link--external" > Report a bug </a> </li> <li> <a href="/join/" > Join 18F </a> </li> </ul> </div> <div class="tablet:grid-col-2"> <h2 class="font-heading-md text-medium margin-top-4 tablet:margin-top-0 margin-bottom-2 tablet:margin-bottom-4"> Social </h2> <ul class="usa-list usa-list--unstyled font-sans-sm list-item-spacing-2"> <li class="display-flex flex-align-center"> <a href="https://github.com/18F" class="usa-link--external" rel="noreferrer" > <img src="/img/github-dark-2-w9jCrv94IZ.svg" class="maxw-205 margin-right-1 text-tbottom" alt="" loading="lazy" decoding="async">GitHub</a> </li> <li class="display-flex flex-align-center"> <a href="https://twitter.com/18F" class="usa-link--external" rel="noreferrer" > <img src="/img/twitter-dark-Pq04PjchNH.svg" class="maxw-205 margin-right-1 " alt="" loading="lazy" decoding="async">Twitter</a> </li> <li class="display-flex flex-align-center"> <a href="https://www.linkedin.com/company/gsa18f" class="usa-link--external" rel="noreferrer" > <img src="/img/linkedin-dark-ILbHB_Cgfp.svg" class="maxw-205 margin-right-1 " alt="" loading="lazy" decoding="async">LinkedIn</a> </li> </ul> </div> </div> </div> <div class="usa-identifier padding-top-2"> <section class="usa-identifier__section usa-identifier__section--masthead" aria-label="Agency identifier"> <div class="usa-identifier__container"> <div class="usa-identifier__logos"> <a href="https://www.gsa.gov/" class="usa-identifier__logo"> <img src="/img/gsa-logo-blue-YKGHyQURdg.svg" class="usa-identifier__logo-img" alt="gsa logo" loading="lazy" decoding="async"> </a> </div> <div class="usa-identifier__identity text-base-lightest"> <p class="usa-identifier__identity-domain">18f.gsa.gov</p> <p class="usa-identifier__identity-disclaimer text-base-lightest">An official website of the <a href="https://www.gsa.gov/about-us/organization/federal-acquisition-service/technology-transformation-services"> GSA鈥檚 Technology Transformation Services </a> </p> </div> </div> </section> <nav class="usa-identifier__section usa-identifier__section--required-links" aria-label="Important links"> <div class="usa-identifier__container"> <ul class="usa-identifier__required-links-list"> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsa.gov/about" title="About GSA"> About GSA </a> </li> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsa.gov/website-information/accessibility-aids" title="View accessibility statement"> Accessibility support </a> </li> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsa.gov/reference/freedom-of-information-act-foia" title="Submit a Freedom of Information Act (FOIA) request"> FOIA requests </a> </li> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsa.gov/reference/civil-rights-programs/the-no-fear-act" title="View No FEAR Act data"> No FEAR Act data </a> </li> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsaig.gov/" title="Office of the Inspector General"> Office of the Inspector General </a> </li> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsa.gov/reference/reports/budget-performance" title="View budget and performance reports"> Performance reports </a> </li> <li class="usa-identifier__required-links-item"> <a class="usa-identifier__required-link usa-link" href="https://www.gsa.gov/website-information/website-policies" title="Our privacy policy"> Privacy policy </a> </li> </ul> </div> </nav> <section class="usa-identifier__section usa-identifier__section--usagov" aria-label="U.S. government information and services"> <div class="usa-identifier__container"> <div class="usa-identifier__usagov-description text-base-lightest">Looking for U.S. government information and services?</div> <a href="https://www.usa.gov/" class="usa-link">Visit USA.gov</a> </div> </section> </div> </footer> <!-- Pull in USWDS and custom js --> <script async src="/assets/js/app-IYN3AA5J.js"></script> <!-- Digital Analytics Program roll-up, see https://analytics.usa.gov for data --> <script id="_fed_an_ua_tag" src="https://dap.digitalgov.gov/Universal-Federated-Analytics-Min.js?agency=GSA&subagency=TTS,18F"></script> <!-- Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-HBYXWFP794"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'G-HBYXWFP794', { 'anonymize_ip': true }); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10