From 05277cfebf9dde22e08eeae286930a2aa9c11219 Mon Sep 17 00:00:00 2001 From: Ryon Coleman Date: Fri, 27 Jan 2017 15:41:09 -0500 Subject: [PATCH 001/127] Add Google Tag Manager #GTM-NR2SD7C --- website/source/layouts/_meta.erb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/website/source/layouts/_meta.erb b/website/source/layouts/_meta.erb index 283afb6612..a336409dd7 100644 --- a/website/source/layouts/_meta.erb +++ b/website/source/layouts/_meta.erb @@ -15,7 +15,19 @@ <%= javascript_include_tag "html5shiv", "respond.min" %> + + + + <%= yield_content :head %> " class="page-<%= current_page.data.page_title ? "#{current_page.data.page_title} layout-#{current_page.data.layout} page-sub" : "home layout-#{current_page.data.layout}" %>"> + + + From 9ee0c3417959e1fb7ff96fe8d0a719cdc4454790 Mon Sep 17 00:00:00 2001 From: Brian Kassouf Date: Fri, 3 Mar 2017 14:50:55 -0800 Subject: [PATCH 002/127] Allowed/Denied parameters support for globs (#2438) * Add check for globbed strings * Add tests for the acl globbing * Fix bad test case --- helper/strutil/strutil.go | 19 ++++++++++++++++++ helper/strutil/strutil_test.go | 36 ++++++++++++++++++++++++++++++++++ vault/acl.go | 10 +++++++++- vault/acl_test.go | 8 ++++++-- 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/helper/strutil/strutil.go b/helper/strutil/strutil.go index d079b9cb92..0d418016a1 100644 --- a/helper/strutil/strutil.go +++ b/helper/strutil/strutil.go @@ -255,3 +255,22 @@ func StrListDelete(s []string, d string) []string { return s } + +func GlobbedStringsMatch(item, val string) bool { + if len(item) < 2 { + return val == item + } + + hasPrefix := strings.HasPrefix(item, "*") + hasSuffix := strings.HasSuffix(item, "*") + + if hasPrefix && hasSuffix { + return strings.Contains(val, item[1:len(item)-1]) + } else if hasPrefix { + return strings.HasSuffix(val, item[1:]) + } else if hasSuffix { + return strings.HasPrefix(val, item[:len(item)-1]) + } + + return val == item +} diff --git a/helper/strutil/strutil_test.go b/helper/strutil/strutil_test.go index f818a26723..85ccd8b4c0 100644 --- a/helper/strutil/strutil_test.go +++ b/helper/strutil/strutil_test.go @@ -279,3 +279,39 @@ $$`, t.Fatalf("bad: expected:\n%#v\nactual:\n%#v", jsonExpected, actual) } } + +func TestGlobbedStringsMatch(t *testing.T) { + type tCase struct { + item string + val string + expect bool + } + + tCases := []tCase{ + tCase{"", "", true}, + tCase{"*", "*", true}, + tCase{"**", "**", true}, + tCase{"*t", "t", true}, + tCase{"*t", "test", true}, + tCase{"t*", "test", true}, + tCase{"*test", "test", true}, + tCase{"*test", "a test", true}, + tCase{"test", "a test", false}, + tCase{"*test", "tests", false}, + tCase{"test*", "test", true}, + tCase{"test*", "testsss", true}, + tCase{"test**", "testsss", false}, + tCase{"test**", "test*", true}, + tCase{"**test", "*test", true}, + tCase{"TEST", "test", false}, + tCase{"test", "test", true}, + } + + for _, tc := range tCases { + actual := GlobbedStringsMatch(tc.item, tc.val) + + if actual != tc.expect { + t.Fatalf("Bad testcase %#v, expected %b, got %b", tc, tc.expect, actual) + } + } +} diff --git a/vault/acl.go b/vault/acl.go index 81d6a978c8..550e0df029 100644 --- a/vault/acl.go +++ b/vault/acl.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/armon/go-radix" + "github.com/hashicorp/vault/helper/strutil" "github.com/hashicorp/vault/logical" ) @@ -348,7 +349,14 @@ func valueInParameterList(v interface{}, list []interface{}) bool { func valueInSlice(v interface{}, list []interface{}) bool { for _, el := range list { - if reflect.DeepEqual(el, v) { + if reflect.TypeOf(el).String() == "string" && reflect.TypeOf(v).String() == "string" { + item := el.(string) + val := v.(string) + + if strutil.GlobbedStringsMatch(item, val) { + return true + } + } else if reflect.DeepEqual(el, v) { return true } } diff --git a/vault/acl_test.go b/vault/acl_test.go index 61ce4590cd..7eb45b8b43 100644 --- a/vault/acl_test.go +++ b/vault/acl_test.go @@ -366,6 +366,7 @@ func TestACL_ValuePermissions(t *testing.T) { {"dev/ops", []string{"allow"}, []interface{}{"good"}, true}, {"dev/ops", []string{"allow"}, []interface{}{"bad"}, false}, {"foo/bar", []string{"deny"}, []interface{}{"bad"}, false}, + {"foo/bar", []string{"deny"}, []interface{}{"bad glob"}, false}, {"foo/bar", []string{"deny"}, []interface{}{"good"}, true}, {"foo/bar", []string{"allow"}, []interface{}{"good"}, true}, {"foo/baz", []string{"aLLow"}, []interface{}{"good"}, true}, @@ -379,6 +380,9 @@ func TestACL_ValuePermissions(t *testing.T) { {"fizz/buzz", []string{"allow_multi"}, []interface{}{"good"}, true}, {"fizz/buzz", []string{"allow_multi"}, []interface{}{"good1"}, true}, {"fizz/buzz", []string{"allow_multi"}, []interface{}{"good2"}, true}, + {"fizz/buzz", []string{"allow_multi"}, []interface{}{"glob good2"}, false}, + {"fizz/buzz", []string{"allow_multi"}, []interface{}{"glob good3"}, true}, + {"fizz/buzz", []string{"allow_multi"}, []interface{}{"bad"}, false}, {"fizz/buzz", []string{"allow_multi"}, []interface{}{"bad"}, false}, {"fizz/buzz", []string{"allow_multi", "allow"}, []interface{}{"good1", "good"}, true}, {"fizz/buzz", []string{"deny_multi"}, []interface{}{"bad2"}, false}, @@ -686,7 +690,7 @@ path "dev/*" { path "foo/bar" { policy = "write" denied_parameters = { - "deny" = ["bad"] + "deny" = ["bad*"] } } path "foo/baz" { @@ -701,7 +705,7 @@ path "foo/baz" { path "fizz/buzz" { policy = "write" allowed_parameters = { - "allow_multi" = ["good", "good1", "good2"] + "allow_multi" = ["good", "good1", "good2", "*good3"] "allow" = ["good"] } denied_parameters = { From 2f1aed5500565bf23b0eed92047f307f2261d766 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Sat, 4 Mar 2017 10:21:13 -0500 Subject: [PATCH 003/127] Fix poison pill location --- vault/core.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/vault/core.go b/vault/core.go index ea378fa8ad..396a2bc16e 100644 --- a/vault/core.go +++ b/vault/core.go @@ -1534,6 +1534,16 @@ func (c *Core) periodicCheckKeyUpgrade(doneCh, stopCh chan struct{}) { continue } + // Check for a poison pill. If we can read it, it means we have stale + // keys (e.g. from replication being activated) and we need to seal to + // be unsealed again. + entry, _ := c.barrier.Get(poisonPillPath) + if entry != nil && len(entry.Value) > 0 { + c.logger.Warn("core: encryption keys have changed out from underneath us (possibly due to replication enabling), must be unsealed again") + go c.Shutdown() + continue + } + if err := c.checkKeyUpgrades(); err != nil { c.logger.Error("core: key rotation periodic upgrade check failed", "error", err) } @@ -1550,16 +1560,6 @@ func (c *Core) checkKeyUpgrades() error { // Check for an upgrade didUpgrade, newTerm, err := c.barrier.CheckUpgrade() if err != nil { - // The problem might be that we can't decrypt the value, e.g. if - // replication has been turned on, so check to see if a poison pill - // was written. If we can read it, it means we have stale keys and - // we need to seal to be unsealed again. - entry, _ := c.barrier.Get(poisonPillPath) - if entry != nil && len(entry.Value) > 0 { - c.logger.Warn("core: encryption keys have changed out from underneath us (possibly due to replication enabling), must be unsealed again") - go c.Shutdown() - return nil - } return err } From aecb5cbd3412a954021c202fb8291f1aea6c9712 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Sat, 4 Mar 2017 16:35:41 -0500 Subject: [PATCH 004/127] Add some nil checks to mounting --- vault/audit.go | 14 ++++++++++++-- vault/auth.go | 19 +++++++++++++++---- vault/mount.go | 22 +++++++++++++++------- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/vault/audit.go b/vault/audit.go index 46e789dfb3..939184369c 100644 --- a/vault/audit.go +++ b/vault/audit.go @@ -87,6 +87,9 @@ func (c *Core) enableAudit(entry *MountEntry) error { if err != nil { return err } + if backend == nil { + return fmt.Errorf("nil audit backend of type %q returned from factory", entry.Type) + } newTable := c.audit.shallowClone() newTable.Entries = append(newTable.Entries, entry) @@ -300,14 +303,18 @@ func (c *Core) setupAudits() error { view := NewBarrierView(c.barrier, viewPath) // Initialize the backend - audit, err := c.newAuditBackend(entry, view, entry.Options) + backend, err := c.newAuditBackend(entry, view, entry.Options) if err != nil { c.logger.Error("core: failed to create audit entry", "path", entry.Path, "error", err) continue } + if backend == nil { + c.logger.Error("core: created audit entry was nil", "path", entry.Path, "type", entry.Type) + continue + } // Mount the backend - broker.Register(entry.Path, audit, view) + broker.Register(entry.Path, backend, view) successCount += 1 } @@ -376,6 +383,9 @@ func (c *Core) newAuditBackend(entry *MountEntry, view logical.Storage, conf map if err != nil { return nil, err } + if be == nil { + return nil, fmt.Errorf("nil backend returned from %q factory function", entry.Type) + } switch entry.Type { case "file": diff --git a/vault/auth.go b/vault/auth.go index 8380dbbe83..c3197bce2c 100644 --- a/vault/auth.go +++ b/vault/auth.go @@ -91,6 +91,9 @@ func (c *Core) enableCredential(entry *MountEntry) error { if err != nil { return err } + if backend == nil { + return fmt.Errorf("nil backend returned from %q factory", entry.Type) + } if err := backend.Initialize(); err != nil { return err @@ -151,6 +154,12 @@ func (c *Core) disableCredential(path string) (bool, error) { return true, err } + // Call cleanup function if it exists + backend := c.router.MatchingBackend(fullPath) + if backend != nil { + backend.Cleanup() + } + // Unmount the backend if err := c.router.Unmount(fullPath); err != nil { return true, err @@ -386,6 +395,9 @@ func (c *Core) setupCredentials() error { c.logger.Error("core: failed to create credential entry", "path", entry.Path, "error", err) return errLoadAuthFailed } + if backend == nil { + return fmt.Errorf("nil backend returned from %q factory", entry.Type) + } if err := backend.Initialize(); err != nil { return err @@ -430,10 +442,9 @@ func (c *Core) teardownCredentials() error { if c.auth != nil { authTable := c.auth.shallowClone() for _, e := range authTable.Entries { - prefix := e.Path - b, ok := c.router.root.Get(prefix) - if ok { - b.(*routeEntry).backend.Cleanup() + backend := c.router.MatchingBackend(credentialRoutePrefix + e.Path) + if backend != nil { + backend.Cleanup() } } } diff --git a/vault/mount.go b/vault/mount.go index c03c560e38..da0f66ed07 100644 --- a/vault/mount.go +++ b/vault/mount.go @@ -212,6 +212,9 @@ func (c *Core) mount(entry *MountEntry) error { if err != nil { return err } + if backend == nil { + return fmt.Errorf("nil backend of type %q returned from creation function", entry.Type) + } // Call initialize; this takes care of init tasks that must be run after // the ignore paths are collected @@ -283,9 +286,9 @@ func (c *Core) unmount(path string) (bool, error) { } // Call cleanup function if it exists - b, ok := c.router.root.Get(path) - if ok { - b.(*routeEntry).backend.Cleanup() + backend := c.router.MatchingBackend(path) + if backend != nil { + backend.Cleanup() } // Unmount the backend entirely @@ -638,6 +641,9 @@ func (c *Core) setupMounts() error { c.logger.Error("core: failed to create mount entry", "path", entry.Path, "error", err) return errLoadMountsFailed } + if backend == nil { + return fmt.Errorf("created mount entry of type %q is nil", entry.Type) + } if err := backend.Initialize(); err != nil { return err @@ -680,10 +686,9 @@ func (c *Core) unloadMounts() error { if c.mounts != nil { mountTable := c.mounts.shallowClone() for _, e := range mountTable.Entries { - prefix := e.Path - b, ok := c.router.root.Get(prefix) - if ok { - b.(*routeEntry).backend.Cleanup() + backend := c.router.MatchingBackend(e.Path) + if backend != nil { + backend.Cleanup() } } } @@ -712,6 +717,9 @@ func (c *Core) newLogicalBackend(t string, sysView logical.SystemView, view logi if err != nil { return nil, err } + if b == nil { + return nil, fmt.Errorf("nil backend of type %q returned from factory", t) + } return b, nil } From 68529eedd4f631e51dedcc8f94ed8747917ddf87 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Sat, 4 Mar 2017 16:59:00 -0500 Subject: [PATCH 005/127] Fix dynamo test that can double close a channel --- physical/dynamodb_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/physical/dynamodb_test.go b/physical/dynamodb_test.go index d4efcef4c9..daac8c873f 100644 --- a/physical/dynamodb_test.go +++ b/physical/dynamodb_test.go @@ -198,13 +198,12 @@ func testDynamoDBLockTTL(t *testing.T, ha HABackend) { // The first lock should have lost the leader channel leaderChClosed := false blocking := make(chan struct{}) - time.AfterFunc(watchInterval*3, func() { - close(blocking) - }) // Attempt to read from the leader or the blocking channel, which ever one // happens first. go func() { select { + case <-time.After(watchInterval * 3): + return case <-leaderCh: leaderChClosed = true close(blocking) From 3445b3ae6368a48e2111f65d833e792e4e9746d1 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 6 Mar 2017 15:39:34 +0000 Subject: [PATCH 006/127] Updated doc to match real output (#2443) Regards hashicorp/vault#2116 --- website/source/docs/commands/read-write.html.md | 8 ++++---- .../intro/getting-started/dynamic-secrets.html.md | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/website/source/docs/commands/read-write.html.md b/website/source/docs/commands/read-write.html.md index 0b0ff07bb2..b0553eda0c 100644 --- a/website/source/docs/commands/read-write.html.md +++ b/website/source/docs/commands/read-write.html.md @@ -101,10 +101,10 @@ Data can be read using `vault read`. This command is very simple: ``` $ vault read secret/password -Key Value -lease_id secret/password/76c844fb-aeba-a766-0a50-2b907072233a -lease_duration 2764800 -value itsasecret +Key Value +--- ----- +refresh_interval 768h0m0s +value itsasecret ``` You can use the `-format` flag to get various different formats out diff --git a/website/source/intro/getting-started/dynamic-secrets.html.md b/website/source/intro/getting-started/dynamic-secrets.html.md index 2b95facc62..2aa1099710 100644 --- a/website/source/intro/getting-started/dynamic-secrets.html.md +++ b/website/source/intro/getting-started/dynamic-secrets.html.md @@ -124,10 +124,14 @@ special path `aws/creds/` where `NAME` is the role name: ``` $ vault read aws/creds/deploy -Key Value -lease_id aws/creds/deploy/0d042c53-aa8a-7ce7-9dfd-310351c465e5 -access_key AKIAJFN42DVCQWDHQYHQ -secret_key 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 +Key Value +--- ----- +lease_id aws/creds/deploy/0d042c53-aa8a-7ce7-9dfd-310351c465e5 +lease_duration 768h0m0s +lease_renewable true +access_key AKIAJFN42DVCQWDHQYHQ +secret_key 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 +security_token ``` Success! The access and secret key can now be used to perform any EC2 From c2bd662386bcb54ebc9378ad5b2567d919e91a9f Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Mon, 6 Mar 2017 13:11:14 -0500 Subject: [PATCH 007/127] Switch physical cache map index value to md5 from sha1 for all the performances --- physical/cache.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physical/cache.go b/physical/cache.go index 96f2586f31..5f3e81e915 100644 --- a/physical/cache.go +++ b/physical/cache.go @@ -1,7 +1,7 @@ package physical import ( - "crypto/sha1" + "crypto/md5" "encoding/hex" "fmt" "strings" @@ -59,7 +59,7 @@ func NewCache(b Backend, size int, logger log.Logger) *Cache { } func (c *Cache) lockHashForKey(key string) string { - hf := sha1.New() + hf := md5.New() hf.Write([]byte(key)) return strings.ToLower(hex.EncodeToString(hf.Sum(nil))[:2]) } From 4f5f1e7a524cebda7fe9536023b91a308ccf640c Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Fri, 3 Mar 2017 11:51:49 -0500 Subject: [PATCH 008/127] Unify layout partials --- website/config.rb | 58 ++++++ website/helpers/sidebar_helpers.rb | 12 -- .../hashicorp-shared/_hashicorp-sidebar.scss | 21 +- website/source/layouts/_announcement-bnr.erb | 18 -- website/source/layouts/_footer.erb | 87 -------- website/source/layouts/_header.erb | 38 ---- website/source/layouts/_meta.erb | 25 --- website/source/layouts/_sidebar.erb | 35 ++-- website/source/layouts/layout.erb | 186 +++++++++++++++++- 9 files changed, 257 insertions(+), 223 deletions(-) delete mode 100644 website/helpers/sidebar_helpers.rb delete mode 100644 website/source/layouts/_announcement-bnr.erb delete mode 100644 website/source/layouts/_footer.erb delete mode 100644 website/source/layouts/_header.erb delete mode 100644 website/source/layouts/_meta.erb diff --git a/website/config.rb b/website/config.rb index 5e6629ca4e..e0164d4304 100644 --- a/website/config.rb +++ b/website/config.rb @@ -6,3 +6,61 @@ activate :hashicorp do |h| h.github_slug = "hashicorp/vault" h.website_root = "website" end + +helpers do + # Get the title for the page. + # + # @param [Middleman::Page] page + # + # @return [String] + def title_for(page) + if page && page.data.page_title + return "#{page.data.page_title} - Vault by HashiCorp" + end + + "Vault by HashiCorp" + end + + # Get the description for the page + # + # @param [Middleman::Page] page + # + # @return [String] + def description_for(page) + return escape_html(page.data.description || "") + end + + # This helps by setting the "active" class for sidebar nav elements + # if the YAML frontmatter matches the expected value. + def sidebar_current(expected) + current = current_page.data.sidebar_current || "" + if current.start_with?(expected) + return " class=\"active\"" + else + return "" + end + end + + # Returns the id for this page. + # @return [String] + def body_id_for(page) + if name = page.data.sidebar_current && !name.blank? + return "page-#{name.strip}" + end + return "page-home" + end + + # Returns the list of classes for this page. + # @return [String] + def body_classes_for(page) + classes = [] + + if page && page.data.layout + classes << "layout-#{page.data.layout}" + end + + classes << "-displaying-bnr" + + return classes.join(" ") + end +end diff --git a/website/helpers/sidebar_helpers.rb b/website/helpers/sidebar_helpers.rb deleted file mode 100644 index 124a7c53c6..0000000000 --- a/website/helpers/sidebar_helpers.rb +++ /dev/null @@ -1,12 +0,0 @@ -module SidebarHelpers - # This helps by setting the "active" class for sidebar nav elements - # if the YAML frontmatter matches the expected value. - def sidebar_current(expected) - current = current_page.data.sidebar_current || "" - if current.start_with?(expected) - return " class=\"active\"" - else - return "" - end - end -end diff --git a/website/source/assets/stylesheets/hashicorp-shared/_hashicorp-sidebar.scss b/website/source/assets/stylesheets/hashicorp-shared/_hashicorp-sidebar.scss index 99f77f6c52..a8564f209f 100644 --- a/website/source/assets/stylesheets/hashicorp-shared/_hashicorp-sidebar.scss +++ b/website/source/assets/stylesheets/hashicorp-shared/_hashicorp-sidebar.scss @@ -143,11 +143,11 @@ $sidebar-icon-height: 20px; } .sidebar-image { - padding-top: 24px; - img { - display: block; - margin: 0 auto; - } + background-image: image-url('logo-header.svg'); + background-position: center center; + background-repeat: no-repeat; + height: 72px; + margin-top: 24px; } @@ -250,17 +250,6 @@ $sidebar-icon-height: 20px; min-width: $sidebar-width; width: $sidebar-width; } - - .sidebar .sidebar-header { - //height: $sidebar-width * 9/16; // 16:9 header dimension - } - - .sidebar .sidebar-image { - /* img { - width: $sidebar-width/4 - $sidebar-padding; - height: $sidebar-width/4 - $sidebar-padding; - } */ - } } .sidebar-overlay { diff --git a/website/source/layouts/_announcement-bnr.erb b/website/source/layouts/_announcement-bnr.erb deleted file mode 100644 index 77bf4f0dc9..0000000000 --- a/website/source/layouts/_announcement-bnr.erb +++ /dev/null @@ -1,18 +0,0 @@ -
-
-
-
-

