Giter Club home page Giter Club logo

fedramp-dashboard's Introduction

FedRAMP Dashboard

Gitter Build Status Coverage Status Code Climate Accessibility Dependency Status

The purpose of the FedRAMP Dashboard project is to create a publicly available, web-based responsive dashboard providing greater visibility and up to date status for vendors going through the FedRAMP authorization process.

The dashboard will provide many benefits to the FedRAMP user community including increased transparency and monitoring, improved decision-making and prioritization abilities, and reduced effort in compliance activities, among others.

The FedRAMP Dashboard project team employed a user-centered design approach leveraging key principles from the U.S. Digital Services Playbook:

  1. Understand what people need

  2. Address the whole experience, from start to finish

  3. Make it simple and intuitive

The team frequently interacted with user constituencies from FedRAMP, OMB, 18f, Federal Agencies, and Cloud Service Providers to understand the varying needs of each group and to derive the dashboard requirements from those needs.

Read more about the FedRAMP program here.

Table of contents

Project Management

The project team utilized Taiga, a free online open source project management tool, to administer User Stories, Tasks, and Sprints. All public projects in Taiga are free and openly accessible, providing full public visibility into the FedRAMP Dashboard Product Backlog and sprint activities.

Visit the FedRAMP Dashboard Taiga project here or download the project materials locally:

GitHub commits can be traced back to their corresponding Taiga tasks through commit comments. Commits directly related to a Taiga task will be prefixed with the task ID:

[TG-xxx] Commit description

Application

The FedRAMP Dashboard is written entirely in client-side code: HTML, CSS, and JavaScript, and populated by a FedRAMP-managed json data feed, which is currently hosted at 18F/fedramp-data. The code is hosted in a public code repository on GitHub and is licensed under the Creative Commons, CC0 1.0 Universal Public domain dedication. The application makes use of the AngularJS JavaScript framework.

A GitHub Pages “gh-pages” branch was created in the GitHub repository to generate a website associated with the project for hosting the work-in-progress FedRAMP Dashboard page and related content. The page facilitates rapid deployment for continuous integration, user testing, and feature demonstrations.

For information on contributing to the FedRAMP Dashboard codebase, please visit CONTRIBUTING.md

Features

The following User Stories were created and refined in response to many user surveys, interviews, and usability testing sessions, and became the base requirements for the FedRAMP Dashboard. Click on the User Story number to see the story details, otherwise the title and brief description are provided here.

Header

User Story 52: Total Authorizations - The high-level metrics at the top of the dashboard, counts for FedRAMP Ready, In-Process, and Authorized.

Cloud Service Providers

User Story 19: Provider check status - View the cloud service offering/product current Authorization status both on the Products listing and the Product detail. Products that are "Authorized" are represented by the double check-mark icon in the product listing view.

User Story 23: Monitor CSP Authorizations - See which agencies are using a product from the Product details view. The Agency names are listed out and created as hyperlinks to the Agency detail view.

User Story 53: Total Reuse (Authorizations) - See how many time a product has been authorized for use by an agency, and see which agencies are using the product. The count is visible in the product listing and the details page.

User Story 145: In-process Time-line - Visual representation of where a cloud product is in the FedRAMP authorization process. The time-line is represented as a series of blocks in the Product detail page, color-coded to show each step in the process (when available). Time-line data is not always available, in which case the time-line is left off the product details.

User Story 147: View Authorization Dates - With-in the product time-line, users can see the date when the product passed through each gateway. The time-line gateways are FedRAMP Ready, In-Process, and Authorized.

Agencies

User Story 16: Identify agency performance - For each Agency, show the number of cloud products they are using. The count is shown next to the Agency name on the Agency listing page and the services that make up the count are list in the Agency detail view.

User Story 18: Visual representation of Agency - In the Agency listing view, the Agency name, icon, point of contact, and number of products used is shown. In the Agency detail page the same information is provided, but also the products used are listed out and are hyper-linked to their respective product detail page.

User Story 22: Review which agencies use a service - In the cloud product details page, the listing of agencies who use that particular cloud product is provided, and the agencies listed are hyper-linked to their respective agency detail page.

3PAOs

User Story 64: View 3PAOs - The 3PAO details view provides a description of the assessor's services to help potential customers (agencies) determine if they are a good fit to do their assessment.