- Announcing - - Secure Infrastructure Automation. - - Find out more - -

-
-
-
-
diff --git a/website/source/layouts/_footer.erb b/website/source/layouts/_footer.erb deleted file mode 100644 index cd983f0183..0000000000 --- a/website/source/layouts/_footer.erb +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - -<%= javascript_include_tag "application" %> - - - - - diff --git a/website/source/layouts/_header.erb b/website/source/layouts/_header.erb deleted file mode 100644 index 88d6ae38e0..0000000000 --- a/website/source/layouts/_header.erb +++ /dev/null @@ -1,38 +0,0 @@ - diff --git a/website/source/layouts/_meta.erb b/website/source/layouts/_meta.erb deleted file mode 100644 index 9f0a7edafc..0000000000 --- a/website/source/layouts/_meta.erb +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - <%= [current_page.data.page_title, "Vault by HashiCorp"].compact.join(" - ") %> - - <%= stylesheet_link_tag "application" %> - - - - - - - - <%= yield_content :head %> - - - " class="page-<%= current_page.data.page_title ? "#{current_page.data.page_title} layout-#{current_page.data.layout} page-sub" : "home layout-#{current_page.data.layout}" %>"> diff --git a/website/source/layouts/_sidebar.erb b/website/source/layouts/_sidebar.erb index 3698086a10..3ba99e94bf 100644 --- a/website/source/layouts/_sidebar.erb +++ b/website/source/layouts/_sidebar.erb @@ -3,24 +3,21 @@ diff --git a/website/source/layouts/layout.erb b/website/source/layouts/layout.erb index 729e9a543b..018e9d539c 100644 --- a/website/source/layouts/layout.erb +++ b/website/source/layouts/layout.erb @@ -1,10 +1,180 @@ -<%= partial "layouts/meta" %> -<%= partial "layouts/announcement-bnr" %> -<%= partial "layouts/header" %> -<%= partial "layouts/sidebar" %> + + + + + + -<%= yield %> + -<%= partial "ember_templates" %> -<%= partial "ember_steps" %> -<%= partial "layouts/footer" %> + <%= title_for(current_page) %> + + <%= stylesheet_link_tag "application" %> + + + + + + + + + + + <%= yield_content :head %> + + + +
+
+
+
+

+ Announcing + + Secure Infrastructure Automation. + + Find out more + +

+
+
+
+
+ + + + <%= partial "layouts/sidebar" %> + + <%= yield %> + + <%= partial "ember_templates" %> + <%= partial "ember_steps" %> + + + + + + + + <%= javascript_include_tag "application" %> + + + + From b9ea9a7f53ff9e1f7962425e7add34f4f4b5844f Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Mon, 6 Mar 2017 14:51:37 -0500 Subject: [PATCH 009/127] Remove displaying-bnr This is not used anywhere --- website/config.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/config.rb b/website/config.rb index e0164d4304..ad1474719d 100644 --- a/website/config.rb +++ b/website/config.rb @@ -59,8 +59,6 @@ helpers do classes << "layout-#{page.data.layout}" end - classes << "-displaying-bnr" - return classes.join(" ") end end From 7b1dc98ab82a10758da3b2aec60de9b02f04b5d4 Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Mon, 6 Mar 2017 14:51:53 -0500 Subject: [PATCH 010/127] Remove empty scss file --- website/source/assets/stylesheets/_jumbotron.scss | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 website/source/assets/stylesheets/_jumbotron.scss diff --git a/website/source/assets/stylesheets/_jumbotron.scss b/website/source/assets/stylesheets/_jumbotron.scss deleted file mode 100755 index e69de29bb2..0000000000 From 0db284fa09da27556cb89b72fb16a801e93303d3 Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Mon, 6 Mar 2017 14:52:01 -0500 Subject: [PATCH 011/127] Use × instead of "X" --- website/source/_ember_templates.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/source/_ember_templates.html.erb b/website/source/_ember_templates.html.erb index 181ea58ce1..23184ab273 100644 --- a/website/source/_ember_templates.html.erb +++ b/website/source/_ember_templates.html.erb @@ -16,7 +16,7 @@ -X +×
{{renderedLogs}}
From 8bcf3b1741cbfb64a236d60c49dabf7308976aee Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Mon, 6 Mar 2017 14:52:20 -0500 Subject: [PATCH 012/127] Do not show "Edit this Page" in dev either --- website/source/layouts/layout.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/source/layouts/layout.erb b/website/source/layouts/layout.erb index 018e9d539c..892c2f37c5 100644 --- a/website/source/layouts/layout.erb +++ b/website/source/layouts/layout.erb @@ -99,7 +99,7 @@
- <% if current_page.url != '/' %> + <% if current_page.url != '/' && current_page.url != '/index.html' %> <% end %>