User Story 66: What work has a 3PAO done - The 3PAO details view provides a listing of the cloud providers and their corresponding products in which the 3PAO has performed assessments. The services listed are hyper-linked to their respective product detail page.

User Story 286: 3PAO Consulting Details - The 3PAO details view provides a list of consulting services the 3PAO provides customers, as well as a list of customers (agencies and providers) for whom the assessor has provided consulting services.

Analysis Tools

User Story 14: Search dashboard - The dashboard can be quickly filtered by entering the name of a Provider, Agency, or 3PAO. The search box is in the filter area and is context-sensitive depending on which view you are in (Provider, Agency, or 3PAO).

User Story 17: Pull data for reports - Dashboard users can download the dashboard data into a CSV file for local use. The data is filtered to match the dashboard filter settings at the time of the download.

User Story 21: Compare 2 CSP providers - Click an item in the dashboard list view (works for Products, Agencies, and 3PAOs). When the item details page shows, the list of remaining items is shown to the right of the details. Select a second item and the details page for that item appears next to the original selection. Close one, to find another to compare, or close both to the return to the initial filtered list view.

User Story 100: Filter dashboard (by category) - The filter area appears to the left of the main content listing area and is context-sensitive based on the current item type being viewed (Products, Agencies, 3PAOs). The filters are aggregate, so as a filter is selected, the next filter will only apply to the currently filtered result set and the result set count appears in the upper portion of the filter area. A check mark represents a current selected filter. Filters are cleared one at a time by re-clicking a current filter, or all at once using the "Clear Filters" action at the top of the filter section.

User Story 144: Print Dashboard - A printer-friendly formatted output has been created so the dashboard can be easily printed using the browser's native print functionality.

User Story 274: Data Dictionary - A page listing terms used in the dashboard and columns used in the dashboard source data, along with a brief description of the term/column.

Data

FedRAMP and the dashboard leverages the GitHub API to make its data accessible via api. The url for the bulk data is on the 18f/FedRAMP-data repository.

Maintenance

Deployment

The application is deployed to Federalist off the federalist branch.

Add new Cloud Offering, Agency, or 3PAO

  1. Add the new entity (provider, offering, agency, 3PAO) to the FedRAMP data source. NOTE: Make sure the entity name and package id are unique
  2. Ensure logo images follow the guidelines provided in the Logo Guidelines section below
  3. Add logo image file to the correct directory on the FedRAMP web server.
  4. Ensure the URL to the image file is in the new data entry. NOTE: use https
  5. Publish new FedRAMP data to data.gov feed.

Logo Guidelines

To ensure consistency with logo images for Providers, Agencies, and Assessors appearing in the FedRAMP dashboard, please leverage the following guidelines.

File Type

SVG or PNG (with transparent background)

Target File Size

50k or smaller

Pixel Dimension if PNG

150px max width x 150 px max height

Orientation and Crop

Limit open space around logo and align edges of logo to bottom left corner.

logo guidelines graphic

Local Storage Services

This application uses HTML5 Local Storage to store the daily data.json pulls from the fedramp-data github repository. There are four primary data services that manage this information. These include:

storage-manager.factory.js is an object that abstracts access to the underlying local storage datastore by providing a consistent interface to read and write information. Conceptually, data is stored into containers or buckets with an associated storageContainer name that uniquely identifies that particular container. The storageContainer is the key and the associated array of information is the value. storage-data.factory, storage-assessor-data.factory and storage-settings.factory all extend the storage-manager.factory factory to separately store information specific to providers, assessors and system settings.

When information is stored in local storage, it is not cleared until the following day when the next data.json file is updated. As a result, access to the site after the initial pull will not require additional http requests. The storage-settings.factory object is responsible for determining when to clear out the cache and request for updated information.

Adding a new filter to the dashboard

A grid consists of the following components:

  • grid
    • gridFilter
      • A component that allows 0 or more options to be selected using a property expression or custom option/filter functions
    • gridSort
      • A component that filters based on a property expression
    • gridSearch
      • A component that allows free text-based searches

The grid is the parent component that all child components must require. The gridFilter component maintains state by using the id passed into <grid-filter id="blah"></grid-filter> and uses that as the key for the value that gets stored in the URL hash.

For instance, <grid-filter id="blah"></grid-filter> would render ?blah=<value from selectedOptions>

The <grid-filter/> has two modes of operation

  1. Using a property expression that defines which property to use to generate a list of available options. For more information regarding property expressions, please see the @example at http://truetandem.github.io/fedramp-dashboard/doc/Services.Searcher.html
  2. Providing custom functions (optionsFunc and filterFunc) to render available options and apply custom filtering behavior.

Assume we have the following data

[
  {
    "name": "TrueTandem",
    "employees": [
        {
           "name": "Bryan",
           "favoriteLanguages" : ["go"]
        },
        {
            "name": "John",
            "favoriteLanguages" : ["go", "js"]
        }
    ]
  },
  {
    "name": "18F",
    "employees": [
        {
           "name": "Laura",
           "favoriteLanguages" : ["ruby"]
        }
    ]
  }  
]

1. Using Property Expressions

Render filter containing list of company names (where property name = "name")

Filter Values = ['TrueTandem', '18F']

<grid-filter id="companyName" property="name"></grid-filter>

Render filter containing list of favorite languages (where propery name = "favoriteLanguages"

Filter Values = ['go', 'js', 'ruby']

<grid-filter id="favoriteLanguages" property="e.favoriteLanguages in employees"></grid-filter>

Render filter containing list of employee names (where propery name = "employees.name"

Filter Values = ['Bryan', 'John', 'Laura']

<grid-filter id="employeeName" property="e.name in employees"></grid-filter>

2. Using Custom Functions

The gridFilter component also allows an optionsFunc and filterFunc to be passed in to accomodate custom filter options and behavior.

<grid-filter id="name" options-func="optionsNameFunc" filter-func="filterByNameFunc"></grid-filter>

The optionsFunc must return an array of options that a user can select. It should be in the following format:

{
    value: <object>,
    label: 'Friendly text label'
}

Note that for values that are NOT primitive types, the json representation will be stored in the url.

// data contains array of currently filtered items.
function optionsNameFunc(data){
    return [
       {
          value: '12345',
          label: 'John'
       },
       {
          value: '54321',
          label: 'Bryan'
       },
       {
          value: '1523',
          label: 'Laura'
       }       
    ];
}

The filterFunc will be passed into the native Array.prototype.filter filter. That means that returning the current object will include that value in the filtered dataset. If null is returned, it will be excluded. The only added change is the inclusion of the fourth parameter, selectedOptions. This contains an array of options that have been selected by the user.

function filterByNameFunc(company, index, arr, selectedOptions){
    for (var x = 0; x < selectedOptions.length; x++) {
        var option = selectedOptions[x];
        if (option.value === company.name) {
            return company;
        }
    }
    return null;
}

Maintain static header/footer

Search

The topmost portion of the header consists of the search form. The this area is contained in the main template within the element

<div id="topnav" class="hidden-print"><!-- Search related elements --></div>

The actual search template contains the grid along with the form elements. The contents were based on the original template found on the www.fedramp.gov site, but then adapted to follow the U.S. Web Design Standards.

While the search component is the backing to the form the actual search logic takes place within the search controller. The controller handles the external and internal queries, the displaying of results, and any exception handling and informational messages.

To adjust the styles applied within the search please make all changes in search.scss.

Header

Two main sections of importance:

  1. The site title/logo
  2. The site navigation

The site logo can be found in the main template and is currently referencing FedRAMP Logo which redirects the user to www.fedramp.gov if clicked.

<div id="header" class="clearfix">
    <div id="head-content" class="clearfix">
        <!-- SITE-TITLE/LOGO -->
        <div id="sitetitle">
            <a href="https://www.fedramp.gov" title="FedRAMP"><img src="https://fedramp.sites.usa.gov/files/2015/02/logo3.png" alt="FedRAMP"></a>
        </div>

        <!-- SECONDARY NAVIGATION -->
        <navigation />
    </div>
</div>

The navigation component template is created with multiple layers of unordered lists for each subsequent submenu. An example of this format which would be nested

<div id="catnav" class="hidden-print">
    <!-- Other menu items -->
    <li class="dropdown">
        <a href="#" title="Marketplace">Marketplace</a>
        <ul class="dropdown-content down">
            <li><a href="https://www.fedramp.gov/marketplace/compliant-systems/" title="FedRAMP Compliant Systems">FedRAMP Compliant Systems</a></li>
            <li><a href="https://www.fedramp.gov/marketplace/in-process-systems/" title="FedRAMP In-Process Systems">FedRAMP In-Process Systems</a></li>
            <li><a href="https://www.fedramp.gov/marketplace/fedramp-ready-systems/" title="FedRAMP Ready Systems">FedRAMP Ready Systems</a></li>
            <li><a href="https://www.fedramp.gov/marketplace/accredited-3paos/" title="Accredited 3PAOs">Accredited 3PAOs</a></li>
        </ul>
    </li>
    <!-- Other menu items -->
</ul>

To adjust the styles applied within the header please make all changes in header.scss.

Footer

The footer section can be referenced in the main template within the element

<footer class="usa-footer ..." role="contentinfo"><!-- Footer elements --></footer>

The footer has been divided into three (3) sections:

  1. Contact Information
  2. Twitter
  3. Subscribe to Updates

The contact information and subscription sections are basic HTML and can be modified directly. However, the Twitter section required customization found in the Twitter component. This piece was separated due to how AngularJS does not render certain potentially unsafe elements found within views. In order to circumvent this we load the necessary JavaScript dynamically

let script = document.createElement('script');
script.async = 'async';
script.src = 'https://platform.twitter.com/widgets.js';
script.charset = 'utf-8';
document.body.appendChild(script);

To adjust the styles applied within the footer please make all changes in footer.scss.

Getting to know the code

Clone all things

First you are going to want to clone the repository

git clone https://github.com/18F/fedramp-dashboard.git

Checking dependencies

For quick development we use npm. Once this has been installed we execute a single command:

npm install

Building the application

Compiling all of the assets can be done simply using the command:

npm run build

This will compile JavaScript, SASS, and place all files where they need to be. Both versions of JavaScript files (minified and not) are preserved.

Running a local server

To run a local server we issue the command:

npm start

Then direct your browser at http://localhost:8080

Executing tests and coverage reports

To make a single pass through the test suite use the command:

npm test

The individual test results will be seen in the output, and the coverage results may be viewed after running npm start at http://localhost:8080/coverage

In-browser test results and coverage can be accessed at https://18F.github.io/fedramp-dashboard/test

Note the dist/coverage/ directory and associated files are not created until the test have been ran.

Packaging Application

To package up the application, use the command:

npm run package

This will generate the following file structure:

dist/
   css/
   fonts/
   img/
   fedramp.min.js
   index.html

where

  • css/ contains the production ready stylesheets
  • fonts/ contains the fonts used in the application
  • img/ contains the images used in the application

Generating Documentation

This project utilizes JSDoc 3 to generate and render Javascript documentation artifacts. An npm script docgen is included that triggers the generation of these artifacts and then stores them in the doc/ directory.

To generate the JSDoc, execute the following:

npm run docgen

The script specifically executes the following:

./node_modules/.bin/jsdoc ./src/ -r -d ./doc --readme README.md

Tooling

Linters

For Ninjas (Vim) just install syntastic and everything should be handled. For Pirates (Emacs) just install flycheck and everything should be handled.

For command-line alternatives there are the following:

  • For JavaScript, JSHint which may be installed with npm install -g jshint
  • For HTML, html-lint which may be installed with npm install -g html-lint

Testing

The testing framework will be written in Jasmine. Various runners may be used:

  • The in-browser runner
  • Karma is a command-line test runner

For code coverage we can leverage the following:

  • For in-browser coverage analysis we use BlanketJS
  • Karma Coverage is a plug-in which may be used in tandem with the Karma test runner

fedramp-dashboard's People

Contributors

afeld avatar bmallred avatar chettwillighan avatar dependabot[bot] avatar echappen avatar elizap55 avatar floresj avatar jcscottiii avatar jmhooper avatar joeignition avatar johnwhamilton avatar jposi avatar jseppi avatar konklone avatar mbrigantic avatar michaelfrising avatar noahkunin avatar pjsumm avatar rhoesing avatar saralherbst avatar saydlette avatar stvnrlly avatar thecapacity avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fedramp-dashboard's Issues

Enhancement Request: Add "Include in Marketplace" Filter in JSON Extract

Description: Currently, the JSON extracts all rows from the Authorization Log which are Active. The JSON should also filter out (i.e., exclude) any rows where "Include In MarketplaceYN?" field = "N".
Need: Currently, the only way to make a CSP not appear in the Marketplace is to make it Inactive. The Include In MarketplaceYN? field was created to CSPs with active ATOs can be excluded temporarily from Marketplace without changing their Active-Inactive status.
Source: FedRAMP PMO.
Priority: Low.

Total Authorization Count by Package ID not name

In reviewing the
https://github.com/truetandem/fedramp-dashboard/blob/master/src/fedramp/home/home.controller.js#L322

I think that line 322 would probably be if (p.pkgId && !counted.includes(p.pkgId)) { as companies such as Microsoft, have multiple products although the same provider name.

I also believe that provider.length probably is sufficient to get this as the groupby function in the .gs script is by package id, but you might want to retain this to confirm.

Below is the full function for reference.

        self.totalAuthorized = function () {
            var totalAuthorized = 0;

            var counted = [];
            for (var i = 0; i < providers.length; i++) {
                var p = providers[i];
                if (p.name && !counted.includes(p.name)) {
                    counted.push(p.name);
                    totalAuthorized++;
                }
            }

            return totalAuthorized;
        };

Blanket.js coverage

I am seeing in the jasmine test runner that Blanket.js is putting the coverage of fedramp.js at 72% while Coveralls is stating closer to 90%. It looks like blanket is a bit more strict on whether the code hits object properties, but I was curious about the difference to your knowledge in the coverage calculations.
http://truetandem.github.io/fedramp-dashboard/test/

Documentation - PWS Compliance

README.md

Contributing.md

Deployment to S3

It was discussed to possibly leverage S3 to host the static files. This would be beneficial since the Sites hosting is done through WordPress and it would allow various environments (staging, production, etc.) to be configured.

CSS Issue on Landing Page

Looks like there is an issue with the CSS on the landing page. Search box should not be above the rest of the header, but to the right of it. I'm on Chrome 51.

screen shot 2016-07-18 at 3 33 07 pm

Sitemap is not in a machine readable format

What did you do?
I looked for a sitemap at the root level: https://marketplace.fedramp.gov/sitemap.xml and it came back as a 404-not found.

I was able to find a sitemap.xml within the client side application at https://marketplace.fedramp.gov/#/sitemap.xml. It appears to be an html website with the xml for a sitemap embedded in the body. That isn't the required format for a legal xml sitemap.

Just to be sure I ran the pa11y-ci script against it to see if it was readable:

pa11y-ci --sitemap=https://marketplace.fedramp.gov/#/sitemap.xml

It wasn't able to parse the xml data within the html page.

What did you expect to see?
I expected to see a xml page at https://marketplace.fedramp.gov/sitemap.xml
I also expected that page to be a legal top-to-bottom xml sitemap.

What did you see instead?
I was able to look through the code and find a mutated sitemap at a client-side path for the sitemap: https://marketplace.fedramp.gov/#/sitemap.xml

The format of the sitemap was an html page with the xml report embedded in the body. It is a format not parsable my sitemap readers.

Increasing Test Coverage - Recommended

While we did not explicitly state in the QASP, we would prefer that you expand your test coverage so that the lcov report generated at http://localhost:8080/coverage/ so that the test suite will cover 90% of statements of code. The current metric that Coveralls uses is lines.

As of earlier today (commit a775309), tests hit 1596/1812 statements (88.08%). We recognize that you have achieved the 90% in terms of lines (471/476).

Moving to 90% statement coverage will help us ensure that future enhancements will be less likely to break our test suite.

A test fails when running locally

Hey Team-

Minor issue when I was getting things set up, on following the directions (npm install && npm test), I get a error on one of the tests:

PhantomJS 2.1.1 (Mac OS X 0.0.0) The helper service can convert date to mm/dd/YYYY FAILED
    Expected '08/22/2013' to be '08/23/2013'.
    /Users/anthonygarvan/Documents/Projects/fedramp-dashboard/test/fedramp.services/helper.service.test.js:18:64

I'm on node 4.1.0 and npm 2.14.4.

508 Compliance Errors - PWS Compliance

  • Code Sniffer is giving the error for the Contact Information header in the footer, saying “The heading structure is not logically nested. This h3 element appears to be the primary document heading, so should be an h1 element.” Let’s discuss in our standup.
  • The other 508 errors seem to arise from the Twitter embed. Please swap out the Twitter iFrame with current User timeline as listed in the following docs:
    https://dev.twitter.com/web/embedded-timelines/user
    https://dev.twitter.com/web/embedded-timelines

Sprint 2 acceptance

18F accepts the work done by True Tandem, with a note of the following issues that require resolution/conversation next week:
#12
#11
#10

Use Git Subtree to build gh-pages branch - Nice to Have

Consider just pushing just the build/dest directory built via the npm run package to the gh-pages by using git subtree.

This would to allow us to have a development environment on gh-pages that more closely reflects the build/dest that the production environment runs on.

For documentation on this please see:
https://makingsoftware.wordpress.com/2013/02/16/using-git-subtrees-for-repository-separation/

https://gist.github.com/cobyism/4730490

Update Gulp Task - Recommended

To improve load performance of the production site we recommend that you alter a number of the tasks performed in the npm run package gulp script.

  • Minify CSS for the build/dest
  • Bundle the js libs into the minified fedramp.min.js in build/dest. This would make it so you wouldn't need the separate lib, build/lib, or build/dest/lib directories and would then only require the site to load 1 js file.
  • Change the copy fonts, img task to just copy these directories from the node_modules/uswds/dist directories. Then remove the directories from the committed repository.
  • When the npm run package is run do not copy unminified fedramp.js to build/dest

Enhancement Request: Support Keyword Search in Service Description

Description: Add the ability to do keyword searches of the Service Description.
Need: Currently, if a user is interested in finding all office automation cloud products, for example, there is no way to do this. A key word search of the Service Description, while not perfect, would provide this capability.
Source: Several CSPs have requested this capability via [email protected].
Priority: Low.

Use Case: Suspended Vendors

New use case:
When a vendor is suspended or loses FedRAMP (or Agency) authorization, what data field should be updated? How do we want this to display?

Remove alpha link from header banner

Describe the desired behavior and what would deem this issue, bug, or feature
complete.

Link in banner is dead. Remove the URL

What did you see instead?
a 404 when you click the link.

Integration with OpenControl

As the OpenControl project matures, it would be great to identify ways to further integrate the FedRAMP Marketplace with the various OpenControl implementations that are out there. This could be something as simple as a Supports OpenControl filter in the product listing, with a link to the repository if made publicly available. ... i.e. I select 18F Cloud.gov from Marketplace and there is a link to https://github.com/18F/cg-compliance.

For those of us in the industry leveraging OpenControl for our own product stacks, some sort of flow from P-ATO IaaS/PaaS/SaaS in Marketplace -> Vendor's OpenControl implementation could be beneficial. With the recent announcement of FedRAMP Tailored, this could become even more helpful for vendors and agencies alike.

represent FedRAMP Tailored more explicitly

What did you do?

I wanted to see the products going through FedRAMP Tailored. Went to the Marketplace to see if there was a filter for this.

What did you expect to see?

A filter for "Tailored".

What did you see instead?

No mention of "Tailored", but filter for "LISaaS", which from insider knowledge I could assume was the same thing.

Match styling to fedramp.gov

Description

Match styling of header of marketplace.fedramp.gov to headers of fedramp.marketplace.gov to keep consistency between pages.

Ask

Add:

  • Add Social Media Icons
  • Add "contact us" link
  • Shift navigation bar to be inline with FedRAMP logo as it is on fedramp.gov
  • Have "Marketplace" link be active on navigation bar (throughout dashboard)

Additional info
Here's an image of the fedramp.gov site:
screen shot 2016-08-09 at 5 00 04 pm

Break Taiga webhooks

What did you do?

Received email notices about new issues posted to 18F owned repository via Taiga web hooks.

Including steps for recreating it, if applicable.

Post issue at 18F/fedramp-dashboard
Drink coffee
Check issues on https://tree.taiga.io/project/truetandem-fedramp-dashboard/issues?page=1

What did you expect to see?

Describe the desired behavior and what would deem this issue, bug, or feature
complete.

Issues do not get posted on Taiga

Remove jquery from project

It looks like you have evolved from using jquery to angular, but jquery is still present in your package.json and you are still fetching it on page load. Unless you are in fact using it in some place I couldn't find, you should remove those artifacts.

Acceptance of Sprint 0

Per the user stories completed as documented in this google doc and on Taiga, 18F and FedRAMP accept the work of TrueTandem in Sprint 0.

Great work - excited to see what happens in Sprint 1!

When filtering by agency, CSPs with 0 authorizations are also displayed

What did you do?

Filter on Agency = Department of Energy

What did you expect to see?

I did not expect to see Adobe Sign.

What did you see instead?

Adobe Sign

Additional Information

According to data.json, Adobe Sign has no Leveraged_ATO_Letters.

  • What browser and version are you using? Firefox :)
  • What operating system? Debian Linux

Enhancement Request: For In-Process packages, change header for Agency listing

Description: For In-Process packages, at the bottom of the window is listed the Agency that the CSP is working with. However, the column header here says "Agencies Using Package." For In Process packages, it would be clearer and more accurate if the column header said instead "Agencies Evaluating Package."
Need: Improves clarity by stating that an Agency is evaluating the package vs. using it.
Source: FedRAMP PMO.
Priority: Low.

reconcile branches

federalist is currently the default branch, but master still exists and seems to have some changes that aren't on federalist. Recommend steps:

  • Merge federalist into master
  • Change the Federalist settings to use master
  • Delete federalist branch

Move to a new CI/CD system

This repository has been using Travis CI, however access to Travis CI is now turning off. When you need to use this repository again, convert it to a CI/CD system which is in the ITSP such as Circle CI.

Moving component template html files into own directory

This is just a suggestion, but it seems like for clarity, it might sense to move the component templates in the [src/fedramp.components](https://github.com/truetandem/fedramp-dashboard/tree/master/src/fedramp.components) into their own subdirectory for easier navigation of this directory.

Micropurchase: Account for underlying and dependent products in agency and product listings

Background

The FedRAMP marketplace is an Angular JS static site that relies on data pulled in via the Github api. This task seeks to update the product and agency listing pages in the site by modifying the controller.

Current State

Currently, when a user visits an Agency Page (i.e. NSF), in the list of Products Used only products that directly are listed in the data JSON.

For some products there are underlying products and dependent products (For instance an infrastructure product that is used by a SaaS product). In the product listing, there is a list of Dependent Products, which lists the products that leverage the product authorization. For example, Datapipe lists Accenture as a dependent product.

What we are asking

We would like to display the agency and product relationships for the underlying products in the agency and product page listings, and for the number of products used in per agency to reflect this change.

Specific Acceptance Criteria

  • Update the Product Page
    • When a user clicks on a product page listing of a product that has a dependent product,
      Then they should see a list of the Agencies using this Service, that includes the agencies using the dependent product.
    • For example, for the Datapipe page should list the National Science Foundation because its dependent product is used by that agency.
  • Update the Agency Page
    • When a user clicks on a agency page listing page,
      And that agency uses a product with is a dependent product of another product,
      Then the list Products Used should list by company any products that are used including those that are underlying products of any of the directly used products.
    • For example, for the NSF page, Datapipe Government Solutions Federal Community Cloud Platform should be listed under the header Datapipe Government Solutions
  • Update the "Number of Products Used" for Agencies
    • Update count (everywhere it shown) of Products Used for every agency that uses products that are dependents of another, to include the additional underlying products.
    • For example, the National Science Foundation should say that it uses 5 products.

General Acceptance Criteria

All new functionality does not degrade code climate rating.
All new functionality will be covered by new unit tests.
There will be no decrease in test coverage.
Tests run on Travis-CI and do not break the build.
New features do not degrade accessibility (use pa11y/HTML Code Sniffer).

Streamline Repository Directory Organization - Recommended

Some of the directory organization could be streamlined to make the src => build/dest pipeline more fluid. Many of these tasks would be contingent on reworking the Gulp tasks outlined in #29.

  • Add dist to git ignore.* It looks like lib, dist, css are artifacts of the test suite and the gulp build process, and should be added to the .gitignore, as they do not need to be committed.
  • Move sass in to src* to make it clear that that is compiled in the build process.
  • Move the index.html into src as well. This would likely require an update to the Gulp script.

Integrate CI with continua11y

18F would like the project to integrate with continua11y. Possible TravisCI modification

after_script:
- npm install -g pa11y-crawl
- pa11y-crawl --ci http://localhost:PORT

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.