diff --git a/hugo.toml b/hugo.toml index 948dcc8..8994d1f 100644 --- a/hugo.toml +++ b/hugo.toml @@ -123,7 +123,7 @@ weight = 30 [[menu.main]] identifier = "resume" name = "Resume" -url = "https://git.hackanooga.com" +url = "/wp-content/uploads/2024/03/mikeconrad-devops.pdf" weight = 30 [markup.highlight] diff --git a/static/wp-content/uploads/2020/01/blog-11-1024x696.webp b/static/wp-content/uploads/2020/01/blog-11-1024x696.webp deleted file mode 100644 index 66774ae..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog-11-1250x720.webp b/static/wp-content/uploads/2020/01/blog-11-1250x720.webp deleted file mode 100644 index 43505bb..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog-11-150x150.webp b/static/wp-content/uploads/2020/01/blog-11-150x150.webp deleted file mode 100644 index 4c3c206..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog-11-300x204.webp b/static/wp-content/uploads/2020/01/blog-11-300x204.webp deleted file mode 100644 index 2ccd446..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog-11-720x380.webp b/static/wp-content/uploads/2020/01/blog-11-720x380.webp deleted file mode 100644 index 3bed5e0..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog-11-768x522.webp b/static/wp-content/uploads/2020/01/blog-11-768x522.webp deleted file mode 100644 index 4914ece..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog-11.webp b/static/wp-content/uploads/2020/01/blog-11.webp deleted file mode 100644 index fd1411d..0000000 Binary files a/static/wp-content/uploads/2020/01/blog-11.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5-1024x704.webp b/static/wp-content/uploads/2020/01/blog5-1024x704.webp deleted file mode 100644 index 74c6739..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5-1024x704.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5-1200x720.webp b/static/wp-content/uploads/2020/01/blog5-1200x720.webp deleted file mode 100644 index e09fa68..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5-1200x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5-150x150.webp b/static/wp-content/uploads/2020/01/blog5-150x150.webp deleted file mode 100644 index 4829176..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5-300x206.webp b/static/wp-content/uploads/2020/01/blog5-300x206.webp deleted file mode 100644 index c202eac..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5-300x206.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5-720x380.webp b/static/wp-content/uploads/2020/01/blog5-720x380.webp deleted file mode 100644 index 13b917e..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5-768x528.webp b/static/wp-content/uploads/2020/01/blog5-768x528.webp deleted file mode 100644 index f1f6a91..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5-768x528.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/01/blog5.webp b/static/wp-content/uploads/2020/01/blog5.webp deleted file mode 100644 index aa30478..0000000 Binary files a/static/wp-content/uploads/2020/01/blog5.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01-1024x696.webp b/static/wp-content/uploads/2020/03/blog-01-1024x696.webp deleted file mode 100644 index 6a8b2c1..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01-1250x720.webp b/static/wp-content/uploads/2020/03/blog-01-1250x720.webp deleted file mode 100644 index e437d57..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01-150x150.webp b/static/wp-content/uploads/2020/03/blog-01-150x150.webp deleted file mode 100644 index d74b6b6..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01-300x204.webp b/static/wp-content/uploads/2020/03/blog-01-300x204.webp deleted file mode 100644 index f6770de..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01-720x380.webp b/static/wp-content/uploads/2020/03/blog-01-720x380.webp deleted file mode 100644 index b832561..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01-768x522.webp b/static/wp-content/uploads/2020/03/blog-01-768x522.webp deleted file mode 100644 index 467471a..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-01.webp b/static/wp-content/uploads/2020/03/blog-01.webp deleted file mode 100644 index d13cfed..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-01.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02-1024x696.webp b/static/wp-content/uploads/2020/03/blog-02-1024x696.webp deleted file mode 100644 index 27e7ab2..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02-1250x720.webp b/static/wp-content/uploads/2020/03/blog-02-1250x720.webp deleted file mode 100644 index 858208c..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02-150x150.webp b/static/wp-content/uploads/2020/03/blog-02-150x150.webp deleted file mode 100644 index 7ce7db5..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02-300x204.webp b/static/wp-content/uploads/2020/03/blog-02-300x204.webp deleted file mode 100644 index 9264a16..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02-720x380.webp b/static/wp-content/uploads/2020/03/blog-02-720x380.webp deleted file mode 100644 index 57aaf1b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02-768x522.webp b/static/wp-content/uploads/2020/03/blog-02-768x522.webp deleted file mode 100644 index 3e61123..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-02.webp b/static/wp-content/uploads/2020/03/blog-02.webp deleted file mode 100644 index 74a705b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-02.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03-1024x696.webp b/static/wp-content/uploads/2020/03/blog-03-1024x696.webp deleted file mode 100644 index 5494536..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03-1250x720.webp b/static/wp-content/uploads/2020/03/blog-03-1250x720.webp deleted file mode 100644 index cd2edfb..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03-150x150.webp b/static/wp-content/uploads/2020/03/blog-03-150x150.webp deleted file mode 100644 index 6cf7143..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03-300x204.webp b/static/wp-content/uploads/2020/03/blog-03-300x204.webp deleted file mode 100644 index c96aeb0..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03-720x380.webp b/static/wp-content/uploads/2020/03/blog-03-720x380.webp deleted file mode 100644 index 3e13010..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03-768x522.webp b/static/wp-content/uploads/2020/03/blog-03-768x522.webp deleted file mode 100644 index 5600c30..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-03.webp b/static/wp-content/uploads/2020/03/blog-03.webp deleted file mode 100644 index 752d96b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-03.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04-1024x696.webp b/static/wp-content/uploads/2020/03/blog-04-1024x696.webp deleted file mode 100644 index b081ddd..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04-1250x720.webp b/static/wp-content/uploads/2020/03/blog-04-1250x720.webp deleted file mode 100644 index 8a8c050..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04-150x150.webp b/static/wp-content/uploads/2020/03/blog-04-150x150.webp deleted file mode 100644 index c90426a..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04-300x204.webp b/static/wp-content/uploads/2020/03/blog-04-300x204.webp deleted file mode 100644 index 3fa355b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04-720x380.webp b/static/wp-content/uploads/2020/03/blog-04-720x380.webp deleted file mode 100644 index a19c192..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04-768x522.webp b/static/wp-content/uploads/2020/03/blog-04-768x522.webp deleted file mode 100644 index 5de253c..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-04.webp b/static/wp-content/uploads/2020/03/blog-04.webp deleted file mode 100644 index d6f771d..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-04.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05-1024x696.webp b/static/wp-content/uploads/2020/03/blog-05-1024x696.webp deleted file mode 100644 index ba53b5c..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05-1250x720.webp b/static/wp-content/uploads/2020/03/blog-05-1250x720.webp deleted file mode 100644 index d30123e..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05-150x150.webp b/static/wp-content/uploads/2020/03/blog-05-150x150.webp deleted file mode 100644 index f1ea7c2..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05-300x204.webp b/static/wp-content/uploads/2020/03/blog-05-300x204.webp deleted file mode 100644 index e26f7c2..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05-720x380.webp b/static/wp-content/uploads/2020/03/blog-05-720x380.webp deleted file mode 100644 index b30a148..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05-768x522.webp b/static/wp-content/uploads/2020/03/blog-05-768x522.webp deleted file mode 100644 index e00749d..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-05.webp b/static/wp-content/uploads/2020/03/blog-05.webp deleted file mode 100644 index e6112c1..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-05.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06-1024x696.webp b/static/wp-content/uploads/2020/03/blog-06-1024x696.webp deleted file mode 100644 index ce56501..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06-1250x720.webp b/static/wp-content/uploads/2020/03/blog-06-1250x720.webp deleted file mode 100644 index b35b6a8..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06-150x150.webp b/static/wp-content/uploads/2020/03/blog-06-150x150.webp deleted file mode 100644 index 2dfb50d..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06-300x204.webp b/static/wp-content/uploads/2020/03/blog-06-300x204.webp deleted file mode 100644 index ed4578b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06-720x380.webp b/static/wp-content/uploads/2020/03/blog-06-720x380.webp deleted file mode 100644 index e76e04a..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06-768x522.webp b/static/wp-content/uploads/2020/03/blog-06-768x522.webp deleted file mode 100644 index 2185177..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-06.webp b/static/wp-content/uploads/2020/03/blog-06.webp deleted file mode 100644 index 4fcc62d..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-06.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07-1024x696.webp b/static/wp-content/uploads/2020/03/blog-07-1024x696.webp deleted file mode 100644 index 110338c..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07-1250x720.webp b/static/wp-content/uploads/2020/03/blog-07-1250x720.webp deleted file mode 100644 index 8089e03..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07-150x150.webp b/static/wp-content/uploads/2020/03/blog-07-150x150.webp deleted file mode 100644 index f317b6c..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07-300x204.webp b/static/wp-content/uploads/2020/03/blog-07-300x204.webp deleted file mode 100644 index 0912c06..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07-720x380.webp b/static/wp-content/uploads/2020/03/blog-07-720x380.webp deleted file mode 100644 index f4ce2dd..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07-768x522.webp b/static/wp-content/uploads/2020/03/blog-07-768x522.webp deleted file mode 100644 index 9ae9fa0..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-07.webp b/static/wp-content/uploads/2020/03/blog-07.webp deleted file mode 100644 index d7d865c..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-07.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08-1024x696.webp b/static/wp-content/uploads/2020/03/blog-08-1024x696.webp deleted file mode 100644 index bdef34b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08-1250x720.webp b/static/wp-content/uploads/2020/03/blog-08-1250x720.webp deleted file mode 100644 index e3b2b2b..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08-150x150.webp b/static/wp-content/uploads/2020/03/blog-08-150x150.webp deleted file mode 100644 index 9842ca7..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08-300x204.webp b/static/wp-content/uploads/2020/03/blog-08-300x204.webp deleted file mode 100644 index f465fb1..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08-720x380.webp b/static/wp-content/uploads/2020/03/blog-08-720x380.webp deleted file mode 100644 index 9864c52..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08-768x522.webp b/static/wp-content/uploads/2020/03/blog-08-768x522.webp deleted file mode 100644 index 4a4afb5..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-08.webp b/static/wp-content/uploads/2020/03/blog-08.webp deleted file mode 100644 index 1a92e0f..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-08.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09-1024x696.webp b/static/wp-content/uploads/2020/03/blog-09-1024x696.webp deleted file mode 100644 index 89dcd82..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09-1250x720.webp b/static/wp-content/uploads/2020/03/blog-09-1250x720.webp deleted file mode 100644 index acc8771..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09-150x150.webp b/static/wp-content/uploads/2020/03/blog-09-150x150.webp deleted file mode 100644 index 43d96a6..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09-300x204.webp b/static/wp-content/uploads/2020/03/blog-09-300x204.webp deleted file mode 100644 index af98b72..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09-720x380.webp b/static/wp-content/uploads/2020/03/blog-09-720x380.webp deleted file mode 100644 index 8a4f246..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09-768x522.webp b/static/wp-content/uploads/2020/03/blog-09-768x522.webp deleted file mode 100644 index 761b335..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-09.webp b/static/wp-content/uploads/2020/03/blog-09.webp deleted file mode 100644 index 0df05ca..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-09.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10-1024x696.webp b/static/wp-content/uploads/2020/03/blog-10-1024x696.webp deleted file mode 100644 index cdfab04..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10-1250x720.webp b/static/wp-content/uploads/2020/03/blog-10-1250x720.webp deleted file mode 100644 index 8dcfa16..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10-150x150.webp b/static/wp-content/uploads/2020/03/blog-10-150x150.webp deleted file mode 100644 index 88c0f08..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10-300x204.webp b/static/wp-content/uploads/2020/03/blog-10-300x204.webp deleted file mode 100644 index 774f1ee..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10-720x380.webp b/static/wp-content/uploads/2020/03/blog-10-720x380.webp deleted file mode 100644 index 2e52016..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10-768x522.webp b/static/wp-content/uploads/2020/03/blog-10-768x522.webp deleted file mode 100644 index e367dca..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2020/03/blog-10.webp b/static/wp-content/uploads/2020/03/blog-10.webp deleted file mode 100644 index d125bf3..0000000 Binary files a/static/wp-content/uploads/2020/03/blog-10.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4-1024x682.webp b/static/wp-content/uploads/2022/11/blog4-1024x682.webp deleted file mode 100644 index 091cb84..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4-1024x682.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4-1280x720.webp b/static/wp-content/uploads/2022/11/blog4-1280x720.webp deleted file mode 100644 index e067f28..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4-1280x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4-150x150.webp b/static/wp-content/uploads/2022/11/blog4-150x150.webp deleted file mode 100644 index 7f2cb70..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4-300x200.webp b/static/wp-content/uploads/2022/11/blog4-300x200.webp deleted file mode 100644 index fd3be2b..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4-300x200.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4-720x380.webp b/static/wp-content/uploads/2022/11/blog4-720x380.webp deleted file mode 100644 index a8c0761..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4-768x512.webp b/static/wp-content/uploads/2022/11/blog4-768x512.webp deleted file mode 100644 index 59bce7f..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4-768x512.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog4.webp b/static/wp-content/uploads/2022/11/blog4.webp deleted file mode 100644 index dc011f2..0000000 Binary files a/static/wp-content/uploads/2022/11/blog4.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8-1024x594.webp b/static/wp-content/uploads/2022/11/blog8-1024x594.webp deleted file mode 100644 index 19d41a5..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8-1024x594.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8-1280x720.webp b/static/wp-content/uploads/2022/11/blog8-1280x720.webp deleted file mode 100644 index b6a8893..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8-1280x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8-150x150.webp b/static/wp-content/uploads/2022/11/blog8-150x150.webp deleted file mode 100644 index d66e2ed..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8-300x174.webp b/static/wp-content/uploads/2022/11/blog8-300x174.webp deleted file mode 100644 index fcd843b..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8-300x174.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8-720x380.webp b/static/wp-content/uploads/2022/11/blog8-720x380.webp deleted file mode 100644 index bd57aab..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8-768x446.webp b/static/wp-content/uploads/2022/11/blog8-768x446.webp deleted file mode 100644 index 1353fbd..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8-768x446.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog8.webp b/static/wp-content/uploads/2022/11/blog8.webp deleted file mode 100644 index 0c9bd77..0000000 Binary files a/static/wp-content/uploads/2022/11/blog8.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9-1024x594.webp b/static/wp-content/uploads/2022/11/blog9-1024x594.webp deleted file mode 100644 index 4438405..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9-1024x594.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9-1280x720.webp b/static/wp-content/uploads/2022/11/blog9-1280x720.webp deleted file mode 100644 index fbb7f65..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9-1280x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9-150x150.webp b/static/wp-content/uploads/2022/11/blog9-150x150.webp deleted file mode 100644 index fc7c62c..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9-300x174.webp b/static/wp-content/uploads/2022/11/blog9-300x174.webp deleted file mode 100644 index 1a3c506..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9-300x174.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9-720x380.webp b/static/wp-content/uploads/2022/11/blog9-720x380.webp deleted file mode 100644 index 3dc299b..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9-768x446.webp b/static/wp-content/uploads/2022/11/blog9-768x446.webp deleted file mode 100644 index 6f008d3..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9-768x446.webp and /dev/null differ diff --git a/static/wp-content/uploads/2022/11/blog9.webp b/static/wp-content/uploads/2022/11/blog9.webp deleted file mode 100644 index 868d51e..0000000 Binary files a/static/wp-content/uploads/2022/11/blog9.webp and /dev/null differ diff --git a/static/wp-content/uploads/2023/02/ad-150x150.jpg b/static/wp-content/uploads/2023/02/ad-150x150.jpg deleted file mode 100644 index 8b8356b..0000000 Binary files a/static/wp-content/uploads/2023/02/ad-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2023/02/ad-300x300.jpg b/static/wp-content/uploads/2023/02/ad-300x300.jpg deleted file mode 100644 index e60b035..0000000 Binary files a/static/wp-content/uploads/2023/02/ad-300x300.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2023/02/ad.jpg b/static/wp-content/uploads/2023/02/ad.jpg deleted file mode 100644 index 8e919cc..0000000 Binary files a/static/wp-content/uploads/2023/02/ad.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-1024x653.jpg b/static/wp-content/uploads/2024/01/ads-1024x653.jpg deleted file mode 100644 index 09837f9..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-1024x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-1024x700.jpg b/static/wp-content/uploads/2024/01/ads-1024x700.jpg deleted file mode 100644 index 3ffbfbb..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-1024x700.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-150x150.jpg b/static/wp-content/uploads/2024/01/ads-150x150.jpg deleted file mode 100644 index c47697b..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-300x300.jpg b/static/wp-content/uploads/2024/01/ads-300x300.jpg deleted file mode 100644 index 2c9cb37..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-300x300.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-600x400.jpg b/static/wp-content/uploads/2024/01/ads-600x400.jpg deleted file mode 100644 index f8a5b89..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-600x600.jpg b/static/wp-content/uploads/2024/01/ads-600x600.jpg deleted file mode 100644 index 5cf67e0..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-600x600.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-768x432.jpg b/static/wp-content/uploads/2024/01/ads-768x432.jpg deleted file mode 100644 index 611b79b..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads-768x768.jpg b/static/wp-content/uploads/2024/01/ads-768x768.jpg deleted file mode 100644 index 26c5671..0000000 Binary files a/static/wp-content/uploads/2024/01/ads-768x768.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/ads.jpg b/static/wp-content/uploads/2024/01/ads.jpg deleted file mode 100644 index 9e5d824..0000000 Binary files a/static/wp-content/uploads/2024/01/ads.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07-1024x696.webp b/static/wp-content/uploads/2024/01/blog-07-1024x696.webp deleted file mode 100644 index 110338c..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07-1024x696.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07-1250x720.webp b/static/wp-content/uploads/2024/01/blog-07-1250x720.webp deleted file mode 100644 index 8089e03..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07-1250x720.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07-150x150.webp b/static/wp-content/uploads/2024/01/blog-07-150x150.webp deleted file mode 100644 index f317b6c..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07-150x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07-300x204.webp b/static/wp-content/uploads/2024/01/blog-07-300x204.webp deleted file mode 100644 index 0912c06..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07-300x204.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07-720x380.webp b/static/wp-content/uploads/2024/01/blog-07-720x380.webp deleted file mode 100644 index f4ce2dd..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07-720x380.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07-768x522.webp b/static/wp-content/uploads/2024/01/blog-07-768x522.webp deleted file mode 100644 index 9ae9fa0..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07-768x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/blog-07.webp b/static/wp-content/uploads/2024/01/blog-07.webp deleted file mode 100644 index d7d865c..0000000 Binary files a/static/wp-content/uploads/2024/01/blog-07.webp and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-1024x597.jpg b/static/wp-content/uploads/2024/01/img-1-1024x597.jpg deleted file mode 100644 index 60eb484..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-1160x653.jpg b/static/wp-content/uploads/2024/01/img-1-1160x653.jpg deleted file mode 100644 index a3833fb..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-150x150.jpg b/static/wp-content/uploads/2024/01/img-1-150x150.jpg deleted file mode 100644 index 3fd1461..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-300x175.jpg b/static/wp-content/uploads/2024/01/img-1-300x175.jpg deleted file mode 100644 index 02e7831..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-600x350.jpg b/static/wp-content/uploads/2024/01/img-1-600x350.jpg deleted file mode 100644 index 78fc763..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-600x400.jpg b/static/wp-content/uploads/2024/01/img-1-600x400.jpg deleted file mode 100644 index 71175df..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-768x432.jpg b/static/wp-content/uploads/2024/01/img-1-768x432.jpg deleted file mode 100644 index ba6df5c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1-768x448.jpg b/static/wp-content/uploads/2024/01/img-1-768x448.jpg deleted file mode 100644 index b65788c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-1.jpg b/static/wp-content/uploads/2024/01/img-1.jpg deleted file mode 100644 index c52d37a..0000000 Binary files a/static/wp-content/uploads/2024/01/img-1.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-1024x597.jpg b/static/wp-content/uploads/2024/01/img-10-1024x597.jpg deleted file mode 100644 index f61033f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-1160x653.jpg b/static/wp-content/uploads/2024/01/img-10-1160x653.jpg deleted file mode 100644 index ff8ee2e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-150x150.jpg b/static/wp-content/uploads/2024/01/img-10-150x150.jpg deleted file mode 100644 index 0a37c07..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-300x175.jpg b/static/wp-content/uploads/2024/01/img-10-300x175.jpg deleted file mode 100644 index 79246a7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-600x350.jpg b/static/wp-content/uploads/2024/01/img-10-600x350.jpg deleted file mode 100644 index 0525f2f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-600x400.jpg b/static/wp-content/uploads/2024/01/img-10-600x400.jpg deleted file mode 100644 index af2c158..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-768x432.jpg b/static/wp-content/uploads/2024/01/img-10-768x432.jpg deleted file mode 100644 index 411697f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10-768x448.jpg b/static/wp-content/uploads/2024/01/img-10-768x448.jpg deleted file mode 100644 index 830367b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-10.jpg b/static/wp-content/uploads/2024/01/img-10.jpg deleted file mode 100644 index 24a1cb3..0000000 Binary files a/static/wp-content/uploads/2024/01/img-10.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-1024x597.jpg b/static/wp-content/uploads/2024/01/img-11-1024x597.jpg deleted file mode 100644 index 01e828a..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-1160x653.jpg b/static/wp-content/uploads/2024/01/img-11-1160x653.jpg deleted file mode 100644 index 5170424..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-150x150.jpg b/static/wp-content/uploads/2024/01/img-11-150x150.jpg deleted file mode 100644 index f5151cc..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-300x175.jpg b/static/wp-content/uploads/2024/01/img-11-300x175.jpg deleted file mode 100644 index a73463f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-600x350.jpg b/static/wp-content/uploads/2024/01/img-11-600x350.jpg deleted file mode 100644 index ed8a8e3..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-600x400.jpg b/static/wp-content/uploads/2024/01/img-11-600x400.jpg deleted file mode 100644 index cdc1b32..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-768x432.jpg b/static/wp-content/uploads/2024/01/img-11-768x432.jpg deleted file mode 100644 index 1d2793c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11-768x448.jpg b/static/wp-content/uploads/2024/01/img-11-768x448.jpg deleted file mode 100644 index 42b3cd5..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-11.jpg b/static/wp-content/uploads/2024/01/img-11.jpg deleted file mode 100644 index 14f379f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-11.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-1024x597.jpg b/static/wp-content/uploads/2024/01/img-12-1024x597.jpg deleted file mode 100644 index b05daef..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-1160x653.jpg b/static/wp-content/uploads/2024/01/img-12-1160x653.jpg deleted file mode 100644 index 7d3f98a..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-150x150.jpg b/static/wp-content/uploads/2024/01/img-12-150x150.jpg deleted file mode 100644 index 9fe7922..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-300x175.jpg b/static/wp-content/uploads/2024/01/img-12-300x175.jpg deleted file mode 100644 index d2885cd..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-600x350.jpg b/static/wp-content/uploads/2024/01/img-12-600x350.jpg deleted file mode 100644 index 2f57d08..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-600x400.jpg b/static/wp-content/uploads/2024/01/img-12-600x400.jpg deleted file mode 100644 index b8781b4..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-768x432.jpg b/static/wp-content/uploads/2024/01/img-12-768x432.jpg deleted file mode 100644 index 2430a03..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12-768x448.jpg b/static/wp-content/uploads/2024/01/img-12-768x448.jpg deleted file mode 100644 index 774c4b0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-12.jpg b/static/wp-content/uploads/2024/01/img-12.jpg deleted file mode 100644 index 080eca1..0000000 Binary files a/static/wp-content/uploads/2024/01/img-12.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-1024x597.jpg b/static/wp-content/uploads/2024/01/img-13-1024x597.jpg deleted file mode 100644 index 5099562..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-1160x653.jpg b/static/wp-content/uploads/2024/01/img-13-1160x653.jpg deleted file mode 100644 index 82a65e8..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-150x150.jpg b/static/wp-content/uploads/2024/01/img-13-150x150.jpg deleted file mode 100644 index 055c8ba..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-300x175.jpg b/static/wp-content/uploads/2024/01/img-13-300x175.jpg deleted file mode 100644 index 37ea6b8..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-600x350.jpg b/static/wp-content/uploads/2024/01/img-13-600x350.jpg deleted file mode 100644 index 47f7354..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-600x400.jpg b/static/wp-content/uploads/2024/01/img-13-600x400.jpg deleted file mode 100644 index 4ca789f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-768x432.jpg b/static/wp-content/uploads/2024/01/img-13-768x432.jpg deleted file mode 100644 index b46e85b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13-768x448.jpg b/static/wp-content/uploads/2024/01/img-13-768x448.jpg deleted file mode 100644 index 531a38c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-13.jpg b/static/wp-content/uploads/2024/01/img-13.jpg deleted file mode 100644 index c756796..0000000 Binary files a/static/wp-content/uploads/2024/01/img-13.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-1024x597.jpg b/static/wp-content/uploads/2024/01/img-14-1024x597.jpg deleted file mode 100644 index 0a0d411..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-1160x653.jpg b/static/wp-content/uploads/2024/01/img-14-1160x653.jpg deleted file mode 100644 index 5589774..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-150x150.jpg b/static/wp-content/uploads/2024/01/img-14-150x150.jpg deleted file mode 100644 index 18a37cd..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-300x175.jpg b/static/wp-content/uploads/2024/01/img-14-300x175.jpg deleted file mode 100644 index deaa70b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-600x350.jpg b/static/wp-content/uploads/2024/01/img-14-600x350.jpg deleted file mode 100644 index 8eca5b4..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-600x400.jpg b/static/wp-content/uploads/2024/01/img-14-600x400.jpg deleted file mode 100644 index 55e5533..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-768x432.jpg b/static/wp-content/uploads/2024/01/img-14-768x432.jpg deleted file mode 100644 index a86f2f3..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14-768x448.jpg b/static/wp-content/uploads/2024/01/img-14-768x448.jpg deleted file mode 100644 index de03d3e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-14.jpg b/static/wp-content/uploads/2024/01/img-14.jpg deleted file mode 100644 index 0b80f6d..0000000 Binary files a/static/wp-content/uploads/2024/01/img-14.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-1024x597.jpg b/static/wp-content/uploads/2024/01/img-15-1024x597.jpg deleted file mode 100644 index 7365df9..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-1160x653.jpg b/static/wp-content/uploads/2024/01/img-15-1160x653.jpg deleted file mode 100644 index cb77f00..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-150x150.jpg b/static/wp-content/uploads/2024/01/img-15-150x150.jpg deleted file mode 100644 index f165f46..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-300x175.jpg b/static/wp-content/uploads/2024/01/img-15-300x175.jpg deleted file mode 100644 index 7008c85..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-600x350.jpg b/static/wp-content/uploads/2024/01/img-15-600x350.jpg deleted file mode 100644 index 6739ba0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-600x400.jpg b/static/wp-content/uploads/2024/01/img-15-600x400.jpg deleted file mode 100644 index 52bba2c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-768x432.jpg b/static/wp-content/uploads/2024/01/img-15-768x432.jpg deleted file mode 100644 index 69e9012..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15-768x448.jpg b/static/wp-content/uploads/2024/01/img-15-768x448.jpg deleted file mode 100644 index 89f6fc2..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-15.jpg b/static/wp-content/uploads/2024/01/img-15.jpg deleted file mode 100644 index 94a2224..0000000 Binary files a/static/wp-content/uploads/2024/01/img-15.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-1024x597.jpg b/static/wp-content/uploads/2024/01/img-16-1024x597.jpg deleted file mode 100644 index 2e1ed2e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-1160x653.jpg b/static/wp-content/uploads/2024/01/img-16-1160x653.jpg deleted file mode 100644 index a867a94..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-150x150.jpg b/static/wp-content/uploads/2024/01/img-16-150x150.jpg deleted file mode 100644 index 408259b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-300x175.jpg b/static/wp-content/uploads/2024/01/img-16-300x175.jpg deleted file mode 100644 index bfaa064..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-600x350.jpg b/static/wp-content/uploads/2024/01/img-16-600x350.jpg deleted file mode 100644 index 244467d..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-600x400.jpg b/static/wp-content/uploads/2024/01/img-16-600x400.jpg deleted file mode 100644 index 3443751..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-768x432.jpg b/static/wp-content/uploads/2024/01/img-16-768x432.jpg deleted file mode 100644 index 0f64837..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16-768x448.jpg b/static/wp-content/uploads/2024/01/img-16-768x448.jpg deleted file mode 100644 index b9a8ad8..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-16.jpg b/static/wp-content/uploads/2024/01/img-16.jpg deleted file mode 100644 index 390bbf4..0000000 Binary files a/static/wp-content/uploads/2024/01/img-16.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-1024x597.jpg b/static/wp-content/uploads/2024/01/img-17-1024x597.jpg deleted file mode 100644 index dd1208c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-1160x653.jpg b/static/wp-content/uploads/2024/01/img-17-1160x653.jpg deleted file mode 100644 index 39fc1ad..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-150x150.jpg b/static/wp-content/uploads/2024/01/img-17-150x150.jpg deleted file mode 100644 index f15137b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-300x175.jpg b/static/wp-content/uploads/2024/01/img-17-300x175.jpg deleted file mode 100644 index 1469669..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-600x350.jpg b/static/wp-content/uploads/2024/01/img-17-600x350.jpg deleted file mode 100644 index 561e14e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-600x400.jpg b/static/wp-content/uploads/2024/01/img-17-600x400.jpg deleted file mode 100644 index 8c3706b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-768x432.jpg b/static/wp-content/uploads/2024/01/img-17-768x432.jpg deleted file mode 100644 index cb1ae3b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17-768x448.jpg b/static/wp-content/uploads/2024/01/img-17-768x448.jpg deleted file mode 100644 index 5c5a39c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-17.jpg b/static/wp-content/uploads/2024/01/img-17.jpg deleted file mode 100644 index c5fcbb4..0000000 Binary files a/static/wp-content/uploads/2024/01/img-17.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-1024x597.jpg b/static/wp-content/uploads/2024/01/img-18-1024x597.jpg deleted file mode 100644 index a2519be..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-1160x653.jpg b/static/wp-content/uploads/2024/01/img-18-1160x653.jpg deleted file mode 100644 index 852692a..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-150x150.jpg b/static/wp-content/uploads/2024/01/img-18-150x150.jpg deleted file mode 100644 index 0935df3..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-300x175.jpg b/static/wp-content/uploads/2024/01/img-18-300x175.jpg deleted file mode 100644 index 8cafde4..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-600x350.jpg b/static/wp-content/uploads/2024/01/img-18-600x350.jpg deleted file mode 100644 index 4618f65..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-600x400.jpg b/static/wp-content/uploads/2024/01/img-18-600x400.jpg deleted file mode 100644 index 69c994e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-768x432.jpg b/static/wp-content/uploads/2024/01/img-18-768x432.jpg deleted file mode 100644 index 4903a39..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18-768x448.jpg b/static/wp-content/uploads/2024/01/img-18-768x448.jpg deleted file mode 100644 index 63c6619..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-18.jpg b/static/wp-content/uploads/2024/01/img-18.jpg deleted file mode 100644 index e4396c2..0000000 Binary files a/static/wp-content/uploads/2024/01/img-18.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-1024x597.jpg b/static/wp-content/uploads/2024/01/img-19-1024x597.jpg deleted file mode 100644 index 3f73625..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-1160x653.jpg b/static/wp-content/uploads/2024/01/img-19-1160x653.jpg deleted file mode 100644 index a76118e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-150x150.jpg b/static/wp-content/uploads/2024/01/img-19-150x150.jpg deleted file mode 100644 index e46b9d1..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-300x175.jpg b/static/wp-content/uploads/2024/01/img-19-300x175.jpg deleted file mode 100644 index b41ff9f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-600x350.jpg b/static/wp-content/uploads/2024/01/img-19-600x350.jpg deleted file mode 100644 index 230fa44..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-600x400.jpg b/static/wp-content/uploads/2024/01/img-19-600x400.jpg deleted file mode 100644 index 124aed8..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-768x432.jpg b/static/wp-content/uploads/2024/01/img-19-768x432.jpg deleted file mode 100644 index b9849a5..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19-768x448.jpg b/static/wp-content/uploads/2024/01/img-19-768x448.jpg deleted file mode 100644 index 9c342d6..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-19.jpg b/static/wp-content/uploads/2024/01/img-19.jpg deleted file mode 100644 index eb84ee7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-19.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-1024x597.jpg b/static/wp-content/uploads/2024/01/img-2-1024x597.jpg deleted file mode 100644 index 5b83596..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-1160x653.jpg b/static/wp-content/uploads/2024/01/img-2-1160x653.jpg deleted file mode 100644 index 414735f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-150x150.jpg b/static/wp-content/uploads/2024/01/img-2-150x150.jpg deleted file mode 100644 index 4dc81c3..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-300x175.jpg b/static/wp-content/uploads/2024/01/img-2-300x175.jpg deleted file mode 100644 index 80d265c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-600x350.jpg b/static/wp-content/uploads/2024/01/img-2-600x350.jpg deleted file mode 100644 index 6451bef..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-600x400.jpg b/static/wp-content/uploads/2024/01/img-2-600x400.jpg deleted file mode 100644 index 232ace9..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-768x432.jpg b/static/wp-content/uploads/2024/01/img-2-768x432.jpg deleted file mode 100644 index b2c5eb7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2-768x448.jpg b/static/wp-content/uploads/2024/01/img-2-768x448.jpg deleted file mode 100644 index cd68731..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-2.jpg b/static/wp-content/uploads/2024/01/img-2.jpg deleted file mode 100644 index b1c2ca4..0000000 Binary files a/static/wp-content/uploads/2024/01/img-2.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-1024x597.jpg b/static/wp-content/uploads/2024/01/img-20-1024x597.jpg deleted file mode 100644 index 4aa15de..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-1160x653.jpg b/static/wp-content/uploads/2024/01/img-20-1160x653.jpg deleted file mode 100644 index 09616b0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-150x150.jpg b/static/wp-content/uploads/2024/01/img-20-150x150.jpg deleted file mode 100644 index 99d121e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-300x175.jpg b/static/wp-content/uploads/2024/01/img-20-300x175.jpg deleted file mode 100644 index 3a33153..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-600x350.jpg b/static/wp-content/uploads/2024/01/img-20-600x350.jpg deleted file mode 100644 index cd1878b..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-600x400.jpg b/static/wp-content/uploads/2024/01/img-20-600x400.jpg deleted file mode 100644 index cd4d240..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-768x432.jpg b/static/wp-content/uploads/2024/01/img-20-768x432.jpg deleted file mode 100644 index d165aff..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20-768x448.jpg b/static/wp-content/uploads/2024/01/img-20-768x448.jpg deleted file mode 100644 index 41ab0a0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-20.jpg b/static/wp-content/uploads/2024/01/img-20.jpg deleted file mode 100644 index a135166..0000000 Binary files a/static/wp-content/uploads/2024/01/img-20.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-1024x597.jpg b/static/wp-content/uploads/2024/01/img-3-1024x597.jpg deleted file mode 100644 index 0be5e68..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-1160x653.jpg b/static/wp-content/uploads/2024/01/img-3-1160x653.jpg deleted file mode 100644 index f53001f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-150x150.jpg b/static/wp-content/uploads/2024/01/img-3-150x150.jpg deleted file mode 100644 index ff2655e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-300x175.jpg b/static/wp-content/uploads/2024/01/img-3-300x175.jpg deleted file mode 100644 index 60e3bc1..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-600x350.jpg b/static/wp-content/uploads/2024/01/img-3-600x350.jpg deleted file mode 100644 index d6d6f00..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-600x400.jpg b/static/wp-content/uploads/2024/01/img-3-600x400.jpg deleted file mode 100644 index 2831ec7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-768x432.jpg b/static/wp-content/uploads/2024/01/img-3-768x432.jpg deleted file mode 100644 index 17fee84..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3-768x448.jpg b/static/wp-content/uploads/2024/01/img-3-768x448.jpg deleted file mode 100644 index fef1710..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-3.jpg b/static/wp-content/uploads/2024/01/img-3.jpg deleted file mode 100644 index 5a355d7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-3.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-1024x597.jpg b/static/wp-content/uploads/2024/01/img-4-1024x597.jpg deleted file mode 100644 index 354fdf1..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-1160x653.jpg b/static/wp-content/uploads/2024/01/img-4-1160x653.jpg deleted file mode 100644 index 2c80871..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-150x150.jpg b/static/wp-content/uploads/2024/01/img-4-150x150.jpg deleted file mode 100644 index ceecadb..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-300x175.jpg b/static/wp-content/uploads/2024/01/img-4-300x175.jpg deleted file mode 100644 index fcb1b6c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-600x350.jpg b/static/wp-content/uploads/2024/01/img-4-600x350.jpg deleted file mode 100644 index 4410807..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-600x400.jpg b/static/wp-content/uploads/2024/01/img-4-600x400.jpg deleted file mode 100644 index 52ee3a7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-768x432.jpg b/static/wp-content/uploads/2024/01/img-4-768x432.jpg deleted file mode 100644 index 6beed37..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4-768x448.jpg b/static/wp-content/uploads/2024/01/img-4-768x448.jpg deleted file mode 100644 index 31a08bf..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-4.jpg b/static/wp-content/uploads/2024/01/img-4.jpg deleted file mode 100644 index f5eedaa..0000000 Binary files a/static/wp-content/uploads/2024/01/img-4.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-1024x597.jpg b/static/wp-content/uploads/2024/01/img-5-1024x597.jpg deleted file mode 100644 index 227c4c7..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-1160x653.jpg b/static/wp-content/uploads/2024/01/img-5-1160x653.jpg deleted file mode 100644 index 4b32489..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-150x150.jpg b/static/wp-content/uploads/2024/01/img-5-150x150.jpg deleted file mode 100644 index d55b7a8..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-300x175.jpg b/static/wp-content/uploads/2024/01/img-5-300x175.jpg deleted file mode 100644 index 546afa2..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-600x350.jpg b/static/wp-content/uploads/2024/01/img-5-600x350.jpg deleted file mode 100644 index 85f10e5..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-600x400.jpg b/static/wp-content/uploads/2024/01/img-5-600x400.jpg deleted file mode 100644 index 7add906..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-768x432.jpg b/static/wp-content/uploads/2024/01/img-5-768x432.jpg deleted file mode 100644 index 7613a2f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5-768x448.jpg b/static/wp-content/uploads/2024/01/img-5-768x448.jpg deleted file mode 100644 index ad456fb..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-5.jpg b/static/wp-content/uploads/2024/01/img-5.jpg deleted file mode 100644 index da2e626..0000000 Binary files a/static/wp-content/uploads/2024/01/img-5.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-1024x597.jpg b/static/wp-content/uploads/2024/01/img-6-1024x597.jpg deleted file mode 100644 index 848c939..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-1160x653.jpg b/static/wp-content/uploads/2024/01/img-6-1160x653.jpg deleted file mode 100644 index be5a1fc..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-150x150.jpg b/static/wp-content/uploads/2024/01/img-6-150x150.jpg deleted file mode 100644 index e81a092..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-300x175.jpg b/static/wp-content/uploads/2024/01/img-6-300x175.jpg deleted file mode 100644 index 635bd92..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-600x350.jpg b/static/wp-content/uploads/2024/01/img-6-600x350.jpg deleted file mode 100644 index a31db31..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-600x400.jpg b/static/wp-content/uploads/2024/01/img-6-600x400.jpg deleted file mode 100644 index 0d5ace5..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-768x432.jpg b/static/wp-content/uploads/2024/01/img-6-768x432.jpg deleted file mode 100644 index d023f71..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6-768x448.jpg b/static/wp-content/uploads/2024/01/img-6-768x448.jpg deleted file mode 100644 index d19cb0e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-6.jpg b/static/wp-content/uploads/2024/01/img-6.jpg deleted file mode 100644 index 6999036..0000000 Binary files a/static/wp-content/uploads/2024/01/img-6.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-1024x597.jpg b/static/wp-content/uploads/2024/01/img-7-1024x597.jpg deleted file mode 100644 index 6e3401c..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-1160x653.jpg b/static/wp-content/uploads/2024/01/img-7-1160x653.jpg deleted file mode 100644 index 9bb4358..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-150x150.jpg b/static/wp-content/uploads/2024/01/img-7-150x150.jpg deleted file mode 100644 index 5d3579e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-300x175.jpg b/static/wp-content/uploads/2024/01/img-7-300x175.jpg deleted file mode 100644 index 9177c45..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-600x350.jpg b/static/wp-content/uploads/2024/01/img-7-600x350.jpg deleted file mode 100644 index aa3fa71..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-600x400.jpg b/static/wp-content/uploads/2024/01/img-7-600x400.jpg deleted file mode 100644 index e22ac74..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-768x432.jpg b/static/wp-content/uploads/2024/01/img-7-768x432.jpg deleted file mode 100644 index 6433fc6..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7-768x448.jpg b/static/wp-content/uploads/2024/01/img-7-768x448.jpg deleted file mode 100644 index 1f0a6d0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-7.jpg b/static/wp-content/uploads/2024/01/img-7.jpg deleted file mode 100644 index bfe01d8..0000000 Binary files a/static/wp-content/uploads/2024/01/img-7.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-1024x597.jpg b/static/wp-content/uploads/2024/01/img-8-1024x597.jpg deleted file mode 100644 index 47b78a5..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-1160x653.jpg b/static/wp-content/uploads/2024/01/img-8-1160x653.jpg deleted file mode 100644 index 4a95260..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-150x150.jpg b/static/wp-content/uploads/2024/01/img-8-150x150.jpg deleted file mode 100644 index 93fc888..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-300x175.jpg b/static/wp-content/uploads/2024/01/img-8-300x175.jpg deleted file mode 100644 index f530aca..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-600x350.jpg b/static/wp-content/uploads/2024/01/img-8-600x350.jpg deleted file mode 100644 index c7b492f..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-600x400.jpg b/static/wp-content/uploads/2024/01/img-8-600x400.jpg deleted file mode 100644 index c4a3a93..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-768x432.jpg b/static/wp-content/uploads/2024/01/img-8-768x432.jpg deleted file mode 100644 index c7bd8be..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8-768x448.jpg b/static/wp-content/uploads/2024/01/img-8-768x448.jpg deleted file mode 100644 index 9dc593e..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-8.jpg b/static/wp-content/uploads/2024/01/img-8.jpg deleted file mode 100644 index fcc0e35..0000000 Binary files a/static/wp-content/uploads/2024/01/img-8.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-1024x597.jpg b/static/wp-content/uploads/2024/01/img-9-1024x597.jpg deleted file mode 100644 index 29e0dca..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-1024x597.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-1160x653.jpg b/static/wp-content/uploads/2024/01/img-9-1160x653.jpg deleted file mode 100644 index bb69bac..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-1160x653.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-150x150.jpg b/static/wp-content/uploads/2024/01/img-9-150x150.jpg deleted file mode 100644 index c48ddb0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-150x150.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-300x175.jpg b/static/wp-content/uploads/2024/01/img-9-300x175.jpg deleted file mode 100644 index 8edcfe1..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-300x175.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-600x350.jpg b/static/wp-content/uploads/2024/01/img-9-600x350.jpg deleted file mode 100644 index a206075..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-600x350.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-600x400.jpg b/static/wp-content/uploads/2024/01/img-9-600x400.jpg deleted file mode 100644 index 2125b89..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-600x400.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-768x432.jpg b/static/wp-content/uploads/2024/01/img-9-768x432.jpg deleted file mode 100644 index a7f4f39..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-768x432.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9-768x448.jpg b/static/wp-content/uploads/2024/01/img-9-768x448.jpg deleted file mode 100644 index 1d8a9f0..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9-768x448.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/01/img-9.jpg b/static/wp-content/uploads/2024/01/img-9.jpg deleted file mode 100644 index f3bd84a..0000000 Binary files a/static/wp-content/uploads/2024/01/img-9.jpg and /dev/null differ diff --git a/static/wp-content/uploads/2024/02/fav.png b/static/wp-content/uploads/2024/02/fav.png deleted file mode 100644 index fefd049..0000000 Binary files a/static/wp-content/uploads/2024/02/fav.png and /dev/null differ diff --git a/static/wp-content/uploads/2024/02/logo-150x100.png b/static/wp-content/uploads/2024/02/logo-150x100.png deleted file mode 100644 index 976d4e2..0000000 Binary files a/static/wp-content/uploads/2024/02/logo-150x100.png and /dev/null differ diff --git a/static/wp-content/uploads/2024/02/logo.png b/static/wp-content/uploads/2024/02/logo.png deleted file mode 100644 index be14a1c..0000000 Binary files a/static/wp-content/uploads/2024/02/logo.png and /dev/null differ diff --git a/static/wp-content/uploads/astra-docs/docs.json b/static/wp-content/uploads/astra-docs/docs.json deleted file mode 100644 index 4eec56a..0000000 --- a/static/wp-content/uploads/astra-docs/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"categories":{"site-builder":{"name":"Site Builder","subcategories":[]},"installation-and-updates":{"name":"Installation and Updates","subcategories":[]},"astra-theme-walkthrough-docs":{"name":"Astra Theme Walkthrough","subcategories":[]},"astra-customizer-settings":{"name":"Customizer Settings","subcategories":{"header-and-footer":{"name":"Header & Footer","subcategories":{"header-footer-before-3-0":{"name":"Old Header & Footer (Before Astra v3.0)","subcategories":[]},"header-footer-after-3-0":{"name":"Header & Footer Builder (Astra v3.0+)","subcategories":[]}}},"global":{"name":"Global","subcategories":[]},"breadcrumb":{"name":"Breadcrumb","subcategories":[]},"blog":{"name":"Blog","subcategories":[]},"sidebar":{"name":"Sidebar","subcategories":[]},"learndash":{"name":"LearnDash","subcategories":[]},"easy-digital-downloads":{"name":"Easy Digital Downloads","subcategories":[]},"lifterlms":{"name":"LifterLMS","subcategories":[]},"woocommerce-free":{"name":"WooCommerce","subcategories":[]},"meta-settings":{"name":"Meta Settings","subcategories":[]}}},"astra-pro-modules":{"name":"Astra Pro Modules","subcategories":{"white-label":{"name":"White Label","subcategories":[]},"mobile-header":{"name":"Mobile Header","subcategories":[]},"nav-menu":{"name":"Nav Menu","subcategories":[]},"typography-pro":{"name":"Typography","subcategories":[]},"colors-background-pro":{"name":"Colors & Background","subcategories":[]},"site-builder-module":{"name":"Site Builder","subcategories":[]},"site-layout":{"name":"Site Layout","subcategories":[]},"header-sections":{"name":"Header Sections","subcategories":[]},"sticky-header":{"name":"Sticky Header","subcategories":[]},"page-headers":{"name":"Page Headers","subcategories":[]},"blog-pro":{"name":"Blog Pro","subcategories":[]},"footer-widgets-module":{"name":"Footer Widgets Module","subcategories":[]},"spacing":{"name":"Spacing","subcategories":[]},"woo":{"name":"WooCommerce","subcategories":[]},"learndash-astra-pro-modules":{"name":"LearnDash","subcategories":[]},"lifterlms-astra-pro":{"name":"LifterLMS","subcategories":[]},"easy-digital-downloads-module":{"name":"Easy Digital Downloads Module","subcategories":[]},"native-amp-support":{"name":"Native AMP Support","subcategories":[]}}},"starter-templates":{"name":"Starter Templates","subcategories":[]},"translate-astra":{"name":"Translate Astra","subcategories":[]},"general":{"name":"General","subcategories":[]},"account-and-store":{"name":"Account and Store","subcategories":[]},"custom-code-snippets":{"name":"Custom Code Snippets","subcategories":{"astra-theme-pro-filters":{"name":"Astra Theme & Pro Filters","subcategories":[]},"astra-header-footer-filters":{"name":"Astra Header & Footer Filters","subcategories":[]},"blog-filters":{"name":"Blog Filters","subcategories":[]},"woocommerce-filters":{"name":"WooCommerce Filters","subcategories":[]},"custom-css":{"name":"Custom CSS","subcategories":[]}}},"troubleshooting":{"name":"Troubleshooting","subcategories":[]}},"docs":[{"title":"Why You Need to Connect Starter Templates with ZipWP AI Website Builder","url":"https:\/\/wpastra.com\/docs\/starter-templates-with-zipwp-ai\/","category":["starter-templates"]},{"title":"How to Change the Background Color of Product & Shop Pages in Astra?","url":"https:\/\/wpastra.com\/docs\/change-background-color-of-product-shop-pages\/","category":["woocommerce-free"]},{"title":"How to Change “Add to Cart” Text Strings","url":"https:\/\/wpastra.com\/docs\/change-add-to-cart-text-strings\/","category":["woocommerce-filters"]},{"title":"How to Relocate WooCommerce Category Description","url":"https:\/\/wpastra.com\/docs\/relocate-woocommerce-category-description\/","category":[]},{"title":"Adaptive Design Library: All About AI Credits","url":"https:\/\/wpastra.com\/docs\/ai-credits\/","category":["starter-templates"]},{"title":"Managing User Roles and Permissions for the Gutenberg Template Library","url":"https:\/\/wpastra.com\/docs\/gutenberg-template-library-user-roles-permissions\/","category":["custom-code-snippets"]},{"title":"WooCommerce Store with Custom Random Products Sorting Filter","url":"https:\/\/wpastra.com\/docs\/random-products-sorting-filter\/","category":["woocommerce-filters"]},{"title":"Required for Import: Enable Elementor’s Flexbox Container","url":"https:\/\/wpastra.com\/docs\/enable-flexbox-container-from-elementor\/","category":["starter-templates"]},{"title":"Customizing Social Profile Links for Individual Authors in Single Posts","url":"https:\/\/wpastra.com\/docs\/customize-social-profile-links-for-authors\/","category":["blog-filters"]},{"title":"Disable Automatic Updates in WordPress","url":"https:\/\/wpastra.com\/docs\/disable-automatic-updates-in-wordpress\/","category":["installation-and-updates"]},{"title":"Starter Templates and ZipWP Integration","url":"https:\/\/wpastra.com\/docs\/starter-templates-zipwp-integration\/","category":["starter-templates"]},{"title":"Enhanced Blog Archive: Explore What\u2019s New in Astra v4.6.0","url":"https:\/\/wpastra.com\/docs\/blog-archive-improvements\/","category":["blog"]},{"title":"Enhanced Blog Experience: Explore What’s New in Astra v4.6.0","url":"https:\/\/wpastra.com\/docs\/single-post-improvements\/","category":["blog"]},{"title":"Add Last Updated or Published Date to Blog Posts","url":"https:\/\/wpastra.com\/docs\/last-updated-or-published-date\/","category":["blog"]},{"title":"How to Hide Price & Add to Cart for Logged Out Users in Astra Theme","url":"https:\/\/wpastra.com\/docs\/hide-price-and-add-to-cart\/","category":["woocommerce-filters"]},{"title":"How to Change WordPress Post labels to Projects","url":"https:\/\/wpastra.com\/docs\/change-post-labels-to-projects\/","category":["custom-code-snippets"]},{"title":"How to Limit WooCommerce Product Titles","url":"https:\/\/wpastra.com\/docs\/limit-woocommerce-product-titles\/","category":["woocommerce-filters"]},{"title":"Build with AI","url":"https:\/\/wpastra.com\/docs\/build-with-ai\/","category":["starter-templates"]},{"title":"Change “Leave A Comment” title tag","url":"https:\/\/wpastra.com\/docs\/customize-comment-title-tag\/","category":["blog-filters"]},{"title":"Create a Transparent Custom Header","url":"https:\/\/wpastra.com\/docs\/transparent-custom-header\/","category":["site-builder"]},{"title":"How to Show Separate Menus on Different Pages","url":"https:\/\/wpastra.com\/docs\/custom-menus\/","category":["page-headers"]},{"title":"Whitelisting Astra Licensing Server From Your Hosting Firewall","url":"https:\/\/wpastra.com\/docs\/whitelist-astra-license\/","category":["troubleshooting"]},{"title":"How to Add Additional Content on the My Account Login Page","url":"https:\/\/wpastra.com\/docs\/my-account-page-customization\/","category":["woocommerce-free"]},{"title":"Site Builder","url":"https:\/\/wpastra.com\/docs\/site-builder\/","category":["site-builder"]},{"title":"How to change “Leave a Comment” string in WordPress","url":"https:\/\/wpastra.com\/docs\/change-comment-string\/","category":["meta-settings"]},{"title":"How to move the “Previous and Next” link to the top of the “Single Blog Post”","url":"https:\/\/wpastra.com\/docs\/blog-nav-shift\/","category":[]},{"title":"How to Set the “Review” Tab as the Default Active Tab in WooCommerce","url":"https:\/\/wpastra.com\/docs\/default-review-tab\/","category":["woocommerce-free"]},{"title":"How to Remove Astra Post Excerpt from the Post Archive","url":"https:\/\/wpastra.com\/docs\/remove-astra-post-excerpt-from-the-post-archive\/","category":["blog"]},{"title":"How to Change the “HOME” String in Breadcrumbs","url":"https:\/\/wpastra.com\/docs\/change-the-home-string-in-breadcrumbs\/","category":["breadcrumb"]},{"title":"How Astra Pro Supports WooCommerce’s HPOS Upgrade","url":"https:\/\/wpastra.com\/docs\/how-astra-pro-supports-woocommerces-hpos-upgrade\/","category":["woo"]},{"title":"How to Use WhatsApp Social Icon Effectively","url":"https:\/\/wpastra.com\/docs\/add-whatsapp-social-icon\/","category":["header-footer-after-3-0"]},{"title":"How to Activate Live Search","url":"https:\/\/wpastra.com\/docs\/activate-live-search\/","category":["header-footer-after-3-0"]},{"title":"Add Post Filter on Blog Archive Page","url":"https:\/\/wpastra.com\/docs\/post-filter\/","category":["blog-pro"]},{"title":"Featured Image Options for Single Banner Layouts","url":"https:\/\/wpastra.com\/docs\/featured-image-options-for-single-banner-layouts\/","category":["blog-pro"]},{"title":"Secondary Buttons","url":"https:\/\/wpastra.com\/docs\/secondary-buttons\/","category":["global"]},{"title":"Page Level Background Settings","url":"https:\/\/wpastra.com\/docs\/page-level-background-settings\/","category":["colors-background-pro"]},{"title":"How To Disable Right Click in WordPress","url":"https:\/\/wpastra.com\/docs\/disable-right-click-in-wordpress\/","category":["installation-and-updates"]},{"title":"Sticky Sidebar","url":"https:\/\/wpastra.com\/docs\/sticky-sidebar\/","category":["header-footer-after-3-0"]},{"title":"Custom Template in Astra","url":"https:\/\/wpastra.com\/docs\/custom-template\/","category":["site-builder"]},{"title":"How to Customize Button in Gutenberg Editor","url":"https:\/\/wpastra.com\/docs\/how-to-customize-button-in-gutenberg-editor\/","category":[]},{"title":"How to Create a Button with a Link","url":"https:\/\/wpastra.com\/docs\/create-button-with-link\/","category":["general"]},{"title":"How to Use the Astra Button Presets","url":"https:\/\/wpastra.com\/docs\/astra-button-presets\/","category":["global"]},{"title":"Curl Support Missing Error – for the Administrators","url":"https:\/\/wpastra.com\/docs\/curl-support-missing-for-the-administrators\/","category":["starter-templates"]},{"title":"Astra Theme Container Layouts: Revamped Options and Improved User Experience","url":"https:\/\/wpastra.com\/docs\/astra-theme-container-layouts-revamped-options-and-improved-user-experience\/","category":["global"]},{"title":"Understanding Container Style in Astra Theme: Customizing Your Container\u2019s Look","url":"https:\/\/wpastra.com\/docs\/understanding-container-style-in-astra-theme-customizing-your-containers-look\/","category":["global"]},{"title":"Astra 4.2.0-beta.1 : Migrations & Backwards Compatibility","url":"https:\/\/wpastra.com\/docs\/astra-4-2-0-beta-1-migrations-backwards-compatibility\/","category":["installation-and-updates"]},{"title":"Understanding Sidebar Style in Astra Theme: Customizing Your Sidebar’s Look","url":"https:\/\/wpastra.com\/docs\/understanding-sidebar-style-in-astra-theme-customizing-your-sidebars-look\/","category":["global"]},{"title":"Astra WooCommerce CSS overriding Global H2 tag font size on product page","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-css-overriding-global-h2-tag-font-size-on-product-page\/","category":["woocommerce-filters"]},{"title":"How to Fix the Line Height Unit being converted to \u201cEM\u201d?","url":"https:\/\/wpastra.com\/docs\/how-to-fix-the-line-height-unit-being-converted-to-em\/","category":["custom-code-snippets"]},{"title":"Enable\/Disable YouTube videos from Astra admin dashboard","url":"https:\/\/wpastra.com\/docs\/enable-disable-youtube-videos-from-astra-admin-dashboard\/","category":["custom-code-snippets"]},{"title":"How to Create Custom CSS using Inspect Element Tool?","url":"https:\/\/wpastra.com\/docs\/how-to-create-custom-css-using-inspect-element-tool\/","category":[]},{"title":"XMLReader Support Missing – Starter Templates (For the Administrators)","url":"https:\/\/wpastra.com\/docs\/xmlreader-support-missing-starter-templates-for-the-administrators\/","category":[]},{"title":"How to Disable or Change the Position of the Featured Image on the Pages?","url":"https:\/\/wpastra.com\/docs\/how-to-disable-or-change-the-position-of-the-featured-image-on-the-pages\/","category":[]},{"title":"Translating the Advanced Custom Fields with WPML","url":"https:\/\/wpastra.com\/docs\/translating-the-advanced-custom-fields-with-wpml\/","category":["translate-astra"]},{"title":"How to Add Images or Icons in the Navigation Menu","url":"https:\/\/wpastra.com\/docs\/how-to-add-images-or-icons-in-the-navigation-menu\/","category":["general"]},{"title":"Introducing New Filter to Enable\/Disable Rank-Math Theme Support","url":"https:\/\/wpastra.com\/docs\/introducing-new-filter-to-enable-disable-rank-math-theme-support\/","category":["custom-code-snippets"]},{"title":"Basic Debugging Steps of WordPress","url":"https:\/\/wpastra.com\/docs\/basic-debugging-steps-of-wordpress\/","category":["troubleshooting"]},{"title":"Introducing the new Disable Banner Area Meta-Based Option","url":"https:\/\/wpastra.com\/docs\/introducing-the-new-disable-banner-area-meta-based-option\/","category":["astra-theme-walkthrough-docs"]},{"title":"Why Can’t I Access Astra Pro Features After Purchasing the Pro Version?","url":"https:\/\/wpastra.com\/docs\/astra-pro-version-purchased-but-pro-features-still-inaccessible\/","category":["installation-and-updates"]},{"title":"Introducing New Add to Cart Trigger Actions for Shop and Single Product Pages.","url":"https:\/\/wpastra.com\/docs\/introducing-new-add-to-cart-trigger-actions-for-shop-and-single-product-pages\/","category":["woo"]},{"title":"Astra WooCommerce update (version 3.9.0) Global button styling support to WooCommerce store buttons","url":"https:\/\/wpastra.com\/docs\/global-button-styling-now-supports-woocommerce-store-buttons\/","category":[]},{"title":"How to Change the Typography of the Astra Menu","url":"https:\/\/wpastra.com\/docs\/how-to-change-the-typography-of-the-astra-menu\/","category":["typography-pro","astra-customizer-settings"]},{"title":"Display Featured Products instead of Empty Cart","url":"https:\/\/wpastra.com\/docs\/display-featured-products-instead-of-empty-cart\/","category":["woocommerce-free"]},{"title":"Accessibility Controls","url":"https:\/\/wpastra.com\/docs\/accessibility-controls\/","category":["global"]},{"title":"Social Sharing","url":"https:\/\/wpastra.com\/docs\/social-sharing\/","category":["blog-pro"]},{"title":"How to Resolve Update Failed: -1 issue with Starter Templates plugin?","url":"https:\/\/wpastra.com\/docs\/resolve-update-failed-1-issue\/","category":["troubleshooting"]},{"title":"How to Change the Logo on Specific Pages?","url":"https:\/\/wpastra.com\/docs\/change-logo-on-specific-pages\/","category":["custom-code-snippets"]},{"title":"Astra 4.0.0 Nav Menu Module","url":"https:\/\/wpastra.com\/docs\/nav-menu-module\/","category":["nav-menu"]},{"title":"We are facing a temporary issue in importing this template","url":"https:\/\/wpastra.com\/docs\/we-are-facing-a-temporary-issue-in-importing-this-template\/","category":["starter-templates"]},{"title":"How to use dynamic customizer from Astra 4.0.0","url":"https:\/\/wpastra.com\/docs\/how-to-use-dynamic-customizer-from-astra-4-0\/","category":["astra-customizer-settings"]},{"title":"Changing the Post Title’s Tag of the Related Post Section","url":"https:\/\/wpastra.com\/docs\/changing-the-post-titles-tag-of-the-related-post-section\/","category":["astra-header-footer-filters"]},{"title":"Narrow Width – Container Layout","url":"https:\/\/wpastra.com\/docs\/narrow-width-container-layout\/","category":["global"]},{"title":"Quick admin bar navigation to edit custom layout & page header","url":"https:\/\/wpastra.com\/docs\/quick-admin-bar-navigation-to-edit-custom-layout-page-header\/","category":["site-builder-module"]},{"title":"Support Mega Menu for all the Header Builder Menu component","url":"https:\/\/wpastra.com\/docs\/mega-menu-support-for-all-builder-menus\/","category":["installation-and-updates"]},{"title":"Improved Spectra Compatibility","url":"https:\/\/wpastra.com\/docs\/improved-spectra-compatibility\/","category":["astra-theme-walkthrough-docs"]},{"title":"How to add a custom cart button in WordPress","url":"https:\/\/wpastra.com\/docs\/how-to-add-a-custom-cart-button-in-wordpress\/","category":[]},{"title":"Show Password eye icon not visible","url":"https:\/\/wpastra.com\/docs\/show-password-eye-icon-not-visible\/","category":["woocommerce-filters"]},{"title":"Revert support for Single Product’s legacy Gallery layouts","url":"https:\/\/wpastra.com\/docs\/revert-support-for-single-products-legacy-gallery-layouts\/","category":["astra-theme-pro-filters"]},{"title":"Revert support for old Astra cart icon","url":"https:\/\/wpastra.com\/docs\/revert-support-for-old-astra-cart-icon\/","category":["woocommerce-filters"]},{"title":"How to Manage WooCommerce Product Image Width","url":"https:\/\/wpastra.com\/docs\/how-to-manage-woocommerce-product-image-width\/","category":["woo"]},{"title":"How to enable Product Quantity (Plus-Minus)?","url":"https:\/\/wpastra.com\/docs\/how-to-enable-product-quantity-plus-minus\/","category":["woo"]},{"title":"Sticky Header Background Color","url":"https:\/\/wpastra.com\/docs\/sticky-header-background-color\/","category":["header-footer-after-3-0"]},{"title":"How to remove an Author’s name from a Single Blog Post?","url":"https:\/\/wpastra.com\/docs\/remove-authors-name-from-blog-post\/","category":["blog"]},{"title":"How to Highlight the active menu item","url":"https:\/\/wpastra.com\/docs\/how-to-highlight-the-active-menu-item\/","category":["header-footer-after-3-0"]},{"title":"How to Change “Add to Cart” button text?","url":"https:\/\/wpastra.com\/docs\/how-to-change-add-to-cart-button-text\/","category":["translate-astra"]},{"title":"How to change site background color in Astra","url":"https:\/\/wpastra.com\/docs\/how-to-change-site-background-color-in-astra\/","category":["global"]},{"title":"Fix Mobile Usability Issues on Astra","url":"https:\/\/wpastra.com\/docs\/fix-mobile-usability-issues-on-astra\/","category":["general"]},{"title":"How to remove horizontal & vertical gallery layouts from a single product page?","url":"https:\/\/wpastra.com\/docs\/how-to-remove-horizontal-vertical-gallery-layouts-from-a-single-product-page\/","category":["custom-code-snippets"]},{"title":"Transparent Header Menu Color not working with Mobile Breakpoint","url":"https:\/\/wpastra.com\/docs\/transparent-header-menu-color-not-working-with-mobile-breakpoint\/","category":["custom-css"]},{"title":"cURL error 60: unable to install Astra Pro plugin","url":"https:\/\/wpastra.com\/docs\/curl-error-60-unable-to-install-astra-pro-plugin\/","category":["starter-templates"]},{"title":"WP_Error-cURL error 7: Failed to connect to websitedemos.net","url":"https:\/\/wpastra.com\/docs\/wp_error-curl-error-7-failed-to-connect-to-websitedemos-net\/","category":["troubleshooting","starter-templates"]},{"title":"How to create a multisite network and use Astra child theme on it.","url":"https:\/\/wpastra.com\/docs\/how-to-create-a-multisite-network-using-astra-child-theme\/","category":["installation-and-updates"]},{"title":"How to ensure text remains visible during web font load Astra","url":"https:\/\/wpastra.com\/docs\/how-to-ensure-text-remains-visible-during-web-font-load-astra\/","category":["troubleshooting"]},{"title":"How to Create a Sticky Sidebar for Your WooCommerce Shop Page","url":"https:\/\/wpastra.com\/docs\/how-to-create-a-sticky-sidebar-in-astra\/","category":["astra-customizer-settings"]},{"title":"Change Color of Sale Badge – WooCommerce","url":"https:\/\/wpastra.com\/docs\/change-color-of-sale-badge-woocommerce\/","category":["woo"]},{"title":"How to design Footer Background in Astra","url":"https:\/\/wpastra.com\/docs\/how-to-design-footer-background\/","category":["header-footer-after-3-0"]},{"title":"How to disable logo cropping","url":"https:\/\/wpastra.com\/docs\/how-to-disable-logo-cropping\/","category":["astra-customizer-settings"]},{"title":"Misc – WooCommerce","url":"https:\/\/wpastra.com\/docs\/misc-woocommerce\/","category":["woo"]},{"title":"How To add Custom CSS for Specific Pages","url":"https:\/\/wpastra.com\/docs\/how-to-add-custom-css-for-specific-pages\/","category":["general"]},{"title":"How to Create a Mobile Menu","url":"https:\/\/wpastra.com\/docs\/create-a-mobile-menu\/","category":["header-footer-after-3-0"]},{"title":"Uploaded file exceeds the upload_max_filesize directive in php.ini","url":"https:\/\/wpastra.com\/docs\/uploaded-file-exceeds-the-upload_max_filesize-directive-in-php-ini\/","category":["troubleshooting"]},{"title":"What are the Best Astra Settings for Elementor?","url":"https:\/\/wpastra.com\/docs\/what-are-the-best-astra-settings-for-elementor\/","category":["meta-settings"]},{"title":"Astra theme string translation for WooCommerce","url":"https:\/\/wpastra.com\/docs\/astra-theme-string-translation-for-woocommerce\/","category":["translate-astra"]},{"title":"How To Fix Not Being Able To Edit Submenu Colors, Above and Below Header?","url":"https:\/\/wpastra.com\/docs\/how-to-fix-not-being-able-to-edit-submenu-colors-above-and-below-header\/","category":["general"]},{"title":"How to Import \/ Export Astra Customizer Settings","url":"https:\/\/wpastra.com\/docs\/how-to-import-export-astra-customizer-settings\/","category":["astra-customizer-settings"]},{"title":"How to disable cart fragments on WooCommerce?","url":"https:\/\/wpastra.com\/docs\/how-to-disable-cart-fragments-on-woocommerce\/","category":["woo"]},{"title":"How to add custom CSS and JavaScript to Astra theme","url":"https:\/\/wpastra.com\/docs\/how-to-add-custom-css-and-javascript-to-astra-theme\/","category":["custom-css"]},{"title":"How to add custom post type with the Astra theme","url":"https:\/\/wpastra.com\/docs\/how-to-add-custom-post-type-with-the-astra-theme\/","category":["blog-pro"]},{"title":"How to Change the Menu Color in Astra Theme","url":"https:\/\/wpastra.com\/docs\/change-menu-color-in-astra\/","category":["colors-background-pro"]},{"title":"How to use the color palette of the Astra theme","url":"https:\/\/wpastra.com\/docs\/how-to-use-the-color-palette-of-the-astra-theme\/","category":["astra-customizer-settings","global"]},{"title":"How to create a correct format svg logo?","url":"https:\/\/wpastra.com\/docs\/how-to-create-a-correct-format-svg-logo\/","category":["general"]},{"title":"How to translate the WooCommerce string?","url":"https:\/\/wpastra.com\/docs\/how-to-translate-the-woocommerce-string\/","category":["translate-astra"]},{"title":"SVG Icon","url":"https:\/\/wpastra.com\/docs\/svg-icon\/","category":["troubleshooting"]},{"title":"Using Advanced Custom Fields with Astra","url":"https:\/\/wpastra.com\/docs\/using-advanced-custom-fields-with-astra\/","category":["general"]},{"title":"How to add a wishlist button to your WooCommerce Website","url":"https:\/\/wpastra.com\/docs\/how-to-add-a-wishlist-button-to-your-woocommerce-website\/","category":["general","woo"]},{"title":"Error 406 while importing Starter Templates on your WordPress website","url":"https:\/\/wpastra.com\/docs\/error-406-while-importing-starter-templates-on-your-wordpress-website\/","category":["starter-templates"]},{"title":"How to import Starter Templates with WP CLI Command","url":"https:\/\/wpastra.com\/docs\/how-to-import-starter-templates-with-wp-cli-command\/","category":["starter-templates"]},{"title":"Auto Update Plugin Support","url":"https:\/\/wpastra.com\/docs\/auto-update-plugin-support\/","category":["installation-and-updates"]},{"title":"The blank screen in the Customizer area\u00a0","url":"https:\/\/wpastra.com\/docs\/the-blank-screen-in-the-customizer-area\/","category":["astra-customizer-settings","starter-templates"]},{"title":"Mixed Content","url":"https:\/\/wpastra.com\/docs\/mixed-content\/","category":["general","troubleshooting"]},{"title":"How to check JavaScript errors\/conflicts?","url":"https:\/\/wpastra.com\/docs\/how-to-check-javascript-errors-conflicts\/","category":["troubleshooting"]},{"title":"How Astra is tuned for performance and is the fastest theme?","url":"https:\/\/wpastra.com\/docs\/how-astra-is-tuned-for-performance-and-is-the-fastest-theme\/","category":["global"]},{"title":"Transparent Header for HFB","url":"https:\/\/wpastra.com\/docs\/transparent-header-for-hfb\/","category":["header-footer-after-3-0"]},{"title":"How ‘Enable Filter Accordion’ Works","url":"https:\/\/wpastra.com\/docs\/how-enable-filter-accordion-works\/","category":["woo"]},{"title":"How to improve the CLS score with the Astra theme","url":"https:\/\/wpastra.com\/docs\/how-to-improve-the-cls-score-with-the-astra-theme\/","category":["global"]},{"title":"System requirement for Astra Theme","url":"https:\/\/wpastra.com\/docs\/system-requirement-for-astra-theme\/","category":["installation-and-updates"]},{"title":"WooCommerce hooks","url":"https:\/\/wpastra.com\/docs\/woocommerce-hooks\/","category":["woocommerce-free"]},{"title":"Set shop page as homepage – Woocommerce","url":"https:\/\/wpastra.com\/docs\/set-shop-page-as-homepage-woocommerce\/","category":["woocommerce-free"]},{"title":"Astra – Customize the submenu","url":"https:\/\/wpastra.com\/docs\/astra-customize-the-submenu\/","category":["astra-customizer-settings"]},{"title":"Remove default stretched block layout spacing","url":"https:\/\/wpastra.com\/docs\/remove-default-stretched-block-layout-spacing\/","category":["custom-code-snippets"]},{"title":"Improvements on the CheckOut page(Astra 3.9.0)","url":"https:\/\/wpastra.com\/docs\/improvements-on-the-checkout-pageastra-3-9-0\/","category":["installation-and-updates"]},{"title":"Improvments on the Cart Page(Astra 3.9.0)","url":"https:\/\/wpastra.com\/docs\/improvments-on-the-cart-page\/","category":["installation-and-updates"]},{"title":"Astra WooCommerce update (version 3.9.0) Misc Update","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-update-version-3-9-0-misc-update\/","category":["installation-and-updates"]},{"title":"Astra WooCommerce update (version 3.9.0) My Account Page","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-update-version-3-9-0-my-account-page\/","category":["installation-and-updates"]},{"title":"Astra WooCommerce update (version 3.9.0) Single Product Page","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-update-version-3-9-0-single-product-page\/","category":["installation-and-updates"]},{"title":"Astra WooCommerce update (version 3.9.0) Shop Page","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-update-version-3-9-0-shop-page\/","category":["installation-and-updates"]},{"title":"Astra WooCommerce update (version 3.9.0)","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-update-version-3-9-0\/","category":["installation-and-updates"]},{"title":"Improvement: WooCommerce – Modify the Cart label design","url":"https:\/\/wpastra.com\/docs\/improvement-woocommerce-modify-the-cart-label-design\/","category":["installation-and-updates"]},{"title":"Improved Block Editor Experience with Astra","url":"https:\/\/wpastra.com\/docs\/improved-block-editor-experience\/","category":["general"]},{"title":"How to Remove Google Fonts Suggestions in Astra Theme?","url":"https:\/\/wpastra.com\/docs\/remove-google-fonts-suggestions-in-astra-theme\/","category":["custom-code-snippets"]},{"title":"How to Resolve Repeater Fields Not Working in Widget Block Editor?","url":"https:\/\/wpastra.com\/docs\/resolving-repeater-fields-not-working-in-widget-block-editor\/","category":["troubleshooting"]},{"title":"Enhancement: Applying Content Background to Full-Width Layouts","url":"https:\/\/wpastra.com\/docs\/applying-content-background-to-full-width-layouts\/","category":["colors-background-pro"]},{"title":"Move Related Posts Below Comments","url":"https:\/\/wpastra.com\/docs\/move-related-posts-below-comments\/","category":["astra-theme-pro-filters"]},{"title":"Disable Astra Global Colors In Elementor","url":"https:\/\/wpastra.com\/docs\/disable-astra-global-colors-in-elementor\/","category":["astra-theme-pro-filters"]},{"title":"Remove Woocommerce Product Category Archive Title","url":"https:\/\/wpastra.com\/docs\/remove-woocommerce-category-archive-title\/","category":["woocommerce-filters"]},{"title":"Remove Astra Customization for WooCommerce","url":"https:\/\/wpastra.com\/docs\/remove-astra-customization-for-woocommerce\/","category":["woocommerce-filters"]},{"title":"How To Change Web Stories Position","url":"https:\/\/wpastra.com\/docs\/change-web-stories-position\/","category":["global"]},{"title":"Manage Astra Pro With Composer","url":"https:\/\/wpastra.com\/docs\/manage-astra-pro-with-composer\/","category":["general"]},{"title":"How to Turn Astra Website Multilingual with TranslatePress?","url":"https:\/\/wpastra.com\/docs\/turn-astra-multilingual-with-translatepress\/","category":["translate-astra"]},{"title":"Starter Templates FAQs","url":"https:\/\/wpastra.com\/docs\/starter-templates-faqs\/","category":["starter-templates"]},{"title":"Building Your Website With Starter Templates","url":"https:\/\/wpastra.com\/docs\/building-your-website-with-starter-templates\/","category":["starter-templates"]},{"title":"Starter Templates Importing","url":"https:\/\/wpastra.com\/docs\/starter-templates-importing\/","category":["starter-templates"]},{"title":"Getting Started With Starter Templates","url":"https:\/\/wpastra.com\/docs\/getting-started-with-starter-templates\/","category":["starter-templates"]},{"title":"Creating Your Header and Footer With Astra or Elementor?","url":"https:\/\/wpastra.com\/docs\/astra-or-elementor-header-and-footer\/","category":["header-footer-after-3-0"]},{"title":"Gutenberg Editor And Frontend UI Improvements With Astra (3.7.4)","url":"https:\/\/wpastra.com\/docs\/gutenberg-ui-improvements-with-astra\/","category":["astra-theme-pro-filters"]},{"title":"Replace Deprecated Astra Theme and Astra Pro Hooks","url":"https:\/\/wpastra.com\/docs\/deprecated-astra-hooks\/","category":["astra-theme-pro-filters","astra-header-footer-filters"]},{"title":"Hide the Text by Setting the Font Size to Zero","url":"https:\/\/wpastra.com\/docs\/setting-font-size-to-zero\/","category":["astra-theme-pro-filters"]},{"title":"How to Translate Categories, Tags, and Astra Strings with Polylang","url":"https:\/\/wpastra.com\/docs\/translate-categories-tags-and-strings-with-polylang\/","category":["translate-astra"]},{"title":"What To Do When Product Count Is Not Visible on Mini Cart With Astra Pro?","url":"https:\/\/wpastra.com\/docs\/product-count-color\/","category":["woo","troubleshooting"]},{"title":"How to Roll Back to A Previous Version of Astra?","url":"https:\/\/wpastra.com\/docs\/roll-back-to-previous-astra-version\/","category":["troubleshooting"]},{"title":"How to Turn Astra Website Multilingual with Polylang?","url":"https:\/\/wpastra.com\/docs\/turn-astra-multilingual-with-polylang\/","category":["translate-astra"]},{"title":"Starter Templates – Wireframe Blocks","url":"https:\/\/wpastra.com\/docs\/starter-templates-wireframe-blocks\/","category":["starter-templates"]},{"title":"How to Enable Debugging in WordPress (Debug Mode)","url":"https:\/\/wpastra.com\/docs\/enable-debugging-in-wordpress\/","category":["global"]},{"title":"How To Override Astra\u2019s theme.json in Child Theme?","url":"https:\/\/wpastra.com\/docs\/override-astras-theme-json\/","category":["general"]},{"title":"How To Hide Quantity Number When the Woocommerce Cart Is Empty?","url":"https:\/\/wpastra.com\/docs\/hide-quantity-when-cart-is-empty\/","category":["woocommerce-filters"]},{"title":"How to Display the Post Category as a Related Posts Title?","url":"https:\/\/wpastra.com\/docs\/display-category-as-related-posts-title\/","category":["blog-filters"]},{"title":"How To Remove the Astra Header From Entire Site?","url":"https:\/\/wpastra.com\/docs\/remove-astra-header-from-entire-site\/","category":["astra-header-footer-filters"]},{"title":"How To Change Navigation Links Text for a Blog Archive?","url":"https:\/\/wpastra.com\/docs\/replace-blog-archive-navigation-strings\/","category":["blog-filters"]},{"title":"Frequently Asked Questions – VIP Care","url":"https:\/\/wpastra.com\/docs\/faqs-vip-care\/","category":["account-and-store"]},{"title":"How To Remove Underlined Content Links on Buttons and Specifics Classes?","url":"https:\/\/wpastra.com\/docs\/remove-underlined-content-links\/","category":["astra-theme-pro-filters"]},{"title":"Astra Typography Presets","url":"https:\/\/wpastra.com\/docs\/astra-typography-presets\/","category":["global"]},{"title":"Astra Global Color Palette","url":"https:\/\/wpastra.com\/docs\/astra-global-color-palette-settings\/","category":["global"]},{"title":"How To Disable the Block Editor Support for Widgets","url":"https:\/\/wpastra.com\/docs\/disable-widget-block-editor-support\/","category":["astra-theme-pro-filters"]},{"title":"How To Enable Design Options for Header and Footer Widgets in Block-Based Editor","url":"https:\/\/wpastra.com\/docs\/enable-astra-widget-design-options\/","category":["astra-header-footer-filters"]},{"title":"Restrict Search Results to WooCommerce Products Only","url":"https:\/\/wpastra.com\/docs\/restrict-search-results-products\/","category":["woocommerce-filters"]},{"title":"Fix Swap Sections Not Working on Mobile (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/fix-swap-sections-not-working\/","category":["custom-code-snippets"]},{"title":"Remove Spacing Around Elementor Pro TOC Widget","url":"https:\/\/wpastra.com\/docs\/remove-spacing-elementor-toc\/","category":["astra-theme-pro-filters"]},{"title":"Fix Woocommerce Cart Becoming Transparent With Header Builder","url":"https:\/\/wpastra.com\/docs\/fix-transparent-woocommerce-cart\/","category":["woocommerce-filters"]},{"title":"How To Fix Right Margin for the Footer Widget Element","url":"https:\/\/wpastra.com\/docs\/fix-footer-widget-right-margin\/","category":["header-footer-after-3-0"]},{"title":"How to Add Elementor Template to the Mega Menu?","url":"https:\/\/wpastra.com\/docs\/add-template-to-mega-menu\/","category":["nav-menu"]},{"title":"The Recommended Size for Featured Image Upload","url":"https:\/\/wpastra.com\/docs\/recommended-size-for-featured-image\/","category":["general","blog"]},{"title":"Why Doesn\u2019t Parallax Scrolling Work on Mobile?","url":"https:\/\/wpastra.com\/docs\/parallax-not-working-on-mobile\/","category":["general"]},{"title":"How To Fix Horizontal Scrollbar on Mobile When Using Elementor?","url":"https:\/\/wpastra.com\/docs\/fix-horizontal-scrollbar-on-mobile\/","category":["troubleshooting"]},{"title":"How To Apply New Default Button Padding Values?","url":"https:\/\/wpastra.com\/docs\/apply-default-button-padding\/","category":["astra-theme-pro-filters"]},{"title":"Responsive Editing With the Astra Theme","url":"https:\/\/wpastra.com\/docs\/responsive-editing-with-astra-theme\/","category":["general"]},{"title":"How To Hide Astra Settings for Specific User Roles?","url":"https:\/\/wpastra.com\/docs\/hide-astra-settings-for-user-roles\/","category":["astra-theme-pro-filters"]},{"title":"How To Create a Header With a Centrally Positioned Logo With Astra?","url":"https:\/\/wpastra.com\/docs\/create-header-with-centrally-positioned-logo\/","category":["header-footer-after-3-0"]},{"title":"Manage Your Site Identity With Astra’s Header Builder","url":"https:\/\/wpastra.com\/docs\/manage-site-identity-and-logo\/","category":["header-footer-after-3-0"]},{"title":"How to Change the Heading Tag for the Related Posts Title?","url":"https:\/\/wpastra.com\/docs\/change-tag-for-related-posts-title\/","category":["astra-header-footer-filters"]},{"title":"Host Google Fonts Locally – Performance Is the Key","url":"https:\/\/wpastra.com\/docs\/performance-is-the-key\/","category":["astra-theme-walkthrough-docs"]},{"title":"How To Improve CLS For the SVG Logo?","url":"https:\/\/wpastra.com\/docs\/improve-cls-for-svg-logo\/","category":["troubleshooting"]},{"title":"How to Fix Font-Weight Not Applying To Widget Titles?","url":"https:\/\/wpastra.com\/docs\/font-weight-for-widget-titles\/","category":["astra-theme-pro-filters"]},{"title":"How to Self-Host Google Fonts in Astra?","url":"https:\/\/wpastra.com\/docs\/self-hosted-google-fonts\/","category":["astra-theme-pro-filters"]},{"title":"Gutenberg Plugin Causing Issues With the Astra Customizer","url":"https:\/\/wpastra.com\/docs\/astra-customizer-options-unavailable\/","category":["troubleshooting"]},{"title":"Change the “Shopping Cart” Text for WooCommerce & EDD Mobile Header Cart","url":"https:\/\/wpastra.com\/docs\/update-mobile-cart-title\/","category":["woocommerce-filters"]},{"title":"Modify Your PHP Configuration","url":"https:\/\/wpastra.com\/docs\/modify-your-php-configuration\/","category":["general"]},{"title":"Could not store XML file in \/wp-content\/ folder?","url":"https:\/\/wpastra.com\/docs\/could-not-store-files-in-wp-content-folder\/","category":["starter-templates"]},{"title":"How to Fix 5XX Error While Importing a Starter Template?","url":"https:\/\/wpastra.com\/docs\/5xx-error-starter-templates\/","category":["starter-templates"]},{"title":"How to Fix Blocked Requests Error While Importing a Starter Template?","url":"https:\/\/wpastra.com\/docs\/blocked-requests-error-starter-templates\/","category":["starter-templates"]},{"title":"How to Fix Operation Timed Error While Importing a Starter Template?","url":"https:\/\/wpastra.com\/docs\/operation-timed-error-starter-templates\/","category":["starter-templates"]},{"title":"How to Fix Starter Template Importing Issues","url":"https:\/\/wpastra.com\/docs\/fix-starter-template-importing-issues\/","category":["starter-templates"]},{"title":"How to Remove Border Around the Cart? (Issue After Updating to Astra 3.4)","url":"https:\/\/wpastra.com\/docs\/remove-border-around-cart\/","category":["woo"]},{"title":"Getting the Most Out of Astra Theme","url":"https:\/\/wpastra.com\/docs\/getting-the-most-with-astra\/","category":["astra-theme-walkthrough-docs"]},{"title":"How To Build Quick Sites With Astra?","url":"https:\/\/wpastra.com\/docs\/build-quick-websites\/","category":["astra-theme-walkthrough-docs"]},{"title":"See Other Customizer Options","url":"https:\/\/wpastra.com\/docs\/other-customizer-options\/","category":["astra-theme-walkthrough-docs"]},{"title":"Build Your Footer","url":"https:\/\/wpastra.com\/docs\/footer-builder-options\/","category":["astra-theme-walkthrough-docs"]},{"title":"Add Your Sidebars","url":"https:\/\/wpastra.com\/docs\/how-to-add-sidebars\/","category":["astra-theme-walkthrough-docs"]},{"title":"Set Up Your Blog","url":"https:\/\/wpastra.com\/docs\/how-to-setup-blog\/","category":["astra-theme-walkthrough-docs"]},{"title":"Find the Way With Breadcrumbs","url":"https:\/\/wpastra.com\/docs\/using-breadcrumbs\/","category":["astra-theme-walkthrough-docs"]},{"title":"Build Your Header","url":"https:\/\/wpastra.com\/docs\/header-builder-options\/","category":["astra-theme-walkthrough-docs"]},{"title":"Style Your Website With Global Settings","url":"https:\/\/wpastra.com\/docs\/style-with-global-settings\/","category":["astra-theme-walkthrough-docs"]},{"title":"This Is Your Customizer","url":"https:\/\/wpastra.com\/docs\/manage-customizer-options\/","category":["astra-theme-walkthrough-docs"]},{"title":"Astra Theme Walkthrough","url":"https:\/\/wpastra.com\/docs\/astra-theme-walkthrough\/","category":["astra-theme-walkthrough-docs"]},{"title":"Display Related Posts on Single Blog Post","url":"https:\/\/wpastra.com\/docs\/display-related-posts\/","category":["blog"]},{"title":"How do I check my Support Ticket History?","url":"https:\/\/wpastra.com\/docs\/check-support-ticket-history\/","category":["account-and-store"]},{"title":"How to Resolve Fatal Error: Call to Undefined function ctype_xdigit()","url":"https:\/\/wpastra.com\/docs\/fatal-error-ctype-xdigit\/","category":["installation-and-updates","troubleshooting"]},{"title":"Toggle Button for Desktop – Header Builder Element","url":"https:\/\/wpastra.com\/docs\/toggle-button-for-desktop\/","category":["header-footer-after-3-0"]},{"title":"Astra\u2019s Default Font Icons Replaced With SVG","url":"https:\/\/wpastra.com\/docs\/ast-font-icons-to-svg\/","category":["general"]},{"title":"Fix Spacing Issues in Gutenberg Blocks","url":"https:\/\/wpastra.com\/docs\/fix-spacing-gb-blocks\/","category":["astra-theme-pro-filters"]},{"title":"Optimize Astra HTML and CSS – For Existing Astra Users (Before v3.3)","url":"https:\/\/wpastra.com\/docs\/optimize-css-html-before-3-3\/","category":["general"]},{"title":"FAQs – Astra Pro 3.2 – Custom Layout Inside Pages\/Posts","url":"https:\/\/wpastra.com\/docs\/faqs-astra-pro-3-2\/","category":["general"]},{"title":"Inside Page\/Post Content Custom Layouts","url":"https:\/\/wpastra.com\/docs\/custom-layouts-inside-page\/","category":["site-builder-module"]},{"title":"How to Remove the White Bars in the Safari Browser on iPhone X and Higher","url":"https:\/\/wpastra.com\/docs\/remove-white-bars-on-safari\/","category":["general"]},{"title":"Sorry, You Are Not Allowed To Access This Page","url":"https:\/\/wpastra.com\/docs\/not-allowed-to-access-page\/","category":["installation-and-updates"]},{"title":"Getting Started with Business Toolkit","url":"https:\/\/wpastra.com\/docs\/getting-started-business-toolkit\/","category":["installation-and-updates"]},{"title":"Getting Started With Essential Toolkit","url":"https:\/\/wpastra.com\/docs\/getting-started-with-essential-toolkit\/","category":["installation-and-updates"]},{"title":"Can’t See Newly Added Templates in Starter Templates Library?","url":"https:\/\/wpastra.com\/docs\/sync-starter-templates\/","category":["starter-templates"]},{"title":"Filter to Remove Starter Templates Button on Post Types","url":"https:\/\/wpastra.com\/docs\/filter-to-remove-starter-templates-button\/","category":["starter-templates"]},{"title":"Using Language Switcher Element with WPML","url":"https:\/\/wpastra.com\/docs\/using-language-switcher\/","category":["header-footer-after-3-0"]},{"title":"Importing Gutenberg Pages, Patterns, and Wireframes","url":"https:\/\/wpastra.com\/docs\/import-gb-pages-patterns\/","category":["starter-templates"]},{"title":"Revamped Astra’s Customizer","url":"https:\/\/wpastra.com\/docs\/revamped-astra-customizer\/","category":["header-footer-after-3-0","general"]},{"title":"Clone and Delete Elements in Header Footer Builder","url":"https:\/\/wpastra.com\/docs\/clone-delete-hf-elements\/","category":["header-footer-after-3-0"]},{"title":"How to Clear Astra’s Cache?","url":"https:\/\/wpastra.com\/docs\/clear-astra-cache\/","category":["troubleshooting"]},{"title":"FAQs – Astra Header\/Footer Builder – Existing Customers","url":"https:\/\/wpastra.com\/docs\/faqs-hf-builder-old-users\/","category":["header-footer-after-3-0"]},{"title":"How To Create Mobile Header With Astra Header Builder?","url":"https:\/\/wpastra.com\/docs\/create-mobile-header-with-header-builder\/","category":["header-footer-after-3-0"]},{"title":"How To Create a Footer With Astra Footer Builder?","url":"https:\/\/wpastra.com\/docs\/create-footer-with-footer-builder\/","category":["header-footer-after-3-0"]},{"title":"How To Create a Header With Astra Header Builder?","url":"https:\/\/wpastra.com\/docs\/create-header-with-header-builder\/","category":["header-footer-after-3-0"]},{"title":"Add Multiple Elements in Header Footer Builder","url":"https:\/\/wpastra.com\/docs\/multiple-elements-in-header-footer\/","category":["header-footer-after-3-0"]},{"title":"FAQs – Astra Header\/Footer Builder","url":"https:\/\/wpastra.com\/docs\/faqs-astra-header-footer-builder\/","category":["header-footer-after-3-0"]},{"title":"Elements in Header\/Footer Builder With Astra Theme and Astra Pro","url":"https:\/\/wpastra.com\/docs\/elements-in-header-footer-builder\/","category":["header-footer-after-3-0"]},{"title":"How to Add Gutenberg Design Compatibility?","url":"https:\/\/wpastra.com\/docs\/gb-design-compatibility\/","category":["general"]},{"title":"New Color Controls in Astra theme & Astra Pro Addon","url":"https:\/\/wpastra.com\/docs\/new-color-controls-in-astra\/","category":["general"]},{"title":"Astra Pro Shortcodes Reference","url":"https:\/\/wpastra.com\/docs\/astra-pro-shortcodes-reference\/","category":[]},{"title":"Filter to Add Global Button Settings Support for WooCommerce Buttons","url":"https:\/\/wpastra.com\/docs\/global-button-support-for-woocommerce-buttons\/","category":["woocommerce-filters"]},{"title":"Blog Featured Image Size Not Working \/ Error in Image Processing Library","url":"https:\/\/wpastra.com\/docs\/blog-featured-image-size-issues\/","category":["troubleshooting","blog-filters"]},{"title":"Unable to find “No Toggle” Menu Style?","url":"https:\/\/wpastra.com\/docs\/unable-to-find-no-toggle-menu-style\/","category":["mobile-header"]},{"title":"Filters to Support CPTs for Blog Meta and Single Blog Meta","url":"https:\/\/wpastra.com\/docs\/add-blog-meta-support-cpts\/","category":["blog-filters"]},{"title":"Header Improvements in Astra!","url":"https:\/\/wpastra.com\/docs\/header-improvements-in-astra\/","category":["header-sections"]},{"title":"Filter to Add Support for Gutenberg Cover and Group blocks","url":"https:\/\/wpastra.com\/docs\/support-for-gutenberg-cover-and-group-blocks\/","category":["astra-theme-pro-filters"]},{"title":"Change Footer Widget Title’s Heading Tag","url":"https:\/\/wpastra.com\/docs\/change-footer-widget-title-heading-tag\/","category":["astra-header-footer-filters"]},{"title":"How to Modify\/Change the Quick View text?","url":"https:\/\/wpastra.com\/docs\/modify-quick-view-text\/","category":["woocommerce-filters"]},{"title":"Deprecated Google Fonts Filter","url":"https:\/\/wpastra.com\/docs\/deprecated-google-fonts-filter\/","category":["astra-theme-pro-filters"]},{"title":"Mountain Template With Elementor Theme Style","url":"https:\/\/wpastra.com\/docs\/mountain-template-elementor-theme-style\/","category":["starter-templates"]},{"title":"Plugin Installation Failed – Multisite","url":"https:\/\/wpastra.com\/docs\/plugin-installation-failed-multisite\/","category":["starter-templates"]},{"title":"How to Modify Read Time Text on Blog and Single Post Page?","url":"https:\/\/wpastra.com\/docs\/modify-read-time-text\/","category":[]},{"title":"System Requirements – Starter Templates","url":"https:\/\/wpastra.com\/docs\/system-requirements-starter-templates\/","category":["starter-templates"]},{"title":"Custom Layout not Rendering Correctly with Beaver Builder?","url":"https:\/\/wpastra.com\/docs\/custom-layouts-rendering-issue\/","category":["astra-theme-pro-filters"]},{"title":"Unable to Upload the Astra Pro ZIP File because it is Unzipped During the Download?","url":"https:\/\/wpastra.com\/docs\/unable-to-upload-the-astra-pro-zip-file\/","category":["installation-and-updates"]},{"title":"How to Update Responsive Breakpoints for Tablet+Mobile in Astra?","url":"https:\/\/wpastra.com\/docs\/set-update-breakpoints-tablet-mobile-in-astra\/","category":["header-footer-after-3-0","astra-header-footer-filters"]},{"title":"Usage Tracking","url":"https:\/\/wpastra.com\/docs\/usage-tracking\/","category":["general"]},{"title":"How to Install Starter Templates (Free) Plugin?","url":"https:\/\/wpastra.com\/docs\/install-free-starter-templates\/","category":["starter-templates"]},{"title":"Starter Templates – Restore Customizer Backup","url":"https:\/\/wpastra.com\/docs\/restore-customizer-backup\/","category":["starter-templates"]},{"title":"How to Update Your Payment Method?","url":"https:\/\/wpastra.com\/docs\/update-payment-method\/","category":[]},{"title":"How to Setup Custom Adobe Fonts (Typekit) Plugin?","url":"https:\/\/wpastra.com\/docs\/setup-custom-adobe-fonts-typekit-plugin\/","category":["general"]},{"title":"Can I Import Starter Templates Site on Existing Website?","url":"https:\/\/wpastra.com\/docs\/import-templates-on-existing-website\/","category":["starter-templates"]},{"title":"Premium Starter Templates – Install and Activate License","url":"https:\/\/wpastra.com\/docs\/install-premium-starter-templates\/","category":["starter-templates"]},{"title":"Starter Templates – Requires plugins missing","url":"https:\/\/wpastra.com\/docs\/plugin-installation-failed\/","category":["starter-templates"]},{"title":"Filter to Remove Link From Featured Images on Blog Page","url":"https:\/\/wpastra.com\/docs\/remove-featured-image-link-on-blog-page\/","category":["blog-filters"]},{"title":"Set Parallax Effect on Responsive Devices with Page Header","url":"https:\/\/wpastra.com\/docs\/parallax-page-header\/","category":["page-headers"]},{"title":"Starter Templates – Free Images from Pixabay","url":"https:\/\/wpastra.com\/docs\/starter-templates-pixabay-images\/","category":["starter-templates"]},{"title":"Starter Templates – Elementor Popup","url":"https:\/\/wpastra.com\/docs\/starter-templates-elementor-popup\/","category":["starter-templates"]},{"title":"Update Required Plugins – Starter Templates","url":"https:\/\/wpastra.com\/docs\/update-required-plugins\/","category":["starter-templates"]},{"title":"XMLReader Support Missing – Starter Templates","url":"https:\/\/wpastra.com\/docs\/xmlreader-missing\/","category":["starter-templates"]},{"title":"Disable Debug Mode – Starter Templates","url":"https:\/\/wpastra.com\/docs\/disable-debug-mode\/","category":["starter-templates"]},{"title":"Required File Permissions Missing – Starter Templates","url":"https:\/\/wpastra.com\/docs\/required-file-permissions\/","category":["starter-templates"]},{"title":"cURL Support Missing – Starter Templates","url":"https:\/\/wpastra.com\/docs\/curl-support-missing\/","category":["starter-templates"]},{"title":"Starter Templates with Other Themes","url":"https:\/\/wpastra.com\/docs\/starter-templates-with-other-themes\/","category":["starter-templates"]},{"title":"How to Import A Complete Site With Starter Templates?","url":"https:\/\/wpastra.com\/docs\/starter-templates-complete-site\/","category":["starter-templates"]},{"title":"Starter Templates \u2014 Basics and FAQs","url":"https:\/\/wpastra.com\/docs\/starter-templates-basics-faqs\/","category":["starter-templates"]},{"title":"How to Import Single Page With Starter Templates?","url":"https:\/\/wpastra.com\/docs\/import-single-template\/","category":["starter-templates"]},{"title":"How to Enable Astra Comment Box on Custom Post Types?","url":"https:\/\/wpastra.com\/docs\/enable-astra-comment-box-on-cpt\/","category":["general"]},{"title":"Astra 2.2 for Existing Users","url":"https:\/\/wpastra.com\/docs\/astra-2-2-for-existing-users\/","category":["general"]},{"title":"How to Remove Featured Image Link on Archive Page?","url":"https:\/\/wpastra.com\/docs\/remove-featured-image-link-on-archive-page\/","category":["general","blog-filters"]},{"title":"Display Settings of Custom Layouts in Astra Pro","url":"https:\/\/wpastra.com\/docs\/display-rules-in-astra\/","category":["site-builder-module"]},{"title":"Get SkillJet Access – Brainstorm Force Customer","url":"https:\/\/wpastra.com\/docs\/unlock-skilljet-access\/","category":["general"]},{"title":"How to Disable Product Quantity (Plus-Minus) Buttons?","url":"https:\/\/wpastra.com\/docs\/disable-plus-minus-buttons\/","category":["woocommerce-filters"]},{"title":"Change Placeholder for Search Box (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/change-search-placeholder\/","category":["astra-header-footer-filters"]},{"title":"How to Disable Schema Markup Added by Astra?","url":"https:\/\/wpastra.com\/docs\/disable-schema-markup\/","category":["astra-theme-pro-filters"]},{"title":"Change the String “Search Results For”","url":"https:\/\/wpastra.com\/docs\/change-search-string\/","category":["astra-header-footer-filters"]},{"title":"Restrict Search Results to Posts Only","url":"https:\/\/wpastra.com\/docs\/restrict-search-results-post\/","category":["astra-theme-pro-filters"]},{"title":"How to Remove Page Header Title?","url":"https:\/\/wpastra.com\/docs\/remove-page-header-title\/","category":["page-headers"]},{"title":"Naming Convention for Astra 2.1.0 CSS File(s)","url":"https:\/\/wpastra.com\/docs\/naming-convention-astra-2-1\/","category":["general"]},{"title":"How to Get Started with CSS File Generation","url":"https:\/\/wpastra.com\/docs\/enable-css-file-generation\/","category":["general"]},{"title":"Browser Support by Astra","url":"https:\/\/wpastra.com\/docs\/browser-support-by-astra\/","category":["general"]},{"title":"Structuring Shop WooCommerce Page","url":"https:\/\/wpastra.com\/docs\/shop-woocommerce-2\/","category":["woo"]},{"title":"How to Deal with Update Issues in Astra Theme and Astra Pro Addon?","url":"https:\/\/wpastra.com\/docs\/overcoming-update-issues-in-astra\/","category":["troubleshooting"]},{"title":"How to Manage License on Store?","url":"https:\/\/wpastra.com\/docs\/how-to-manage-license-on-store\/","category":["account-and-store"]},{"title":"How to Update Astra Theme Manually?","url":"https:\/\/wpastra.com\/docs\/update-theme-manually\/","category":["installation-and-updates"]},{"title":"How to Change the Heading Tag for the Page\/Post Titles?","url":"https:\/\/wpastra.com\/docs\/change-heading-tag-for-post-title\/","category":["astra-header-footer-filters"]},{"title":"Astra Compatibility with LearnDash Version 3.0","url":"https:\/\/wpastra.com\/docs\/astra-compatibility-with-learndash-3-0\/","category":["learndash-astra-pro-modules","learndash"]},{"title":"Modify font-display Property Value","url":"https:\/\/wpastra.com\/docs\/modify-font-display-property-value\/","category":["astra-theme-pro-filters"]},{"title":"How to Change HTML tag for Site Title and Tagline?","url":"https:\/\/wpastra.com\/docs\/change-html-tag-for-title-and-tagline\/","category":["astra-header-footer-filters"]},{"title":"Why font-display property is added to Astra?","url":"https:\/\/wpastra.com\/docs\/font-display-property-in-astra\/","category":[]},{"title":"Disable All Meta Settings of Page\/Post by Default","url":"https:\/\/wpastra.com\/docs\/disable-all-meta-settings-of-page-post-by-default\/","category":["astra-theme-pro-filters"]},{"title":"How to Remove Inline CSS from Astra?","url":"https:\/\/wpastra.com\/docs\/remove-inline-css-from-astra\/","category":["astra-theme-pro-filters"]},{"title":"How To Add RTL CSS via Child Theme?","url":"https:\/\/wpastra.com\/docs\/rtl-css-via-child-theme\/","category":["general"]},{"title":"How to Change Previous and Next Link Text from a Single Blog Post?","url":"https:\/\/wpastra.com\/docs\/replace-navigation-strings-on-single-post\/","category":["blog-filters"]},{"title":"Add Title attribute to Header Background Image as a Substitute for Alt Text","url":"https:\/\/wpastra.com\/docs\/title-attribute-in-header-background-image\/","category":["astra-header-footer-filters"]},{"title":"How to Switch From Existing Breadcrumb to New Trail?","url":"https:\/\/wpastra.com\/docs\/filter-to-switch-bread-from-old-to-new\/","category":["breadcrumb"]},{"title":"How to Display a Breadcrumb Anywhere within a Page or Post with Shortcode?","url":"https:\/\/wpastra.com\/docs\/display-breadcrumb-with-shortcode\/","category":["breadcrumb"]},{"title":"How to Add Breadcrumbs in WordPress Website with Astra","url":"https:\/\/wpastra.com\/docs\/add-breadcrumbs-with-astra\/","category":["breadcrumb"]},{"title":"Disable Astra\u2019s Native AMP Functionality","url":"https:\/\/wpastra.com\/docs\/disable-astra-amp-support\/","category":["native-amp-support","astra-theme-pro-filters"]},{"title":"Astra Options that won’t work with AMP","url":"https:\/\/wpastra.com\/docs\/astra-options-that-wont-work-with-amp\/","category":["native-amp-support","general"]},{"title":"Configure AMP Plugin","url":"https:\/\/wpastra.com\/docs\/configure-amp-plugin\/","category":["native-amp-support","general"]},{"title":"How to Activate the License for Astra Premium Sites Plugin?","url":"https:\/\/wpastra.com\/docs\/activate-license-for-astra-premium-sites-plugin\/","category":["installation-and-updates"]},{"title":"White Label Constants to Change Strings Permanently","url":"https:\/\/wpastra.com\/docs\/white-label-constants-to-change-strings-permanently\/","category":["white-label"]},{"title":"Manually Install Astra via FTP","url":"https:\/\/wpastra.com\/docs\/manually-install-astra-via-ftp\/","category":["installation-and-updates"]},{"title":"Change Sidebar Widget Title Heading Tag","url":"https:\/\/wpastra.com\/docs\/change-sidebar-widget-title-heading-tag\/","category":["astra-theme-pro-filters"]},{"title":"How to Change the Direction for Submenu Opening?","url":"https:\/\/wpastra.com\/docs\/change-the-direction-for-submenu-opening\/","category":["general"]},{"title":"Display Products from Same Category with Navigation","url":"https:\/\/wpastra.com\/docs\/products-from-same-directed-category-with-navigation\/","category":["general"]},{"title":"Native AMP Support in Astra","url":"https:\/\/wpastra.com\/docs\/astra-native-amp-support\/","category":["native-amp-support","general"]},{"title":"How to Disable the White Label Settings Permanently?","url":"https:\/\/wpastra.com\/docs\/how-to-disable-the-white-label-settings-permanently\/","category":["white-label","general"]},{"title":"Troubleshooting Steps ( with Health Check & Troubleshooting plugin )","url":"https:\/\/wpastra.com\/docs\/troubleshooting-steps\/","category":["troubleshooting"]},{"title":"How to Add Icons to Menu Items?","url":"https:\/\/wpastra.com\/docs\/how-to-add-icons-to-menu-items\/","category":["general"]},{"title":"How Translations can be Manually Exported and Uploaded to the Site?","url":"https:\/\/wpastra.com\/docs\/manually-upload-translations\/","category":["translate-astra"]},{"title":"‘The preview could not be loaded’ Pop Up with Astra and Elementor","url":"https:\/\/wpastra.com\/docs\/the-preview-could-not-be-loaded-pop-up\/","category":["troubleshooting"]},{"title":"Change Woocommerce Out of Stock Text","url":"https:\/\/wpastra.com\/docs\/change-woocommerce-out-of-stock-text\/","category":["woocommerce-filters"]},{"title":"Does White Label Feature Make Changes in the Code?","url":"https:\/\/wpastra.com\/docs\/does-white-label-feature-in-astra-pro-make-changes-in-the-frontend-code\/","category":["white-label"]},{"title":"Typography options for EDD","url":"https:\/\/wpastra.com\/docs\/typography-options-for-edd\/","category":["easy-digital-downloads-module"]},{"title":"Colors & Background options for EDD","url":"https:\/\/wpastra.com\/docs\/colors-background-options-for-edd\/","category":["easy-digital-downloads-module"]},{"title":"Checkout Page – EDD Module Options","url":"https:\/\/wpastra.com\/docs\/checkout-page-edd-module-options\/","category":["easy-digital-downloads-module"]},{"title":"Single Product – EDD Module Options","url":"https:\/\/wpastra.com\/docs\/single-product-edd-module-options\/","category":["easy-digital-downloads-module"]},{"title":"Product Archive – EDD Module Options","url":"https:\/\/wpastra.com\/docs\/product-archive-edd-module-options\/","category":["easy-digital-downloads-module"]},{"title":"General – EDD Module Options","url":"https:\/\/wpastra.com\/docs\/general-edd-module-options\/","category":["easy-digital-downloads-module"]},{"title":"EDD – Easy Digital Downloads Module Overview","url":"https:\/\/wpastra.com\/docs\/easy-digital-downloads-module-overview\/","category":["easy-digital-downloads-module"]},{"title":"EDD Integration Overview in Free Astra Theme","url":"https:\/\/wpastra.com\/docs\/edd-integration-overview-astra-theme\/","category":["easy-digital-downloads"]},{"title":"How to Display a Mini Cart Anywhere Using Shortcode? (Astra and EDD)","url":"https:\/\/wpastra.com\/docs\/edd-mini-cart-shortcode\/","category":["easy-digital-downloads-module","general"]},{"title":"How to Add EDD Cart in Header? (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/edd-cart-in-header\/","category":["general","easy-digital-downloads","easy-digital-downloads-module"]},{"title":"How to Add Download Archive Pages to the Menu When Using Astra with EDD?","url":"https:\/\/wpastra.com\/docs\/add-download-archive-page-to-menu\/","category":["general","easy-digital-downloads","easy-digital-downloads-module"]},{"title":"How to Disable EDD Inbuilt Styling?","url":"https:\/\/wpastra.com\/docs\/disable-edd-inbuilt-styling\/","category":["general","easy-digital-downloads","easy-digital-downloads-module"]},{"title":"How to Apply For Brainstorm Force Affiliate Program? (Become Astra Affiliate)","url":"https:\/\/wpastra.com\/docs\/become-astra-affiliate\/","category":["account-and-store"]},{"title":"How to Add Custom Fonts in Astra?","url":"https:\/\/wpastra.com\/docs\/custom-fonts-in-astra\/","category":["general"]},{"title":"How to Upgrade to Astra Pro?","url":"https:\/\/wpastra.com\/docs\/upgrade-to-astra-pro\/","category":["installation-and-updates"]},{"title":"Typography Improvement for Astra","url":"https:\/\/wpastra.com\/docs\/typography-improvement-for-astra\/","category":["global"]},{"title":"How Does Astra Work with the Gutenberg Editor?","url":"https:\/\/wpastra.com\/docs\/astra-with-gutenberg-editor\/","category":[]},{"title":"How to Create Different Headers on Different Pages Using Astra?","url":"https:\/\/wpastra.com\/docs\/different-headers-on-different-pages\/","category":["general"]},{"title":"Dim Content on Menu Hover","url":"https:\/\/wpastra.com\/docs\/dim-content-on-menu-hover\/","category":["custom-css"]},{"title":"Which Zip Should I Install from the Store?","url":"https:\/\/wpastra.com\/docs\/which-zip-to-install\/","category":["installation-and-updates"]},{"title":"How to Set Animation To The Sub Menu?","url":"https:\/\/wpastra.com\/docs\/set-animation-to-sub-menu\/","category":["general"]},{"title":"Display SubMenu Just Below the Header","url":"https:\/\/wpastra.com\/docs\/display-sub-menu-below-the-header\/","category":["general"]},{"title":"How to Duplicate ‘Custom Layouts’ and ‘Page Headers’?","url":"https:\/\/wpastra.com\/docs\/duplicate-custom-layouts-and-page-headers\/","category":["general"]},{"title":"How to Set up a WordPress Staging Site?","url":"https:\/\/wpastra.com\/docs\/how-to-set-up-a-staging-site\/","category":["general"]},{"title":"How to Disable Primary Header?","url":"https:\/\/wpastra.com\/docs\/how-to-disable-primary-header\/","category":["astra-header-footer-filters"]},{"title":"Nav Menu Module [Create a Mega Menu]","url":"https:\/\/wpastra.com\/docs\/nav-menu-addon\/","category":["nav-menu"]},{"title":"How to Switch to Astra from Another Theme?","url":"https:\/\/wpastra.com\/docs\/how-to-switch-to-astra\/","category":["general"]},{"title":"Google Fonts Not Loading with Astra","url":"https:\/\/wpastra.com\/docs\/google-fonts-not-loading-with-astra\/","category":["general"]},{"title":"Adding Custom Sidebar to the Theme with Lightweight Sidebar Manager plugin","url":"https:\/\/wpastra.com\/docs\/adding-custom-sidebar\/","category":["general"]},{"title":"Automatic Beta Updates for Astra","url":"https:\/\/wpastra.com\/docs\/automatic-beta-updates-for-astra\/","category":["general","installation-and-updates"]},{"title":"How to Add Font Awesome Icons in Astra?","url":"https:\/\/wpastra.com\/docs\/add-font-awesome-icons-in-astra\/","category":["general"]},{"title":"Color for Anchor Tag Inside Heading Tag","url":"https:\/\/wpastra.com\/docs\/anchor-tag-inside-heading-tag\/","category":["general"]},{"title":"Search Shortcode to Add Search Box in Astra","url":"https:\/\/wpastra.com\/docs\/search-box-shortcode-in-astra\/","category":["general"]},{"title":"LifterLMS Shortcode to Add Profile Link","url":"https:\/\/wpastra.com\/docs\/lifterlms-shortcode-for-profile-link\/","category":["general","lifterlms-astra-pro"]},{"title":"LearnDash Shortcode to Add Profile Link","url":"https:\/\/wpastra.com\/docs\/learndash-shortcode-for-profile-link\/","category":["general","learndash-astra-pro-modules"]},{"title":"How to Download Older Version of Astra Theme or Astra Pro Addon plugin?","url":"https:\/\/wpastra.com\/docs\/download-older-version-of-astra\/","category":["general"]},{"title":"How to Add Google Tag Manager Code to Astra?","url":"https:\/\/wpastra.com\/docs\/how-to-add-google-tag-manager-code-to-astra\/","category":["general"]},{"title":"Mobile Header with Above\/Below Header (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/mobile-header-with-above-below-header\/","category":["mobile-header"]},{"title":"How to Stick Footer to Bottom when Page Content is Less?","url":"https:\/\/wpastra.com\/docs\/how-to-stick-footer-to-bottom-when-page-content-is-less\/","category":["general","footer-widgets-module"]},{"title":"Quick View for WooCommerce Products","url":"https:\/\/wpastra.com\/docs\/quick-view-for-woocommerce-products\/","category":["woo"]},{"title":"Off-Canvas Sidebar for WooCommerce Shop Page","url":"https:\/\/wpastra.com\/docs\/off-canvas-sidebar-for-woocommerce-shop-page\/","category":["woo"]},{"title":"How to Add WooCommerce Mini Cart in Header? (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/add-woocommerce-mini-cart-to-header\/","category":["general","woocommerce-free","woo"]},{"title":"How to Translate Astra Strings with WPML?","url":"https:\/\/wpastra.com\/docs\/translate-astra-string-wpml\/","category":["translate-astra"]},{"title":"Know More about Astra Beta Versions? How to Download and Use?","url":"https:\/\/wpastra.com\/docs\/about-beta-versions\/","category":["general","installation-and-updates"]},{"title":"How to Add Social Media Icons to Header?","url":"https:\/\/wpastra.com\/docs\/how-to-add-social-media-icons-to-header\/","category":["general"]},{"title":"How to Translate Custom Layouts with WPML?","url":"https:\/\/wpastra.com\/docs\/how-to-translate-custom-layouts-with-wpml\/","category":["translate-astra","site-builder-module"]},{"title":"Why Is My Logo Blurry?","url":"https:\/\/wpastra.com\/docs\/why-is-my-logo-blurry\/","category":["header-footer-after-3-0"]},{"title":"How to Disable Title on Posts, Pages, or Other Post Types?","url":"https:\/\/wpastra.com\/docs\/disable-title-on-post-type\/","category":["astra-theme-pro-filters"]},{"title":"Disable Featured Image on Posts, Pages, or Other Post Types","url":"https:\/\/wpastra.com\/docs\/disable-featured-image-on-post-type\/","category":["astra-theme-pro-filters"]},{"title":"How to Display “Last Updated” instead of “Published” Date","url":"https:\/\/wpastra.com\/docs\/show-last-updated-not-published-date\/","category":["blog-pro","blog-filters","blog"]},{"title":"How To Reset WordPress Installation?","url":"https:\/\/wpastra.com\/docs\/how-to-reset-wordpress-installation\/","category":["starter-templates"]},{"title":"Mobile Header with Astra (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/mobile-header-with-astra\/","category":["mobile-header"]},{"title":"Disable featured image on all pages","url":"https:\/\/wpastra.com\/docs\/disable-featured-image-on-all-pages\/","category":[]},{"title":"Elementor Error: The Content Area Was Not Found in Your Page","url":"https:\/\/wpastra.com\/docs\/elementor-the-content-area-was-not-found-in-your-page\/","category":[]},{"title":"Sidebar \/ Container Options in Customizer for Learndash Not Working?","url":"https:\/\/wpastra.com\/docs\/sidebar-container-options-in-customizer-for-learndash-not-working\/","category":["general"]},{"title":"About Icons Font That Comes with Astra","url":"https:\/\/wpastra.com\/docs\/default-font-icon-list-in-astra\/","category":["general"]},{"title":"How to Add Background Images?","url":"https:\/\/wpastra.com\/docs\/how-to-add-background-images-to-various-sections-on-site\/","category":["colors-background-pro","header-footer-before-3-0","sidebar"]},{"title":"Default Structured Data and Schema Markup in Astra Theme","url":"https:\/\/wpastra.com\/docs\/structured-data-and-schema-markup-in-astra\/","category":["general"]},{"title":"Below Header Section","url":"https:\/\/wpastra.com\/docs\/below-header-section\/","category":["header-sections"]},{"title":"Above Header Section","url":"https:\/\/wpastra.com\/docs\/above-header-section\/","category":["header-sections"]},{"title":"How to Install Astra Theme?","url":"https:\/\/wpastra.com\/docs\/how-to-install-astra-theme\/","category":["installation-and-updates"]},{"title":"Not Receiving Update Notification for Astra Theme?","url":"https:\/\/wpastra.com\/docs\/not-receiving-update-notification-for-astra-theme\/","category":["general"]},{"title":"Do Not See License Activation Form for Astra Pro Addon Plugin?","url":"https:\/\/wpastra.com\/docs\/do-not-see-license-activation-form\/","category":["installation-and-updates"]},{"title":"How to Refresh \/ Flush WordPress Permalinks?","url":"https:\/\/wpastra.com\/docs\/how-to-refresh-wordpress-permalinks\/","category":["general"]},{"title":"How to Merge Above\/Below Header Menu with a Primary Menu in Responsive?","url":"https:\/\/wpastra.com\/docs\/how-to-merge-above-below-header-menu-with-a-primary-menu-in-responsive\/","category":["general"]},{"title":"How to add Google Analytics Code with the Astra Theme?","url":"https:\/\/wpastra.com\/docs\/how-to-add-google-analytics-code-with-astra-theme\/","category":["general"]},{"title":"Getting error – The package could not be installed. The theme is missing the style.css stylesheet?","url":"https:\/\/wpastra.com\/docs\/getting-error-the-package-could-not-be-installed-the-theme-is-missing-the-style-css-stylesheet\/","category":["installation-and-updates","troubleshooting"]},{"title":"Typography Options for WooCommerce","url":"https:\/\/wpastra.com\/docs\/typography-options-for-woocommerce\/","category":["woo"]},{"title":"Getting Started with Astra Pro Addon Plugin","url":"https:\/\/wpastra.com\/docs\/getting-started-with-astra-pro\/","category":["installation-and-updates"]},{"title":"Colors & Background options for WooCommerce","url":"https:\/\/wpastra.com\/docs\/colors-background-options-for-woocommerce\/","category":["woo"]},{"title":"How to Activate License Key on WordPress Multisite?","url":"https:\/\/wpastra.com\/docs\/how-to-activate-license-key-on-wordpress-multisite\/","category":["general"]},{"title":"How to Edit style.css in Child Theme?","url":"https:\/\/wpastra.com\/docs\/how-to-edit-style-css-in-child-theme\/","category":["general"]},{"title":"How to Display WooCommerce Sidebar on Top for Mobile Devices?","url":"https:\/\/wpastra.com\/docs\/how-to-display-woocommerce-sidebar-on-top-on-mobile\/","category":["general"]},{"title":"How to Set Background Image for the Site?","url":"https:\/\/wpastra.com\/docs\/how-to-set-background-image-for-the-site\/","category":["general"]},{"title":"How to add Google Analytics code with Site Builder Module?","url":"https:\/\/wpastra.com\/docs\/add-google-analytics-code\/","category":[]},{"title":"Fix for- cURL error 51: SSL: no alternative certificate subject name matches target host name ‘websitedemos.net’","url":"https:\/\/wpastra.com\/docs\/fix-for-curl-error-51-ssl-no-alternative-certificate-subject-name-matches-target-host-name-websitedemos-net\/","category":["troubleshooting"]},{"title":"How to Remove Previous and Next Link from a Single Blog Post?","url":"https:\/\/wpastra.com\/docs\/how-to-remove-previous-and-next-link-from-single-blog-post\/","category":["general"]},{"title":"Custom 404 Page","url":"https:\/\/wpastra.com\/docs\/custom-404-page\/","category":["site-builder-module"]},{"title":"Site Builder – Hooks","url":"https:\/\/wpastra.com\/docs\/custom-layout-hooks\/","category":["site-builder-module"]},{"title":"Custom Footer","url":"https:\/\/wpastra.com\/docs\/custom-footer\/","category":["site-builder-module"]},{"title":"Custom Header","url":"https:\/\/wpastra.com\/docs\/custom-header\/","category":["site-builder-module"]},{"title":"Cannot edit Custom Layouts \/ Custom Layouts having 404 error?","url":"https:\/\/wpastra.com\/docs\/cannot-edit-custom-layouts-custom-layouts-having-404-error\/","category":["site-builder-module"]},{"title":"Astra Options Page – All Settings Explained","url":"https:\/\/wpastra.com\/docs\/new-welcome-screen-for-astra\/","category":["general"]},{"title":"How to White Label Astra?","url":"https:\/\/wpastra.com\/docs\/how-to-white-label-astra\/","category":["white-label"]},{"title":"How to Install Astra Pro Plugin?","url":"https:\/\/wpastra.com\/docs\/install-astra-pro-addon-plugin\/","category":["installation-and-updates"]},{"title":"Backup Your Website in Less than 10 Minutes!","url":"https:\/\/wpastra.com\/docs\/backup-your-website-in-less-than-10-minutes\/","category":["general"]},{"title":"How to use RGBA color picker?","url":"https:\/\/wpastra.com\/docs\/how-to-use-rgba-color-picker\/","category":["general"]},{"title":"How to fix Fatal Error \/ White Screen of Death?","url":"https:\/\/wpastra.com\/docs\/fixing-fatal-error-white-screen-of-death\/","category":["troubleshooting"]},{"title":"Fix for – Parse error: syntax error, unexpected T_FUNCTION","url":"https:\/\/wpastra.com\/docs\/fixing-parse-error-syntax-error-unexpected-t-function\/","category":["troubleshooting"]},{"title":"How to Disable the Loading of Astra’s Default Font File? (Astra.woff)","url":"https:\/\/wpastra.com\/docs\/disable-loading-astras-default-font-file-astra-woff\/","category":["astra-theme-pro-filters"]},{"title":"Overview of LearnDash Integration in Astra Theme","url":"https:\/\/wpastra.com\/docs\/learndash-integration-overview\/","category":["learndash"]},{"title":"LearnDash Integration in Astra Pro","url":"https:\/\/wpastra.com\/docs\/learndash-integration-in-astra-pro\/","category":["learndash-astra-pro-modules"]},{"title":"Checkout Page WooCommerce","url":"https:\/\/wpastra.com\/docs\/checkout-page-woocommerce\/","category":["woo"]},{"title":"Single Product WooCommerce","url":"https:\/\/wpastra.com\/docs\/single-product-woocommerce\/","category":["woo"]},{"title":"How to Design a Product Catalog Page or Shop Page Using WooCommerce Module in Astra?","url":"https:\/\/wpastra.com\/docs\/shop-woocommerce\/","category":["woo"]},{"title":"WooCommerce Module Overview","url":"https:\/\/wpastra.com\/docs\/woocommerce-module-overview\/","category":["woo"]},{"title":"General WooCommerce","url":"https:\/\/wpastra.com\/docs\/general-woocommerce\/","category":[]},{"title":"Typography Module","url":"https:\/\/wpastra.com\/docs\/typography-module\/","category":["typography-pro"]},{"title":"Global Typography – Astra Theme","url":"https:\/\/wpastra.com\/docs\/typography-free\/","category":["global"]},{"title":"Colors & Background Module","url":"https:\/\/wpastra.com\/docs\/colors-background-module\/","category":["colors-background-pro"]},{"title":"Global Colors – Astra Theme","url":"https:\/\/wpastra.com\/docs\/colors-background\/","category":["global"]},{"title":"Astra WooCommerce Mini Cart Shortcode","url":"https:\/\/wpastra.com\/docs\/astra-woocommerce-mini-cart-shortcode\/","category":["woo"]},{"title":"LifterLMS Integration in Astra Pro","url":"https:\/\/wpastra.com\/docs\/lifterlms-module-pro\/","category":["lifterlms-astra-pro"]},{"title":"LifterLMS Overview","url":"https:\/\/wpastra.com\/docs\/lifterlms-overview\/","category":["lifterlms"]},{"title":"LifterLMS Integration in Free Astra Theme","url":"https:\/\/wpastra.com\/docs\/lifterlms-free\/","category":["lifterlms"]},{"title":"How to Manage Sidebars in Free Astra Theme?","url":"https:\/\/wpastra.com\/docs\/sidebar-free\/","category":["sidebar"]},{"title":"Single Post with Blog Pro","url":"https:\/\/wpastra.com\/docs\/single-post-blog-pro\/","category":["blog-pro"]},{"title":"Blog \/ Archive with Blog Pro","url":"https:\/\/wpastra.com\/docs\/blog-archive-blog-pro\/","category":["blog-pro"]},{"title":"Blog Pro Overview","url":"https:\/\/wpastra.com\/docs\/blog-pro-overview\/","category":["blog-pro"]},{"title":"Single Post","url":"https:\/\/wpastra.com\/docs\/single-post\/","category":["blog"]},{"title":"Blog \/ Archive","url":"https:\/\/wpastra.com\/docs\/blog-archive\/","category":["blog"]},{"title":"Blog Overview","url":"https:\/\/wpastra.com\/docs\/blog-overview\/","category":["blog"]},{"title":"Scroll To Top","url":"https:\/\/wpastra.com\/docs\/scroll-to-top-pro\/","category":["astra-theme-walkthrough-docs"]},{"title":"Site Builder Overview","url":"https:\/\/wpastra.com\/docs\/custom-layouts-pro\/","category":["site-builder-module"]},{"title":"Footer Widgets Module with Astra Pro","url":"https:\/\/wpastra.com\/docs\/footer-widgets-astra-pro\/","category":["footer-widgets-module"]},{"title":"Footer Overview","url":"https:\/\/wpastra.com\/docs\/footer-overview\/","category":["header-footer-before-3-0"]},{"title":"Footer Bar","url":"https:\/\/wpastra.com\/docs\/footer-bar\/","category":["header-footer-before-3-0"]},{"title":"Footer Widgets","url":"https:\/\/wpastra.com\/docs\/footer-widgets\/","category":["header-footer-before-3-0"]},{"title":"Astra Meta Settings","url":"https:\/\/wpastra.com\/docs\/page-meta-settings\/","category":["meta-settings"]},{"title":"How to Manage Spacing in Headers Using Astra?","url":"https:\/\/wpastra.com\/docs\/header-spacing-controls\/","category":["spacing"]},{"title":"Sidebar Spacing Controls","url":"https:\/\/wpastra.com\/docs\/sidebar-spacing-controls\/","category":["spacing"]},{"title":"How to Manage Spacing on the Blog Page Using Astra?","url":"https:\/\/wpastra.com\/docs\/blog-archive-spacing-controls\/","category":["spacing"]},{"title":"Footer Spacing Controls","url":"https:\/\/wpastra.com\/docs\/footer-spacing-controls\/","category":["spacing"]},{"title":"Page Headers Overview","url":"https:\/\/wpastra.com\/docs\/page-headers-overview\/","category":["page-headers"]},{"title":"Header Sections Overview (Old Astra Header)","url":"https:\/\/wpastra.com\/docs\/header-sections-pro\/","category":["header-sections"]},{"title":"How to Set the Full-width\/Stretched Container Layout in Astra?","url":"https:\/\/wpastra.com\/docs\/full-width-stretched-container-layout\/","category":["global"]},{"title":"Full Width \/ Contained \u2013 Container Layout","url":"https:\/\/wpastra.com\/docs\/full-width-contained-container-layout\/","category":["global"]},{"title":"Content Boxed – Container Layout","url":"https:\/\/wpastra.com\/docs\/content-boxed-container-layout\/","category":["global"]},{"title":"Boxed \u2013 Container Layout","url":"https:\/\/wpastra.com\/docs\/boxed-container-layout\/","category":["global"]},{"title":"Container Spacing Controls","url":"https:\/\/wpastra.com\/docs\/container-spacing-controls\/","category":["spacing"]},{"title":"Site Identity Spacing Controls","url":"https:\/\/wpastra.com\/docs\/site-identity-spacing-controls\/","category":["spacing"]},{"title":"Spacing Addon Overview","url":"https:\/\/wpastra.com\/docs\/spacing-addon-overview\/","category":["spacing"]},{"title":"Global Container – Astra Theme","url":"https:\/\/wpastra.com\/docs\/container-overview\/","category":["global"]},{"title":"How to Add a Sticky Header or On-Scroll Fixed Header with Astra","url":"https:\/\/wpastra.com\/docs\/sticky-header-pro\/","category":["sticky-header"]},{"title":"Padded Site Layout","url":"https:\/\/wpastra.com\/docs\/padded-site-layout\/","category":["site-layout"]},{"title":"Fluid Site Layout","url":"https:\/\/wpastra.com\/docs\/fluid-site-layout\/","category":["site-layout"]},{"title":"Max Width Site Layout","url":"https:\/\/wpastra.com\/docs\/max-width-site-layout\/","category":["site-layout"]},{"title":"Full Width Site Layout","url":"https:\/\/wpastra.com\/docs\/full-width-site-layout\/","category":["site-layout"]},{"title":"Site Layout Overview","url":"https:\/\/wpastra.com\/docs\/site-layout-overview\/","category":["site-layout"]},{"title":"Change the Astra Header Breakpoint Width","url":"https:\/\/wpastra.com\/docs\/change-astra-header-breakpoint-width\/","category":["astra-header-footer-filters"]},{"title":"How to Add Custom Javascript Code in Astra?","url":"https:\/\/wpastra.com\/docs\/add-custom-javascript-code-astra\/","category":[]},{"title":"What is a Favicon or Site Icon?","url":"https:\/\/wpastra.com\/docs\/favicon-site-icon\/","category":["general"]},{"title":"Complete List of WordPress Locale Codes","url":"https:\/\/wpastra.com\/docs\/complete-list-wordpress-locale-codes\/","category":[]},{"title":"Fix for – The PCLZIP_ERR_BAD_FORMAT (-10) Error","url":"https:\/\/wpastra.com\/docs\/fix-pclzip-err-bad-format-10-error\/","category":["troubleshooting"]},{"title":"How to Add Custom PHP Code?","url":"https:\/\/wpastra.com\/docs\/add-custom-php-code\/","category":["astra-theme-pro-filters"]},{"title":"WooCommerce Integration Overview in Free Astra Theme","url":"https:\/\/wpastra.com\/docs\/woocommerce-integration-overview\/","category":["woocommerce-free"]},{"title":"How to Replicate the Astra Screenshot?","url":"https:\/\/wpastra.com\/docs\/replicating-the-screenshot\/","category":[]},{"title":"How to Turn Astra Multilingual with WPML?","url":"https:\/\/wpastra.com\/docs\/turn-astra-multilingual-with-wpml\/","category":["translate-astra"]},{"title":"How to Build Advanced Websites Based on Custom Post Types with Toolset and Astra?","url":"https:\/\/wpastra.com\/docs\/custom-post-types-toolset-astra\/","category":["general"]},{"title":"How to Get License Key of Astra Pro?","url":"https:\/\/wpastra.com\/docs\/get-license-keys\/","category":["installation-and-updates"]},{"title":"How to Activate Astra Pro Addon License?","url":"https:\/\/wpastra.com\/docs\/activate-astra-pro-addon-license\/","category":["installation-and-updates"]},{"title":"How to Design Bullets & Lists?","url":"https:\/\/wpastra.com\/docs\/design-bullets-lists\/","category":["custom-css"]},{"title":"How to Disable Comments on WordPress website?","url":"https:\/\/wpastra.com\/docs\/how-to-disable-comments\/","category":["general"]},{"title":"How to Highlight a Certain Menu Item?","url":"https:\/\/wpastra.com\/docs\/highlight-certain-menu-item\/","category":["custom-css"]},{"title":"How to Bulk Edit Astra Meta Settings on Multiple Pages & Posts at Once?","url":"https:\/\/wpastra.com\/docs\/bulk-edit-astra-meta-settings\/","category":["general"]},{"title":"Font Selection","url":"https:\/\/wpastra.com\/docs\/font-selection\/","category":["general"]},{"title":"How to Renew Yearly License?","url":"https:\/\/wpastra.com\/docs\/renew-yearly-license\/","category":["account-and-store"]},{"title":"How to Increase PHP Time Limit for a WordPress Site?","url":"https:\/\/wpastra.com\/docs\/increase-php-time-limit-wordpress-sites\/","category":["general"]},{"title":"Astra Pro WP CLI Commands","url":"https:\/\/wpastra.com\/docs\/wp-cli-commands\/","category":["general","astra-theme-pro-filters"]},{"title":"How Do License Upgrades Work?","url":"https:\/\/wpastra.com\/docs\/how-license-upgrades-work\/","category":["account-and-store"]},{"title":"Recommended Settings for Beaver Builder and the Astra Theme","url":"https:\/\/wpastra.com\/docs\/recommended-settings-beaver-builder-astra\/","category":["general"]},{"title":"Recommended Settings for Elementor and the Astra Theme","url":"https:\/\/wpastra.com\/docs\/recommended-settings-for-elementor\/","category":["general"]},{"title":"How to Force Check Updates?","url":"https:\/\/wpastra.com\/docs\/force-check-updates\/","category":[]},{"title":"How to Disable or Change the Position of the Featured Image?","url":"https:\/\/wpastra.com\/docs\/disable-change-position-featured-image\/","category":[]},{"title":"How to Manage Paragraph Margins In Astra","url":"https:\/\/wpastra.com\/docs\/manage-margin-paragraphs\/","category":[]},{"title":"How to Update the Plugin Manually from WordPress Backend?","url":"https:\/\/wpastra.com\/docs\/update-plugin-manually-wordpress-backend\/","category":["general"]},{"title":"How to Adjust the Width of Your Sidebar?","url":"https:\/\/wpastra.com\/docs\/adjust-width-sidebar\/","category":["general"]},{"title":"Where Does Astra Primary Color Setting Take Effect?","url":"https:\/\/wpastra.com\/docs\/astra-primary-color-setting-take-effect\/","category":["general"]},{"title":"How to Disable Header or Footer for a Landing Page or Post?","url":"https:\/\/wpastra.com\/docs\/disable-header-footer-landing-page-post\/","category":["general"]},{"title":"What Is a Child Theme and How To Install It for Astra?","url":"https:\/\/wpastra.com\/docs\/install-astra-child-theme\/","category":["installation-and-updates"]},{"title":"Increasing the PHP Memory Limit of Your Website","url":"https:\/\/wpastra.com\/docs\/increasing-php-memory-limit-website\/","category":["general"]},{"title":"How to Translate Astra Theme \/ Plugins in Your Own Language using GlotPress?","url":"https:\/\/wpastra.com\/docs\/how-to-translate\/","category":["translate-astra"]},{"title":"Does Astra support Beaver Themer Plugin?","url":"https:\/\/wpastra.com\/docs\/does-astra-support-beaver-themer-plugin\/","category":["general"]},{"title":"Remove Primary Navigation Menu with Hook","url":"https:\/\/wpastra.com\/docs\/how-to-remove-primary-navigation-menu\/","category":["astra-header-footer-filters"]},{"title":"Footer Custom Text Helper Strings","url":"https:\/\/wpastra.com\/docs\/footer-custom-text-helper-strings\/","category":["general"]},{"title":"What is Astra Pro Add on?","url":"https:\/\/wpastra.com\/docs\/astra-pro-addon\/","category":["installation-and-updates"]},{"title":"How to Change the “Scroll To Top” Icon in Astra?","url":"https:\/\/wpastra.com\/docs\/change-scroll-to-top-icon\/","category":["astra-theme-pro-filters"]},{"title":"How to Change Website Logo Destination URL","url":"https:\/\/wpastra.com\/docs\/change-website-logo-destination-url\/","category":["astra-header-footer-filters"]},{"title":"Using Hooks in Astra","url":"https:\/\/wpastra.com\/docs\/using-hooks\/","category":["astra-theme-pro-filters"]},{"title":"Standard server 404 page showing instead of custom 404 page","url":"https:\/\/wpastra.com\/docs\/standard-server-404-page-showing-instead-of-custom-404-page\/","category":[]},{"title":"How to Change the Default Astra Strings","url":"https:\/\/wpastra.com\/docs\/astra-default-strings\/","category":["astra-theme-pro-filters"]},{"title":"How to Add Custom CSS Code Without Editing Theme Files?","url":"https:\/\/wpastra.com\/docs\/adding-custom-css-code\/","category":["custom-css"]}]} \ No newline at end of file diff --git a/static/wp-content/uploads/astra-sites/.htaccess b/static/wp-content/uploads/astra-sites/.htaccess deleted file mode 100644 index 3418e55..0000000 --- a/static/wp-content/uploads/astra-sites/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all \ No newline at end of file diff --git a/static/wp-content/uploads/astra-sites/index.html b/static/wp-content/uploads/astra-sites/index.html deleted file mode 100644 index e69de29..0000000 diff --git a/static/wp-content/uploads/elementor/css/post-335.css b/static/wp-content/uploads/elementor/css/post-335.css deleted file mode 100644 index 0c4354e..0000000 --- a/static/wp-content/uploads/elementor/css/post-335.css +++ /dev/null @@ -1 +0,0 @@ -.elementor-kit-335{--e-global-color-primary:#6EC1E4;--e-global-color-secondary:#54595F;--e-global-color-text:#7A7A7A;--e-global-color-accent:#61CE70;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1140px;}.e-con{--container-max-width:1140px;}.elementor-widget:not(:last-child){margin-block-end:20px;}.elementor-element{--widgets-spacing:20px 20px;}{}h1.entry-title{display:var(--page-title-display);}.site-header .header-inner{width:1110px;max-width:100%;}.site-header{padding-inline-end:0px;padding-inline-start:0px;}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}} \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/305708463aa9581243f6ce55fea0319f-debug.txt b/static/wp-content/uploads/simply-static/305708463aa9581243f6ce55fea0319f-debug.txt deleted file mode 100644 index d46f352..0000000 --- a/static/wp-content/uploads/simply-static/305708463aa9581243f6ce55fea0319f-debug.txt +++ /dev/null @@ -1,6943 +0,0 @@ -[2024-10-13 17:23:06] [class-ss-archive-creation-job.php:83] Starting a job; no job is presently running -[2024-10-13 17:23:06] [class-ss-archive-creation-job.php:84] Here's our task list: setup, fetch_urls, generate_404, create_zip_archive, wrapup -[2024-10-13 17:23:06] [class-ss-archive-creation-job.php:102] Pushing first task to queue: setup -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:136] Current task: cancel -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:153] Performing task: cancel -[2024-10-13 17:23:07] [class-ss-task.php:44] Status message: [cancel] Cancelling job -[2024-10-13 17:23:07] [class-ss-wrapup-task.php:22] Deleting temporary files -[2024-10-13 17:23:07] [class-ss-task.php:44] Status message: [wrapup] Wrapping up -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:170] This task is done and there are no more tasks, time to complete the job -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:136] Current task: setup -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:153] Performing task: setup -[2024-10-13 17:23:07] [class-ss-task.php:44] Status message: [setup] Setting up -[2024-10-13 17:23:07] [class-ss-setup-task.php:33] Creating archive directory: /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/ -[2024-10-13 17:23:07] [class-ss-setup-task.php:72] Adding origin URL to queue: https://hackanooga.com/ -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:175] We've found our next task: fetch_urls -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:23:07] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:23:07] [class-ss-fetch-urls-task.php:69] Total pages: 1; Pages remaining: 1 -[2024-10-13 17:23:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/ -[2024-10-13 17:23:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 1 -[2024-10-13 17:23:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c01fbca0e3-X5b4BS.tmp -[2024-10-13 17:23:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/?simply_static_page=1 -[2024-10-13 17:23:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/?simply_static_page=1 -[2024-10-13 17:23:08] [class-ss-url-fetcher.php:103] Filesize: 77495 bytes -[2024-10-13 17:23:08] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:08] [class-ss-url-fetcher.php:233] New filename for static page: index.html -[2024-10-13 17:23:08] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c01fbca0e3-X5b4BS.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/index.html -[2024-10-13 17:23:08] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:08] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:23:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:09] [class-ss-page.php:119] Checking Content Identical:9b08250fe083de1aef3a0d7496c512fea1a11738===. Value: FALSE -[2024-10-13 17:23:09] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 0 of 1 pages/files -[2024-10-13 17:23:09] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:23:09] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:23:09] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:23:09] [class-ss-fetch-urls-task.php:69] Total pages: 30; Pages remaining: 29 -[2024-10-13 17:23:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/blog/ -[2024-10-13 17:23:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 30 -[2024-10-13 17:23:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c01fd8a29c-lXqhMz.tmp -[2024-10-13 17:23:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/blog/?simply_static_page=2 -[2024-10-13 17:23:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/blog/?simply_static_page=2 -[2024-10-13 17:23:10] [class-ss-url-fetcher.php:103] Filesize: 77997 bytes -[2024-10-13 17:23:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:10] [class-ss-url-fetcher.php:233] New filename for static page: blog/index.html -[2024-10-13 17:23:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c01fd8a29c-lXqhMz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/blog/index.html -[2024-10-13 17:23:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:10] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:23:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:10] [class-ss-page.php:119] Checking Content Identical:825a2c1235098dcc695eb62a1619fb7395a8a045===. Value: FALSE -[2024-10-13 17:23:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/mikeconrad-devops.pdf -[2024-10-13 17:23:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 30 -[2024-10-13 17:23:10] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:10] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c01fec3f99-sfyPug.tmp -[2024-10-13 17:23:10] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/mikeconrad-devops.pdf?simply_static_page=3 -[2024-10-13 17:23:10] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/mikeconrad-devops.pdf?simply_static_page=3 -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:103] Filesize: 272979 bytes -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/pdf -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/mikeconrad-devops.pdf -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c01fec3f99-sfyPug.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/mikeconrad-devops.pdf -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:11] [class-ss-page.php:119] Checking Content Identical:3a28cfce3d33c52cec89cd8e8a6ab43871d78786===. Value: FALSE -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/portfolio/ -[2024-10-13 17:23:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 30 -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c01ff09239-gHKaOg.tmp -[2024-10-13 17:23:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/portfolio/?simply_static_page=4 -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/portfolio/?simply_static_page=4 -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:103] Filesize: 68683 bytes -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:233] New filename for static page: portfolio/index.html -[2024-10-13 17:23:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c01ff09239-gHKaOg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/portfolio/index.html -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:11] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:23:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:12] [class-ss-page.php:119] Checking Content Identical:d8d3e9308248cf35a0fa0c82d91bc5e29499298a===. Value: FALSE -[2024-10-13 17:23:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/my-story/ -[2024-10-13 17:23:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 30 -[2024-10-13 17:23:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0200110b8-pKXV6U.tmp -[2024-10-13 17:23:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/my-story/?simply_static_page=5 -[2024-10-13 17:23:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/my-story/?simply_static_page=5 -[2024-10-13 17:23:12] [class-ss-url-fetcher.php:103] Filesize: 67070 bytes -[2024-10-13 17:23:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:12] [class-ss-url-fetcher.php:233] New filename for static page: my-story/index.html -[2024-10-13 17:23:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0200110b8-pKXV6U.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/my-story/index.html -[2024-10-13 17:23:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:13] [class-ss-page.php:119] Checking Content Identical:52edf1156378c561e382b5092fb63a7ac0f8e375===. Value: FALSE -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg -[2024-10-13 17:23:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 30 -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020117ea9-my4kl9.tmp -[2024-10-13 17:23:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg?simply_static_page=6 -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg?simply_static_page=6 -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:103] Filesize: 224955 bytes -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min.jpg -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020117ea9-my4kl9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:13] [class-ss-page.php:119] Checking Content Identical:4a8b6bebf0743e654af73fadc9c83760e3101d8f===. Value: FALSE -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg -[2024-10-13 17:23:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 30 -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020172b12-Xk9E06.tmp -[2024-10-13 17:23:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg?simply_static_page=7 -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg?simply_static_page=7 -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:103] Filesize: 15443 bytes -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020172b12-Xk9E06.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:13] [class-ss-page.php:119] Checking Content Identical:0d4ba3d0299db8e6242fb0237e3f7e11170a11ab===. Value: FALSE -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg -[2024-10-13 17:23:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 30 -[2024-10-13 17:23:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0201b9414-c4CfZP.tmp -[2024-10-13 17:23:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg?simply_static_page=8 -[2024-10-13 17:23:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg?simply_static_page=8 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:103] Filesize: 81647 bytes -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0201b9414-c4CfZP.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:14] [class-ss-page.php:119] Checking Content Identical:6f709bf032c5df43e69282dc247ed0e057abedeb===. Value: FALSE -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg -[2024-10-13 17:23:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 30 -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020218279-26AQZn.tmp -[2024-10-13 17:23:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg?simply_static_page=9 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg?simply_static_page=9 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:103] Filesize: 55757 bytes -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020218279-26AQZn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:14] [class-ss-page.php:119] Checking Content Identical:e44e73c757c194fcd56c6a3f8ad603a07513963a===. Value: FALSE -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg -[2024-10-13 17:23:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 30 -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020261fc1-Hs8Nti.tmp -[2024-10-13 17:23:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg?simply_static_page=10 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg?simply_static_page=10 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:103] Filesize: 143078 bytes -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020261fc1-Hs8Nti.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:14] [class-ss-page.php:119] Checking Content Identical:d6585817ea437a87f57704395ccc5cd54485e154===. Value: FALSE -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min.jpg -[2024-10-13 17:23:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 30 -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0202b291b-nthoIy.tmp -[2024-10-13 17:23:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/avatar-min.jpg?simply_static_page=11 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min.jpg?simply_static_page=11 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:103] Filesize: 12507 bytes -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/avatar-min.jpg -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0202b291b-nthoIy.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min.jpg -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:14] [class-ss-page.php:119] Checking Content Identical:0bf79c33a2c378211dd16dc09630d325f5b689f8===. Value: FALSE -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-300x225.jpg -[2024-10-13 17:23:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 30 -[2024-10-13 17:23:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0202d66dc-07H7Ns.tmp -[2024-10-13 17:23:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-300x225.jpg?simply_static_page=12 -[2024-10-13 17:23:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-300x225.jpg?simply_static_page=12 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:103] Filesize: 3977 bytes -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/avatar-min-300x225.jpg -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0202d66dc-07H7Ns.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-300x225.jpg -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:15] [class-ss-page.php:119] Checking Content Identical:2d942a2de89decbfa83a962de7f162e6ccd0024b===. Value: FALSE -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-768x576.jpg -[2024-10-13 17:23:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 30 -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02032b8d4-uw6XsL.tmp -[2024-10-13 17:23:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-768x576.jpg?simply_static_page=13 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-768x576.jpg?simply_static_page=13 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:103] Filesize: 12568 bytes -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/avatar-min-768x576.jpg -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02032b8d4-uw6XsL.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-768x576.jpg -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:15] [class-ss-page.php:119] Checking Content Identical:ff5b1b50da55ca864a90ed96e9a31c1c39cd2574===. Value: FALSE -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/navigation/view.min.js -[2024-10-13 17:23:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 30 -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0203735f1-VDutRl.tmp -[2024-10-13 17:23:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/navigation/view.min.js?simply_static_page=14 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/navigation/view.min.js?simply_static_page=14 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:103] Filesize: 3300 bytes -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/navigation/view.min.js -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0203735f1-VDutRl.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/view.min.js -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:15] [class-ss-page.php:119] Checking Content Identical:b27ba805d3b9118edfd523f01fd6e84229d52ffd===. Value: FALSE -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/assets/js/openpanel.js -[2024-10-13 17:23:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 30 -[2024-10-13 17:23:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0203b475a-fqEBbl.tmp -[2024-10-13 17:23:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/assets/js/openpanel.js?simply_static_page=15 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/assets/js/openpanel.js?simply_static_page=15 -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:103] Filesize: 264 bytes -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/assets/js/openpanel.js -[2024-10-13 17:23:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0203b475a-fqEBbl.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/js/openpanel.js -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:16] [class-ss-page.php:119] Checking Content Identical:ee8c6ac229f233f4a0aa42c3a947a5b9e3a0d1fd===. Value: FALSE -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png -[2024-10-13 17:23:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 30 -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020404149-fr1TaN.tmp -[2024-10-13 17:23:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png?simply_static_page=16 -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png?simply_static_page=16 -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:103] Filesize: 20864 bytes -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020404149-fr1TaN.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:16] [class-ss-page.php:119] Checking Content Identical:9adf5fdc8eee1562ca42ad8eba33aa317e494c20===. Value: FALSE -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/feed/ -[2024-10-13 17:23:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 30 -[2024-10-13 17:23:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02043dd71-yqHc8D.tmp -[2024-10-13 17:23:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/feed/?simply_static_page=17 -[2024-10-13 17:23:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/feed/?simply_static_page=17 -[2024-10-13 17:23:17] [class-ss-url-fetcher.php:103] Filesize: 85167 bytes -[2024-10-13 17:23:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:23:17] [class-ss-url-fetcher.php:233] New filename for static page: feed/index.xml -[2024-10-13 17:23:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02043dd71-yqHc8D.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.xml -[2024-10-13 17:23:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:17] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:23:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:17] [class-ss-page.php:119] Checking Content Identical:2b83b4e4d9c9df81eea7e9d5ca84ece73ef52764===. Value: FALSE -[2024-10-13 17:23:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/comments/feed/ -[2024-10-13 17:23:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 30 -[2024-10-13 17:23:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0205c6e38-WkPA86.tmp -[2024-10-13 17:23:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/comments/feed/?simply_static_page=18 -[2024-10-13 17:23:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/comments/feed/?simply_static_page=18 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:103] Filesize: 764 bytes -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:233] New filename for static page: comments/feed/index.xml -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0205c6e38-WkPA86.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/comments/feed/index.xml -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:18] [class-ss-page.php:119] Checking Content Identical:53d7749de9c8359981aa4a7200ee52ea6eee0acf===. Value: FALSE -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/navigation/style.min.css -[2024-10-13 17:23:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 30 -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02067a526-WaYbEP.tmp -[2024-10-13 17:23:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/navigation/style.min.css?simply_static_page=19 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/navigation/style.min.css?simply_static_page=19 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:103] Filesize: 16384 bytes -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/navigation/style.min.css -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02067a526-WaYbEP.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/style.min.css -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:18] [class-ss-page.php:119] Checking Content Identical:da66b61dcc5204277eb7846b9dce55b2e7d58a42===. Value: FALSE -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/social-links/style.min.css -[2024-10-13 17:23:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 30 -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0206ba4bc-o1QGYH.tmp -[2024-10-13 17:23:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/social-links/style.min.css?simply_static_page=20 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/social-links/style.min.css?simply_static_page=20 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:103] Filesize: 11600 bytes -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/social-links/style.min.css -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0206ba4bc-o1QGYH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/social-links/style.min.css -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:18] [class-ss-page.php:119] Checking Content Identical:d31bfce420030e49e51a5714f07ff2c31b812848===. Value: FALSE -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/cover/style.min.css -[2024-10-13 17:23:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 30 -[2024-10-13 17:23:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0206e0966-lFKYuZ.tmp -[2024-10-13 17:23:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/cover/style.min.css?simply_static_page=21 -[2024-10-13 17:23:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/cover/style.min.css?simply_static_page=21 -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:103] Filesize: 17950 bytes -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/cover/style.min.css -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0206e0966-lFKYuZ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/cover/style.min.css -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:19] [class-ss-page.php:119] Checking Content Identical:62c549867e546e9b70dbba51b299d0a884dd5df3===. Value: FALSE -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/style.css -[2024-10-13 17:23:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 30 -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02072f35f-aXpYTd.tmp -[2024-10-13 17:23:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/style.css?simply_static_page=22 -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/style.css?simply_static_page=22 -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:103] Filesize: 9050 bytes -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/style.css -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02072f35f-aXpYTd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/style.css -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:19] [class-ss-page.php:119] Checking Content Identical:450b8acb429381f4fdb50afd3a1b9af317b1385b===. Value: FALSE -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/ -[2024-10-13 17:23:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 30 -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/ -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/xmlrpc.php -[2024-10-13 17:23:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 30 -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/xmlrpc.php -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/js/dist/interactivity.min.js -[2024-10-13 17:23:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 30 -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020779469-nuHAjo.tmp -[2024-10-13 17:23:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/js/dist/interactivity.min.js?simply_static_page=25 -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/js/dist/interactivity.min.js?simply_static_page=25 -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:103] Filesize: 36686 bytes -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/js/dist/interactivity.min.js -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020779469-nuHAjo.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/dist/interactivity.min.js -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:19] [class-ss-page.php:119] Checking Content Identical:39f2fd1115fdb171ea318c2ca240c7fe53df79b4===. Value: FALSE -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png -[2024-10-13 17:23:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 30 -[2024-10-13 17:23:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0207c0ff6-lTTNbZ.tmp -[2024-10-13 17:23:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png?simply_static_page=26 -[2024-10-13 17:23:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png?simply_static_page=26 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:103] Filesize: 1357 bytes -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0207c0ff6-lTTNbZ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:20] [class-ss-page.php:119] Checking Content Identical:900076750a33c4d1fb886cb2bad80f67d83dd6d0===. Value: FALSE -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png -[2024-10-13 17:23:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 30 -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02080fd08-gITy4L.tmp -[2024-10-13 17:23:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png?simply_static_page=27 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png?simply_static_page=27 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:103] Filesize: 13763 bytes -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02080fd08-gITy4L.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:20] [class-ss-page.php:119] Checking Content Identical:eb04e9a55ad719f89b480f638d573b2cab4ce9e4===. Value: FALSE -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png -[2024-10-13 17:23:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 30 -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020855044-Di65OY.tmp -[2024-10-13 17:23:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png?simply_static_page=28 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png?simply_static_page=28 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:103] Filesize: 12737 bytes -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020855044-Di65OY.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:20] [class-ss-page.php:119] Checking Content Identical:e204f1a0a759244f6cd69dbe809b8a26f635d89e===. Value: FALSE -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 -[2024-10-13 17:23:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 30 -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02089c3ce-9LDndc.tmp -[2024-10-13 17:23:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2?simply_static_page=29 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2?simply_static_page=29 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:103] Filesize: 52144 bytes -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: font/woff2 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02089c3ce-9LDndc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:20] [class-ss-page.php:119] Checking Content Identical:384dd000623891596c50b1036f22510c738d3073===. Value: FALSE -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 -[2024-10-13 17:23:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 30 -[2024-10-13 17:23:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0208e8802-DR7CWH.tmp -[2024-10-13 17:23:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2?simply_static_page=30 -[2024-10-13 17:23:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2?simply_static_page=30 -[2024-10-13 17:23:21] [class-ss-url-fetcher.php:103] Filesize: 56508 bytes -[2024-10-13 17:23:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: font/woff2 -[2024-10-13 17:23:21] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 -[2024-10-13 17:23:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0208e8802-DR7CWH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 -[2024-10-13 17:23:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:21] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:21] [class-ss-page.php:119] Checking Content Identical:f412f885a4a650be678d4321d30fdc5a76f0c653===. Value: FALSE -[2024-10-13 17:23:21] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 1 of 30 pages/files -[2024-10-13 17:23:21] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:23:21] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:23:21] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:23:21] [class-ss-fetch-urls-task.php:69] Total pages: 76; Pages remaining: 46 -[2024-10-13 17:23:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/standing-up-a-wireguard-vpn/ -[2024-10-13 17:23:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 76 -[2024-10-13 17:23:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0209491b5-475SfM.tmp -[2024-10-13 17:23:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/standing-up-a-wireguard-vpn/?simply_static_page=31 -[2024-10-13 17:23:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/standing-up-a-wireguard-vpn/?simply_static_page=31 -[2024-10-13 17:23:22] [class-ss-url-fetcher.php:103] Filesize: 96532 bytes -[2024-10-13 17:23:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:22] [class-ss-url-fetcher.php:233] New filename for static page: standing-up-a-wireguard-vpn/index.html -[2024-10-13 17:23:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0209491b5-475SfM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/index.html -[2024-10-13 17:23:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:22] [class-ss-fetch-urls-task.php:159] Adding 36 URLs to the queue -[2024-10-13 17:23:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:22] [class-ss-page.php:119] Checking Content Identical:57d0054c917de71294f31a01bfc58744f9133289===. Value: FALSE -[2024-10-13 17:23:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ -[2024-10-13 17:23:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 76 -[2024-10-13 17:23:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020a9678a-RGso2j.tmp -[2024-10-13 17:23:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/?simply_static_page=32 -[2024-10-13 17:23:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/?simply_static_page=32 -[2024-10-13 17:23:23] [class-ss-url-fetcher.php:103] Filesize: 83216 bytes -[2024-10-13 17:23:23] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:23] [class-ss-url-fetcher.php:233] New filename for static page: hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html -[2024-10-13 17:23:23] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020a9678a-RGso2j.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html -[2024-10-13 17:23:23] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:23] [class-ss-fetch-urls-task.php:159] Adding 37 URLs to the queue -[2024-10-13 17:23:23] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:23] [class-ss-page.php:119] Checking Content Identical:a809c7de4fe0336f62f17a8ad1ce682320f1fc8b===. Value: FALSE -[2024-10-13 17:23:23] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/debugging-running-nginx-config/ -[2024-10-13 17:23:23] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 76 -[2024-10-13 17:23:23] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:23] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020bba251-tmPsK2.tmp -[2024-10-13 17:23:23] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/debugging-running-nginx-config/?simply_static_page=33 -[2024-10-13 17:23:23] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/debugging-running-nginx-config/?simply_static_page=33 -[2024-10-13 17:23:24] [class-ss-url-fetcher.php:103] Filesize: 86392 bytes -[2024-10-13 17:23:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:24] [class-ss-url-fetcher.php:233] New filename for static page: debugging-running-nginx-config/index.html -[2024-10-13 17:23:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020bba251-tmPsK2.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/index.html -[2024-10-13 17:23:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:24] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:23:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:24] [class-ss-page.php:119] Checking Content Identical:662fbbe73740b145d2bb27a6b2e36a8837d687cb===. Value: FALSE -[2024-10-13 17:23:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/ -[2024-10-13 17:23:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 76 -[2024-10-13 17:23:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:24] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020cf2b46-TNgelT.tmp -[2024-10-13 17:23:24] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/fun-with-bots-ssh-tarpitting/?simply_static_page=34 -[2024-10-13 17:23:24] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/?simply_static_page=34 -[2024-10-13 17:23:25] [class-ss-url-fetcher.php:103] Filesize: 96548 bytes -[2024-10-13 17:23:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:25] [class-ss-url-fetcher.php:233] New filename for static page: fun-with-bots-ssh-tarpitting/index.html -[2024-10-13 17:23:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020cf2b46-TNgelT.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/index.html -[2024-10-13 17:23:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:26] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:23:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:26] [class-ss-page.php:119] Checking Content Identical:bd15804940d197447188f80c6ea3120c9ed5c486===. Value: FALSE -[2024-10-13 17:23:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/ -[2024-10-13 17:23:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 76 -[2024-10-13 17:23:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020e14dc5-i4v9uE.tmp -[2024-10-13 17:23:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/?simply_static_page=35 -[2024-10-13 17:23:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/?simply_static_page=35 -[2024-10-13 17:23:27] [class-ss-url-fetcher.php:103] Filesize: 84814 bytes -[2024-10-13 17:23:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:27] [class-ss-url-fetcher.php:233] New filename for static page: traefik-3-0-service-discovery-in-docker-swarm-mode/index.html -[2024-10-13 17:23:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020e14dc5-i4v9uE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/index.html -[2024-10-13 17:23:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:27] [class-ss-fetch-urls-task.php:159] Adding 36 URLs to the queue -[2024-10-13 17:23:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:27] [class-ss-page.php:119] Checking Content Identical:d63d621ecafc808ef179400bb9791205da434d6f===. Value: FALSE -[2024-10-13 17:23:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/stop-all-running-containers-with-docker/ -[2024-10-13 17:23:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 76 -[2024-10-13 17:23:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c020f9777c-ocIgcc.tmp -[2024-10-13 17:23:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/stop-all-running-containers-with-docker/?simply_static_page=36 -[2024-10-13 17:23:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/stop-all-running-containers-with-docker/?simply_static_page=36 -[2024-10-13 17:23:28] [class-ss-url-fetcher.php:103] Filesize: 79173 bytes -[2024-10-13 17:23:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:28] [class-ss-url-fetcher.php:233] New filename for static page: stop-all-running-containers-with-docker/index.html -[2024-10-13 17:23:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c020f9777c-ocIgcc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/index.html -[2024-10-13 17:23:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:28] [class-ss-fetch-urls-task.php:159] Adding 37 URLs to the queue -[2024-10-13 17:23:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:28] [class-ss-page.php:119] Checking Content Identical:3cf2818114ca57b1bce0bb03d5937277b8bd522b===. Value: FALSE -[2024-10-13 17:23:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/ -[2024-10-13 17:23:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 76 -[2024-10-13 17:23:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0210d247f-YhWhxx.tmp -[2024-10-13 17:23:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/?simply_static_page=37 -[2024-10-13 17:23:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/?simply_static_page=37 -[2024-10-13 17:23:29] [class-ss-url-fetcher.php:103] Filesize: 87252 bytes -[2024-10-13 17:23:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:29] [class-ss-url-fetcher.php:233] New filename for static page: automating-ci-cd-with-teamcity-ansible/index.html -[2024-10-13 17:23:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0210d247f-YhWhxx.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/index.html -[2024-10-13 17:23:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:29] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:23:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:29] [class-ss-page.php:119] Checking Content Identical:692bb89129362a66356622712020728354a12042===. Value: FALSE -[2024-10-13 17:23:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/ -[2024-10-13 17:23:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 76 -[2024-10-13 17:23:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0211cf46a-Ro7EHg.tmp -[2024-10-13 17:23:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/self-hosted-package-registries-with-gitea/?simply_static_page=38 -[2024-10-13 17:23:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/?simply_static_page=38 -[2024-10-13 17:23:30] [class-ss-url-fetcher.php:103] Filesize: 81709 bytes -[2024-10-13 17:23:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:30] [class-ss-url-fetcher.php:233] New filename for static page: self-hosted-package-registries-with-gitea/index.html -[2024-10-13 17:23:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0211cf46a-Ro7EHg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/index.html -[2024-10-13 17:23:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:30] [class-ss-fetch-urls-task.php:159] Adding 43 URLs to the queue -[2024-10-13 17:23:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:30] [class-ss-page.php:119] Checking Content Identical:fe491a8c6931e9b8be8362b48383db511431e556===. Value: FALSE -[2024-10-13 17:23:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/ -[2024-10-13 17:23:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 76 -[2024-10-13 17:23:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0212d4e4f-ujQKcB.tmp -[2024-10-13 17:23:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/?simply_static_page=39 -[2024-10-13 17:23:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/?simply_static_page=39 -[2024-10-13 17:23:31] [class-ss-url-fetcher.php:103] Filesize: 84420 bytes -[2024-10-13 17:23:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:31] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html -[2024-10-13 17:23:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0212d4e4f-ujQKcB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html -[2024-10-13 17:23:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:31] [class-ss-fetch-urls-task.php:159] Adding 36 URLs to the queue -[2024-10-13 17:23:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:31] [class-ss-page.php:119] Checking Content Identical:940e333c727c83786769cadd7160b0639b408d28===. Value: FALSE -[2024-10-13 17:23:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/ -[2024-10-13 17:23:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 76 -[2024-10-13 17:23:31] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:31] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0213c82ca-0WnaRc.tmp -[2024-10-13 17:23:31] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/?simply_static_page=40 -[2024-10-13 17:23:31] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/?simply_static_page=40 -[2024-10-13 17:23:32] [class-ss-url-fetcher.php:103] Filesize: 84784 bytes -[2024-10-13 17:23:32] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:32] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html -[2024-10-13 17:23:32] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0213c82ca-0WnaRc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html -[2024-10-13 17:23:32] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:32] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:23:32] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:33] [class-ss-page.php:119] Checking Content Identical:2b4b530bb549c97e4c0052a775f31bdef2707da7===. Value: FALSE -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/pages/452 -[2024-10-13 17:23:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 76 -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/pages/452 -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/oembed/1.0/embed -[2024-10-13 17:23:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 76 -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/oembed/1.0/embed -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hoots-wings/ -[2024-10-13 17:23:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 76 -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021506cc7-EnRrj4.tmp -[2024-10-13 17:23:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hoots-wings/?simply_static_page=43 -[2024-10-13 17:23:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hoots-wings/?simply_static_page=43 -[2024-10-13 17:23:33] [class-ss-url-fetcher.php:103] Filesize: 83662 bytes -[2024-10-13 17:23:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:33] [class-ss-url-fetcher.php:233] New filename for static page: hoots-wings/index.html -[2024-10-13 17:23:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021506cc7-EnRrj4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/index.html -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:33] [class-ss-fetch-urls-task.php:159] Adding 55 URLs to the queue -[2024-10-13 17:23:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:34] [class-ss-page.php:119] Checking Content Identical:c0b685274a797015fc2e8fc96d24a4d0b6c0b98b===. Value: FALSE -[2024-10-13 17:23:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hilger-grading-portal/ -[2024-10-13 17:23:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 76 -[2024-10-13 17:23:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02165070c-khddmF.tmp -[2024-10-13 17:23:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hilger-grading-portal/?simply_static_page=44 -[2024-10-13 17:23:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hilger-grading-portal/?simply_static_page=44 -[2024-10-13 17:23:35] [class-ss-url-fetcher.php:103] Filesize: 84535 bytes -[2024-10-13 17:23:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:35] [class-ss-url-fetcher.php:233] New filename for static page: hilger-grading-portal/index.html -[2024-10-13 17:23:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02165070c-khddmF.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/index.html -[2024-10-13 17:23:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:35] [class-ss-fetch-urls-task.php:159] Adding 54 URLs to the queue -[2024-10-13 17:23:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:35] [class-ss-page.php:119] Checking Content Identical:63b86148c0bbad4908583c61db2e3b7f212b6c63===. Value: FALSE -[2024-10-13 17:23:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min.webp -[2024-10-13 17:23:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 76 -[2024-10-13 17:23:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0217b313d-HNhpnR.tmp -[2024-10-13 17:23:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min.webp?simply_static_page=45 -[2024-10-13 17:23:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min.webp?simply_static_page=45 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:103] Filesize: 301528 bytes -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min.webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0217b313d-HNhpnR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min.webp -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:36] [class-ss-page.php:119] Checking Content Identical:7960d0918693e5e76fb6c4a37605d4da566ae769===. Value: FALSE -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp -[2024-10-13 17:23:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 76 -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02181a726-53i4fl.tmp -[2024-10-13 17:23:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp?simply_static_page=46 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp?simply_static_page=46 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:103] Filesize: 36442 bytes -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-300x153.webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02181a726-53i4fl.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:36] [class-ss-page.php:119] Checking Content Identical:53ca89eab5081594f77d5295323366378a79f0f4===. Value: FALSE -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp -[2024-10-13 17:23:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 76 -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0218639ff-NnRVKj.tmp -[2024-10-13 17:23:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp?simply_static_page=47 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp?simply_static_page=47 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:103] Filesize: 300644 bytes -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0218639ff-NnRVKj.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:36] [class-ss-page.php:119] Checking Content Identical:56115651ac76d3e539c76900adab29b1e405227d===. Value: FALSE -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp -[2024-10-13 17:23:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 76 -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0218af3d8-SISdOw.tmp -[2024-10-13 17:23:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp?simply_static_page=48 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp?simply_static_page=48 -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:103] Filesize: 180536 bytes -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-768x391.webp -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0218af3d8-SISdOw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:36] [class-ss-page.php:119] Checking Content Identical:90881f0ad55b51a1603eb5c8e0351e0a8da3f36e===. Value: FALSE -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp -[2024-10-13 17:23:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 76 -[2024-10-13 17:23:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0218f3d47-wdvvDU.tmp -[2024-10-13 17:23:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp?simply_static_page=49 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp?simply_static_page=49 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:103] Filesize: 653846 bytes -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0218f3d47-wdvvDU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:37] [class-ss-page.php:119] Checking Content Identical:68cdaa02310b4c3bc43f1daffabdc75ea6d42ac1===. Value: FALSE -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home.webp -[2024-10-13 17:23:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 76 -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021955aca-L3PhaB.tmp -[2024-10-13 17:23:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home.webp?simply_static_page=50 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home.webp?simply_static_page=50 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:103] Filesize: 42748 bytes -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home.webp -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021955aca-L3PhaB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home.webp -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:37] [class-ss-page.php:119] Checking Content Identical:1988106080c31c1c28c91a8ba9858215f1ab1440===. Value: FALSE -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp -[2024-10-13 17:23:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 76 -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021992a7b-RdRgNw.tmp -[2024-10-13 17:23:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp?simply_static_page=51 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp?simply_static_page=51 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:103] Filesize: 5256 bytes -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-300x150.webp -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021992a7b-RdRgNw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:37] [class-ss-page.php:119] Checking Content Identical:b29bd6891a6fb625b7a41810980f80802f83fe42===. Value: FALSE -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp -[2024-10-13 17:23:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 76 -[2024-10-13 17:23:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0219c49a9-pcPPkd.tmp -[2024-10-13 17:23:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp?simply_static_page=52 -[2024-10-13 17:23:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp?simply_static_page=52 -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:103] Filesize: 34090 bytes -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0219c49a9-pcPPkd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:38] [class-ss-page.php:119] Checking Content Identical:0c9252641263ec877fa55fe8a7444b4d8823874d===. Value: FALSE -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp -[2024-10-13 17:23:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 76 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021a1e17a-MLJLWm.tmp -[2024-10-13 17:23:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp?simply_static_page=53 -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp?simply_static_page=53 -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:103] Filesize: 21532 bytes -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-768x385.webp -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021a1e17a-MLJLWm.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:38] [class-ss-page.php:119] Checking Content Identical:3c2958da28d3a3d57e0d8c94e7b27f64bb741fd0===. Value: FALSE -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp -[2024-10-13 17:23:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 76 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021a6bf5c-5fFaIM.tmp -[2024-10-13 17:23:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp?simply_static_page=54 -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp?simply_static_page=54 -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:103] Filesize: 65742 bytes -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021a6bf5c-5fFaIM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:38] [class-ss-page.php:119] Checking Content Identical:e4d9c8d382e77c3330b885c00e7520c44becc880===. Value: FALSE -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/pages/494 -[2024-10-13 17:23:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 76 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/pages/494 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/pages/491 -[2024-10-13 17:23:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 76 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/pages/491 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image-1024x320.png -[2024-10-13 17:23:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 76 -[2024-10-13 17:23:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021ac4cbd-TdQnur.tmp -[2024-10-13 17:23:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image-1024x320.png?simply_static_page=57 -[2024-10-13 17:23:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image-1024x320.png?simply_static_page=57 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:103] Filesize: 72620 bytes -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image-1024x320.png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021ac4cbd-TdQnur.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-1024x320.png -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:39] [class-ss-page.php:119] Checking Content Identical:e4a5a010cfaa36a78d6f98ee9383812b991547ac===. Value: FALSE -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image-300x94.png -[2024-10-13 17:23:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 76 -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021b1e601-E3bcX9.tmp -[2024-10-13 17:23:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image-300x94.png?simply_static_page=58 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image-300x94.png?simply_static_page=58 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:103] Filesize: 11468 bytes -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image-300x94.png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021b1e601-E3bcX9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-300x94.png -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:39] [class-ss-page.php:119] Checking Content Identical:2740f372cd2e8a87a32ea27dc98ae872c34647d4===. Value: FALSE -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image-768x240.png -[2024-10-13 17:23:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 76 -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021b64212-6k1EKJ.tmp -[2024-10-13 17:23:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image-768x240.png?simply_static_page=59 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image-768x240.png?simply_static_page=59 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:103] Filesize: 47793 bytes -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image-768x240.png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021b64212-6k1EKJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-768x240.png -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:39] [class-ss-page.php:119] Checking Content Identical:0daadd873f9aad029408cbf6cbbeec618be9f6a5===. Value: FALSE -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image.png -[2024-10-13 17:23:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 76 -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021ba77fa-8bEmMI.tmp -[2024-10-13 17:23:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image.png?simply_static_page=60 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image.png?simply_static_page=60 -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:103] Filesize: 106600 bytes -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image.png -[2024-10-13 17:23:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021ba77fa-8bEmMI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image.png -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:39] [class-ss-page.php:119] Checking Content Identical:109d56f88e929cc9188dd267793f362f7d65622c===. Value: FALSE -[2024-10-13 17:23:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/ -[2024-10-13 17:23:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 76 -[2024-10-13 17:23:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021c02797-zFJNmR.tmp -[2024-10-13 17:23:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/?simply_static_page=61 -[2024-10-13 17:23:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/?simply_static_page=61 -[2024-10-13 17:23:40] [class-ss-url-fetcher.php:103] Filesize: 80752 bytes -[2024-10-13 17:23:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:40] [class-ss-url-fetcher.php:233] New filename for static page: sftp-server-setup-for-daily-inventory-file-transfers/index.html -[2024-10-13 17:23:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021c02797-zFJNmR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/index.html -[2024-10-13 17:23:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:41] [class-ss-page.php:119] Checking Content Identical:94121723a1719dd49c606f624cd1b4acf1e9d303===. Value: FALSE -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/05/image.png -[2024-10-13 17:23:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 76 -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021d2e3ee-xeEkgb.tmp -[2024-10-13 17:23:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/05/image.png?simply_static_page=62 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/05/image.png?simply_static_page=62 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:103] Filesize: 24565 bytes -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/05/image.png -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021d2e3ee-xeEkgb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image.png -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:41] [class-ss-page.php:119] Checking Content Identical:e427a176015408bd45825cc2466bbfb7c9313600===. Value: FALSE -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/05/image-300x86.png -[2024-10-13 17:23:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 76 -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021d740cf-hZpJmg.tmp -[2024-10-13 17:23:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/05/image-300x86.png?simply_static_page=63 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/05/image-300x86.png?simply_static_page=63 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:103] Filesize: 13574 bytes -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/05/image-300x86.png -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021d740cf-hZpJmg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image-300x86.png -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:41] [class-ss-page.php:119] Checking Content Identical:bf5b41bc94ba3976437d8610da02bc9dc0b5ddc9===. Value: FALSE -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1024x313.png -[2024-10-13 17:23:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 76 -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021d9cc86-XtXnfo.tmp -[2024-10-13 17:23:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-1024x313.png?simply_static_page=64 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1024x313.png?simply_static_page=64 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:103] Filesize: 30106 bytes -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-1024x313.png -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021d9cc86-XtXnfo.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1024x313.png -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:41] [class-ss-page.php:119] Checking Content Identical:c0eb3dc0c140af4e140bb19bd0a9880fe6ea10df===. Value: FALSE -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-300x92.png -[2024-10-13 17:23:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 76 -[2024-10-13 17:23:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021dddb48-XpEDx6.tmp -[2024-10-13 17:23:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-300x92.png?simply_static_page=65 -[2024-10-13 17:23:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-300x92.png?simply_static_page=65 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:103] Filesize: 7263 bytes -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-300x92.png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021dddb48-XpEDx6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-300x92.png -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:42] [class-ss-page.php:119] Checking Content Identical:a99d34929aecc771eeb0f6d924c8230445abf86b===. Value: FALSE -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-768x235.png -[2024-10-13 17:23:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 76 -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021e0d702-pwBiWR.tmp -[2024-10-13 17:23:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-768x235.png?simply_static_page=66 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-768x235.png?simply_static_page=66 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:103] Filesize: 21663 bytes -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-768x235.png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021e0d702-pwBiWR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-768x235.png -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:42] [class-ss-page.php:119] Checking Content Identical:f6526930286cb774c8f656e29a0b41c8ad9fab11===. Value: FALSE -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1536x469.png -[2024-10-13 17:23:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 76 -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021e568fd-reQrsM.tmp -[2024-10-13 17:23:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-1536x469.png?simply_static_page=67 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1536x469.png?simply_static_page=67 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:103] Filesize: 47460 bytes -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-1536x469.png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021e568fd-reQrsM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1536x469.png -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:42] [class-ss-page.php:119] Checking Content Identical:80270449830cc2634298f3ec691ed975fb93fbc2===. Value: FALSE -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6.png -[2024-10-13 17:23:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 76 -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021e95358-9Kz3sU.tmp -[2024-10-13 17:23:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6.png?simply_static_page=68 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6.png?simply_static_page=68 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:103] Filesize: 35465 bytes -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6.png -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021e95358-9Kz3sU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6.png -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:42] [class-ss-page.php:119] Checking Content Identical:15ff7c8b84ef88575f4a317819b3511b54edfac9===. Value: FALSE -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1024x437.png -[2024-10-13 17:23:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 76 -[2024-10-13 17:23:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021ecf394-upSQxF.tmp -[2024-10-13 17:23:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-1024x437.png?simply_static_page=69 -[2024-10-13 17:23:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1024x437.png?simply_static_page=69 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:103] Filesize: 60320 bytes -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-1024x437.png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021ecf394-upSQxF.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1024x437.png -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:43] [class-ss-page.php:119] Checking Content Identical:b3450b8a2518754851f8cbdf1ef972b46a043434===. Value: FALSE -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-300x128.png -[2024-10-13 17:23:43] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 76 -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021f25606-VmJ8Og.tmp -[2024-10-13 17:23:43] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-300x128.png?simply_static_page=70 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-300x128.png?simply_static_page=70 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:103] Filesize: 8428 bytes -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-300x128.png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021f25606-VmJ8Og.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-300x128.png -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:43] [class-ss-page.php:119] Checking Content Identical:2b2a8dd00349b576a3dc768f4cc9504468b0b9cd===. Value: FALSE -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-768x328.png -[2024-10-13 17:23:43] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 76 -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021f6b869-y08QWg.tmp -[2024-10-13 17:23:43] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-768x328.png?simply_static_page=71 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-768x328.png?simply_static_page=71 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:103] Filesize: 39096 bytes -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-768x328.png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021f6b869-y08QWg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-768x328.png -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:43] [class-ss-page.php:119] Checking Content Identical:5624e260c13827070a8a78fe02cbea4bf5638dca===. Value: FALSE -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1536x655.png -[2024-10-13 17:23:43] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 76 -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021f95bad-F7ELUF.tmp -[2024-10-13 17:23:43] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-1536x655.png?simply_static_page=72 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1536x655.png?simply_static_page=72 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:103] Filesize: 107117 bytes -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-1536x655.png -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021f95bad-F7ELUF.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1536x655.png -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:43] [class-ss-page.php:119] Checking Content Identical:c4247b88afe64f5ecf3be25769d8dc6e2f5a3f75===. Value: FALSE -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7.png -[2024-10-13 17:23:43] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 76 -[2024-10-13 17:23:43] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c021fe7a9d-fHrZrh.tmp -[2024-10-13 17:23:43] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7.png?simply_static_page=73 -[2024-10-13 17:23:43] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7.png?simply_static_page=73 -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:103] Filesize: 85037 bytes -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7.png -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c021fe7a9d-fHrZrh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7.png -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:44] [class-ss-page.php:119] Checking Content Identical:feeed01744eb02a37b5e20d041fa592069bf3687===. Value: FALSE -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9.png -[2024-10-13 17:23:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 76 -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02204587d-INAC6a.tmp -[2024-10-13 17:23:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-9.png?simply_static_page=74 -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9.png?simply_static_page=74 -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:103] Filesize: 61632 bytes -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-9.png -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02204587d-INAC6a.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9.png -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:44] [class-ss-page.php:119] Checking Content Identical:de8432ed173fffae45b04731c1e9a37bf324dd5e===. Value: FALSE -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-300x228.png -[2024-10-13 17:23:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 76 -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0220939aa-eMeq7f.tmp -[2024-10-13 17:23:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-9-300x228.png?simply_static_page=75 -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-300x228.png?simply_static_page=75 -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:103] Filesize: 15320 bytes -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-9-300x228.png -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0220939aa-eMeq7f.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-300x228.png -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:44] [class-ss-page.php:119] Checking Content Identical:db8765f86009a9fc65379a008357f935e4388112===. Value: FALSE -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-768x583.png -[2024-10-13 17:23:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 76 -[2024-10-13 17:23:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0220d8d5c-VzqYRR.tmp -[2024-10-13 17:23:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-9-768x583.png?simply_static_page=76 -[2024-10-13 17:23:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-768x583.png?simply_static_page=76 -[2024-10-13 17:23:45] [class-ss-url-fetcher.php:103] Filesize: 64950 bytes -[2024-10-13 17:23:45] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:45] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-9-768x583.png -[2024-10-13 17:23:45] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0220d8d5c-VzqYRR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-768x583.png -[2024-10-13 17:23:45] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:45] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:45] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:45] [class-ss-page.php:119] Checking Content Identical:158ff6973bee8c5096fa01c99f0148159268d4cc===. Value: FALSE -[2024-10-13 17:23:45] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 30 of 76 pages/files -[2024-10-13 17:23:45] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:23:45] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:23:45] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:23:45] [class-ss-fetch-urls-task.php:69] Total pages: 174; Pages remaining: 98 -[2024-10-13 17:23:45] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/l/email-protection -[2024-10-13 17:23:45] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 174 -[2024-10-13 17:23:45] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:45] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0221ec772-uZmIiz.tmp -[2024-10-13 17:23:45] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/l/email-protection?simply_static_page=77 -[2024-10-13 17:23:45] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/l/email-protection?simply_static_page=77 -[2024-10-13 17:23:46] [class-ss-url-fetcher.php:103] Filesize: 4690 bytes -[2024-10-13 17:23:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:46] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/l/email-protection/index.html -[2024-10-13 17:23:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0221ec772-uZmIiz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/l/email-protection/index.html -[2024-10-13 17:23:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:46] [class-ss-fetch-urls-task.php:159] Adding 1 URLs to the queue -[2024-10-13 17:23:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:46] [class-ss-page.php:119] Checking Content Identical:3b6dc2bbada830fa8e6eae2b5be52459629d831e===. Value: FALSE -[2024-10-13 17:23:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/automation/ -[2024-10-13 17:23:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 174 -[2024-10-13 17:23:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02221b4d2-cEYqoj.tmp -[2024-10-13 17:23:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/automation/?simply_static_page=78 -[2024-10-13 17:23:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/automation/?simply_static_page=78 -[2024-10-13 17:23:47] [class-ss-url-fetcher.php:103] Filesize: 71963 bytes -[2024-10-13 17:23:47] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:47] [class-ss-url-fetcher.php:233] New filename for static page: category/automation/index.html -[2024-10-13 17:23:47] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02221b4d2-cEYqoj.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/index.html -[2024-10-13 17:23:47] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:47] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:23:47] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:47] [class-ss-page.php:119] Checking Content Identical:794c0a36ed9bd9d0193f6c5e1665fd1ecebb80b6===. Value: FALSE -[2024-10-13 17:23:47] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/iac/ -[2024-10-13 17:23:47] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 174 -[2024-10-13 17:23:47] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:47] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02237e925-mweUdw.tmp -[2024-10-13 17:23:47] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/iac/?simply_static_page=79 -[2024-10-13 17:23:47] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/iac/?simply_static_page=79 -[2024-10-13 17:23:48] [class-ss-url-fetcher.php:103] Filesize: 66294 bytes -[2024-10-13 17:23:48] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:48] [class-ss-url-fetcher.php:233] New filename for static page: category/iac/index.html -[2024-10-13 17:23:48] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02237e925-mweUdw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/index.html -[2024-10-13 17:23:48] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:48] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:23:48] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:48] [class-ss-page.php:119] Checking Content Identical:23d32a43bbbd7458a3da96c47e00dd275139ec8c===. Value: FALSE -[2024-10-13 17:23:48] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/open-source/ -[2024-10-13 17:23:48] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 174 -[2024-10-13 17:23:48] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:48] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02247a5de-dFIV2Z.tmp -[2024-10-13 17:23:48] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/open-source/?simply_static_page=80 -[2024-10-13 17:23:48] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/open-source/?simply_static_page=80 -[2024-10-13 17:23:49] [class-ss-url-fetcher.php:103] Filesize: 68188 bytes -[2024-10-13 17:23:49] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:49] [class-ss-url-fetcher.php:233] New filename for static page: category/open-source/index.html -[2024-10-13 17:23:49] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02247a5de-dFIV2Z.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/index.html -[2024-10-13 17:23:49] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:49] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:23:49] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:49] [class-ss-page.php:119] Checking Content Identical:afd84792737f52fab989952e5893a3409ff3e148===. Value: FALSE -[2024-10-13 17:23:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/security/ -[2024-10-13 17:23:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 174 -[2024-10-13 17:23:49] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:49] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022575a13-vwc2pR.tmp -[2024-10-13 17:23:49] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/security/?simply_static_page=81 -[2024-10-13 17:23:49] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/security/?simply_static_page=81 -[2024-10-13 17:23:50] [class-ss-url-fetcher.php:103] Filesize: 69138 bytes -[2024-10-13 17:23:50] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:50] [class-ss-url-fetcher.php:233] New filename for static page: category/security/index.html -[2024-10-13 17:23:50] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022575a13-vwc2pR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/index.html -[2024-10-13 17:23:50] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:50] [class-ss-fetch-urls-task.php:159] Adding 26 URLs to the queue -[2024-10-13 17:23:50] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:50] [class-ss-page.php:119] Checking Content Identical:f454a05ba191d387bf5c62054a5d6b043114ae3f===. Value: FALSE -[2024-10-13 17:23:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/self-hosted/ -[2024-10-13 17:23:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 174 -[2024-10-13 17:23:50] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:50] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02266cdaa-OvKfvw.tmp -[2024-10-13 17:23:50] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/self-hosted/?simply_static_page=82 -[2024-10-13 17:23:50] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/self-hosted/?simply_static_page=82 -[2024-10-13 17:23:51] [class-ss-url-fetcher.php:103] Filesize: 70616 bytes -[2024-10-13 17:23:51] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:51] [class-ss-url-fetcher.php:233] New filename for static page: category/self-hosted/index.html -[2024-10-13 17:23:51] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02266cdaa-OvKfvw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/index.html -[2024-10-13 17:23:51] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:51] [class-ss-fetch-urls-task.php:159] Adding 29 URLs to the queue -[2024-10-13 17:23:51] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:51] [class-ss-page.php:119] Checking Content Identical:0ba059f1bb7441de05384079972336244ed46706===. Value: FALSE -[2024-10-13 17:23:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/software-engineering/ -[2024-10-13 17:23:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 174 -[2024-10-13 17:23:51] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:51] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022768bbf-E9cfnN.tmp -[2024-10-13 17:23:51] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/software-engineering/?simply_static_page=83 -[2024-10-13 17:23:51] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/software-engineering/?simply_static_page=83 -[2024-10-13 17:23:52] [class-ss-url-fetcher.php:103] Filesize: 76649 bytes -[2024-10-13 17:23:52] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:52] [class-ss-url-fetcher.php:233] New filename for static page: category/software-engineering/index.html -[2024-10-13 17:23:52] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022768bbf-E9cfnN.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/index.html -[2024-10-13 17:23:52] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:52] [class-ss-fetch-urls-task.php:159] Adding 47 URLs to the queue -[2024-10-13 17:23:52] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:52] [class-ss-page.php:119] Checking Content Identical:472929bebb0941c31c7108a77269e6afce167cff===. Value: FALSE -[2024-10-13 17:23:52] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ssh/ -[2024-10-13 17:23:52] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 174 -[2024-10-13 17:23:52] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:52] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022883afd-UgHCFR.tmp -[2024-10-13 17:23:52] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ssh/?simply_static_page=84 -[2024-10-13 17:23:52] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ssh/?simply_static_page=84 -[2024-10-13 17:23:53] [class-ss-url-fetcher.php:103] Filesize: 67196 bytes -[2024-10-13 17:23:53] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:53] [class-ss-url-fetcher.php:233] New filename for static page: category/ssh/index.html -[2024-10-13 17:23:53] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022883afd-UgHCFR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/index.html -[2024-10-13 17:23:53] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:53] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:23:53] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:53] [class-ss-page.php:119] Checking Content Identical:bc6d73219610e601b44ad80ba37fb328679ab0d3===. Value: FALSE -[2024-10-13 17:23:53] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/blog-post/ -[2024-10-13 17:23:53] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 174 -[2024-10-13 17:23:53] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:53] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022989345-bAZ95k.tmp -[2024-10-13 17:23:53] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/blog-post/?simply_static_page=85 -[2024-10-13 17:23:53] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/blog-post/?simply_static_page=85 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:103] Filesize: 77122 bytes -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:233] New filename for static page: tag/blog-post/index.html -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022989345-bAZ95k.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/index.html -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:159] Adding 41 URLs to the queue -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:54] [class-ss-page.php:119] Checking Content Identical:de0e732117849f4a2aa064fe6df2a7804d9faf2f===. Value: FALSE -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js -[2024-10-13 17:23:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 174 -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022a85dac-wDIns7.tmp -[2024-10-13 17:23:54] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js?simply_static_page=86 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js?simply_static_page=86 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:103] Filesize: 1239 bytes -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/javascript -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022a85dac-wDIns7.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:54] [class-ss-page.php:119] Checking Content Identical:a8af90d7482e1e99d03de6bf88fed2315c5dd728===. Value: FALSE -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/js/comment-reply.min.js -[2024-10-13 17:23:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 174 -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022a9f63e-gB6FLr.tmp -[2024-10-13 17:23:54] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/js/comment-reply.min.js?simply_static_page=87 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/js/comment-reply.min.js?simply_static_page=87 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:103] Filesize: 2981 bytes -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/js/comment-reply.min.js -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022a9f63e-gB6FLr.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/comment-reply.min.js -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:54] [class-ss-page.php:119] Checking Content Identical:db36a77f6aaa2063bfbec02c2c0e967438c5a245===. Value: FALSE -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/standing-up-a-wireguard-vpn/feed/ -[2024-10-13 17:23:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 174 -[2024-10-13 17:23:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022ae010c-lY3NAu.tmp -[2024-10-13 17:23:54] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/standing-up-a-wireguard-vpn/feed/?simply_static_page=88 -[2024-10-13 17:23:54] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/standing-up-a-wireguard-vpn/feed/?simply_static_page=88 -[2024-10-13 17:23:55] [class-ss-url-fetcher.php:103] Filesize: 829 bytes -[2024-10-13 17:23:55] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:23:55] [class-ss-url-fetcher.php:233] New filename for static page: standing-up-a-wireguard-vpn/feed/index.xml -[2024-10-13 17:23:55] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022ae010c-lY3NAu.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/feed/index.xml -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:55] [class-ss-page.php:119] Checking Content Identical:867a052908378d333550e126d023ce4825c4a748===. Value: FALSE -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/619 -[2024-10-13 17:23:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 174 -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/619 -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/cloudflare/ -[2024-10-13 17:23:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 174 -[2024-10-13 17:23:55] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:55] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022b8de9a-xAx0P7.tmp -[2024-10-13 17:23:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/cloudflare/?simply_static_page=90 -[2024-10-13 17:23:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/cloudflare/?simply_static_page=90 -[2024-10-13 17:23:56] [class-ss-url-fetcher.php:103] Filesize: 70048 bytes -[2024-10-13 17:23:56] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:56] [class-ss-url-fetcher.php:233] New filename for static page: category/cloudflare/index.html -[2024-10-13 17:23:56] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022b8de9a-xAx0P7.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/index.html -[2024-10-13 17:23:56] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:56] [class-ss-fetch-urls-task.php:159] Adding 27 URLs to the queue -[2024-10-13 17:23:56] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:56] [class-ss-page.php:119] Checking Content Identical:f4167f45821949019bcd2fb1b134f136dd132b08===. Value: FALSE -[2024-10-13 17:23:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/networking/ -[2024-10-13 17:23:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 174 -[2024-10-13 17:23:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022c761b3-t7li3k.tmp -[2024-10-13 17:23:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/networking/?simply_static_page=91 -[2024-10-13 17:23:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/networking/?simply_static_page=91 -[2024-10-13 17:23:57] [class-ss-url-fetcher.php:103] Filesize: 68769 bytes -[2024-10-13 17:23:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:57] [class-ss-url-fetcher.php:233] New filename for static page: category/networking/index.html -[2024-10-13 17:23:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022c761b3-t7li3k.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/index.html -[2024-10-13 17:23:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:57] [class-ss-fetch-urls-task.php:159] Adding 27 URLs to the queue -[2024-10-13 17:23:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:57] [class-ss-page.php:119] Checking Content Identical:63b573d534bcf7c994a26a17ce063324387e624b===. Value: FALSE -[2024-10-13 17:23:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/ -[2024-10-13 17:23:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 174 -[2024-10-13 17:23:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022d8ec58-D6ecRE.tmp -[2024-10-13 17:23:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/?simply_static_page=92 -[2024-10-13 17:23:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/?simply_static_page=92 -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:103] Filesize: 946 bytes -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:233] New filename for static page: hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022d8ec58-D6ecRE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:58] [class-ss-page.php:119] Checking Content Identical:7daa91c2cfc48b9c12a5723a26ee3dc865f3043a===. Value: FALSE -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/image/style.min.css -[2024-10-13 17:23:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 174 -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022e4a793-UinVfK.tmp -[2024-10-13 17:23:58] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/image/style.min.css?simply_static_page=93 -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/image/style.min.css?simply_static_page=93 -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:103] Filesize: 6358 bytes -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/image/style.min.css -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022e4a793-UinVfK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/image/style.min.css -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:58] [class-ss-page.php:119] Checking Content Identical:54a1fef5278908a5bbd901dea250139c6d992b6f===. Value: FALSE -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/607 -[2024-10-13 17:23:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 174 -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/607 -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/docker/ -[2024-10-13 17:23:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 174 -[2024-10-13 17:23:58] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022e95156-KcXF0i.tmp -[2024-10-13 17:23:58] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/docker/?simply_static_page=95 -[2024-10-13 17:23:58] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/docker/?simply_static_page=95 -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:103] Filesize: 73490 bytes -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:233] New filename for static page: category/docker/index.html -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022e95156-KcXF0i.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/index.html -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:159] Adding 37 URLs to the queue -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:59] [class-ss-page.php:119] Checking Content Identical:ce386f95068aa52dfd88d595c658f4a0aea42563===. Value: FALSE -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx.png -[2024-10-13 17:23:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 174 -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022faffbb-2dv7Ef.tmp -[2024-10-13 17:23:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/07/nginx.png?simply_static_page=96 -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx.png?simply_static_page=96 -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:103] Filesize: 2103 bytes -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/07/nginx.png -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022faffbb-2dv7Ef.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx.png -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:23:59] [class-ss-page.php:119] Checking Content Identical:77552569f50ea0a22a66a3dc267dfb91ebce3259===. Value: FALSE -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx-300x61.png -[2024-10-13 17:23:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 174 -[2024-10-13 17:23:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c022ff0983-W3WfvV.tmp -[2024-10-13 17:23:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/07/nginx-300x61.png?simply_static_page=97 -[2024-10-13 17:23:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx-300x61.png?simply_static_page=97 -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:103] Filesize: 6281 bytes -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/07/nginx-300x61.png -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c022ff0983-W3WfvV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx-300x61.png -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:00] [class-ss-page.php:119] Checking Content Identical:500cb29de8cf0b92a492491bd210b94299d61b34===. Value: FALSE -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/debugging-running-nginx-config/feed/ -[2024-10-13 17:24:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 174 -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023035cc0-8z3hdC.tmp -[2024-10-13 17:24:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/debugging-running-nginx-config/feed/?simply_static_page=98 -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/debugging-running-nginx-config/feed/?simply_static_page=98 -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:103] Filesize: 838 bytes -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:233] New filename for static page: debugging-running-nginx-config/feed/index.xml -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023035cc0-8z3hdC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/feed/index.xml -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:00] [class-ss-page.php:119] Checking Content Identical:a09a7c8e6ec2d6c362d1806a32394157a1de7a5e===. Value: FALSE -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/596 -[2024-10-13 17:24:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 174 -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/596 -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/feed/ -[2024-10-13 17:24:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 174 -[2024-10-13 17:24:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0230d7263-krMs43.tmp -[2024-10-13 17:24:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/fun-with-bots-ssh-tarpitting/feed/?simply_static_page=100 -[2024-10-13 17:24:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/feed/?simply_static_page=100 -[2024-10-13 17:24:01] [class-ss-url-fetcher.php:103] Filesize: 841 bytes -[2024-10-13 17:24:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:01] [class-ss-url-fetcher.php:233] New filename for static page: fun-with-bots-ssh-tarpitting/feed/index.xml -[2024-10-13 17:24:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0230d7263-krMs43.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/feed/index.xml -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:01] [class-ss-page.php:119] Checking Content Identical:7b9814b72d96b9b68b25441bc7b06bc20be8f73c===. Value: FALSE -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/576 -[2024-10-13 17:24:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 174 -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/576 -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ansible/ -[2024-10-13 17:24:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 174 -[2024-10-13 17:24:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02317a96e-qpjsiU.tmp -[2024-10-13 17:24:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ansible/?simply_static_page=102 -[2024-10-13 17:24:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ansible/?simply_static_page=102 -[2024-10-13 17:24:02] [class-ss-url-fetcher.php:103] Filesize: 67215 bytes -[2024-10-13 17:24:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:02] [class-ss-url-fetcher.php:233] New filename for static page: category/ansible/index.html -[2024-10-13 17:24:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02317a96e-qpjsiU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/index.html -[2024-10-13 17:24:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:02] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:24:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:02] [class-ss-page.php:119] Checking Content Identical:70dad3b29b338bd860c62ddf618935bef89f888e===. Value: FALSE -[2024-10-13 17:24:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/traefik/ -[2024-10-13 17:24:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 174 -[2024-10-13 17:24:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023279267-383LTK.tmp -[2024-10-13 17:24:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/traefik/?simply_static_page=103 -[2024-10-13 17:24:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/traefik/?simply_static_page=103 -[2024-10-13 17:24:03] [class-ss-url-fetcher.php:103] Filesize: 68159 bytes -[2024-10-13 17:24:03] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:03] [class-ss-url-fetcher.php:233] New filename for static page: category/traefik/index.html -[2024-10-13 17:24:03] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023279267-383LTK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/index.html -[2024-10-13 17:24:03] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:03] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:24:03] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:03] [class-ss-page.php:119] Checking Content Identical:c011e098fca42d999f472c7165f8837c3f46e30e===. Value: FALSE -[2024-10-13 17:24:03] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/ -[2024-10-13 17:24:03] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 174 -[2024-10-13 17:24:03] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:03] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02338dacb-mDGbE8.tmp -[2024-10-13 17:24:03] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/?simply_static_page=104 -[2024-10-13 17:24:03] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/?simply_static_page=104 -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:103] Filesize: 899 bytes -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:233] New filename for static page: traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02338dacb-mDGbE8.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:04] [class-ss-page.php:119] Checking Content Identical:174a55349073586a58b407cfd5c3d1a4014cdfde===. Value: FALSE -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/564 -[2024-10-13 17:24:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 174 -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/564 -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min.png -[2024-10-13 17:24:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 174 -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02345e59d-GubLAC.tmp -[2024-10-13 17:24:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min.png?simply_static_page=106 -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min.png?simply_static_page=106 -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:103] Filesize: 103577 bytes -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min.png -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02345e59d-GubLAC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min.png -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:04] [class-ss-page.php:119] Checking Content Identical:09ee553e98a7ad114766bee18a3ee964020d65e6===. Value: FALSE -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png -[2024-10-13 17:24:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 174 -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0234b42ec-90FzSh.tmp -[2024-10-13 17:24:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png?simply_static_page=107 -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png?simply_static_page=107 -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:103] Filesize: 6493 bytes -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png -[2024-10-13 17:24:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0234b42ec-90FzSh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:04] [class-ss-page.php:119] Checking Content Identical:4d1c44e19f833058d5fb5bf1f06146e0ceeaf18a===. Value: FALSE -[2024-10-13 17:24:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png -[2024-10-13 17:24:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 174 -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023500602-7H2DKS.tmp -[2024-10-13 17:24:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png?simply_static_page=108 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png?simply_static_page=108 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:103] Filesize: 24218 bytes -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023500602-7H2DKS.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:05] [class-ss-page.php:119] Checking Content Identical:791df7def0573227b71448a9983b3f92789b05b8===. Value: FALSE -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png -[2024-10-13 17:24:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 174 -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023546f17-WqOv8i.tmp -[2024-10-13 17:24:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png?simply_static_page=109 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png?simply_static_page=109 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:103] Filesize: 17805 bytes -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023546f17-WqOv8i.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:05] [class-ss-page.php:119] Checking Content Identical:445f28571f471bc2e45f82ba391cb329bb36084c===. Value: FALSE -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png -[2024-10-13 17:24:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 174 -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0235709c4-cVaEPR.tmp -[2024-10-13 17:24:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png?simply_static_page=110 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png?simply_static_page=110 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:103] Filesize: 38621 bytes -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0235709c4-cVaEPR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:05] [class-ss-page.php:119] Checking Content Identical:38eca6e0e53a85a916fcdc619972172279d921d1===. Value: FALSE -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png -[2024-10-13 17:24:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 174 -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02359888b-j2t3MB.tmp -[2024-10-13 17:24:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png?simply_static_page=111 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png?simply_static_page=111 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:103] Filesize: 53064 bytes -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02359888b-j2t3MB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:05] [class-ss-page.php:119] Checking Content Identical:5a1aeaf421a4eb2ddb4806bc450b114b66fdb5d7===. Value: FALSE -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/stop-all-running-containers-with-docker/feed/ -[2024-10-13 17:24:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 174 -[2024-10-13 17:24:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0235e357c-gDwhTc.tmp -[2024-10-13 17:24:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/stop-all-running-containers-with-docker/feed/?simply_static_page=112 -[2024-10-13 17:24:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/stop-all-running-containers-with-docker/feed/?simply_static_page=112 -[2024-10-13 17:24:06] [class-ss-url-fetcher.php:103] Filesize: 866 bytes -[2024-10-13 17:24:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:06] [class-ss-url-fetcher.php:233] New filename for static page: stop-all-running-containers-with-docker/feed/index.xml -[2024-10-13 17:24:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0235e357c-gDwhTc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/feed/index.xml -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:06] [class-ss-page.php:119] Checking Content Identical:27b9c32af20eda50a8c6ce9ecaaecafff6f5d5de===. Value: FALSE -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/557 -[2024-10-13 17:24:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 174 -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/557 -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ci-cd/ -[2024-10-13 17:24:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 174 -[2024-10-13 17:24:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0236ed032-zEi5qa.tmp -[2024-10-13 17:24:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ci-cd/?simply_static_page=114 -[2024-10-13 17:24:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ci-cd/?simply_static_page=114 -[2024-10-13 17:24:07] [class-ss-url-fetcher.php:103] Filesize: 66260 bytes -[2024-10-13 17:24:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:07] [class-ss-url-fetcher.php:233] New filename for static page: category/ci-cd/index.html -[2024-10-13 17:24:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0236ed032-zEi5qa.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/index.html -[2024-10-13 17:24:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:07] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:24:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:07] [class-ss-page.php:119] Checking Content Identical:9aa85785c402f1ea181202b38d00d4fdf447164e===. Value: FALSE -[2024-10-13 17:24:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/teamcity/ -[2024-10-13 17:24:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 174 -[2024-10-13 17:24:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0237f2c7a-F4cZKb.tmp -[2024-10-13 17:24:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/teamcity/?simply_static_page=115 -[2024-10-13 17:24:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/teamcity/?simply_static_page=115 -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:103] Filesize: 66275 bytes -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:233] New filename for static page: category/teamcity/index.html -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0237f2c7a-F4cZKb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/index.html -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:09] [class-ss-page.php:119] Checking Content Identical:4d1883095ac84abc987807dd8a5e08c700656176===. Value: FALSE -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/feed/ -[2024-10-13 17:24:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 174 -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023934054-p0EYtd.tmp -[2024-10-13 17:24:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/feed/?simply_static_page=116 -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/feed/?simply_static_page=116 -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:103] Filesize: 867 bytes -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:233] New filename for static page: automating-ci-cd-with-teamcity-ansible/feed/index.xml -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023934054-p0EYtd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/feed/index.xml -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:09] [class-ss-page.php:119] Checking Content Identical:9a1cf8f5b2f946f1e4897db72b71d358a0e09757===. Value: FALSE -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/393 -[2024-10-13 17:24:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 174 -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/393 -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/oci/ -[2024-10-13 17:24:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 174 -[2024-10-13 17:24:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0239e2059-U2t7Ku.tmp -[2024-10-13 17:24:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/oci/?simply_static_page=118 -[2024-10-13 17:24:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/oci/?simply_static_page=118 -[2024-10-13 17:24:10] [class-ss-url-fetcher.php:103] Filesize: 66251 bytes -[2024-10-13 17:24:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:10] [class-ss-url-fetcher.php:233] New filename for static page: category/oci/index.html -[2024-10-13 17:24:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0239e2059-U2t7Ku.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/index.html -[2024-10-13 17:24:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:10] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:24:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:10] [class-ss-page.php:119] Checking Content Identical:49da32a61b097ce387317873913c129d3d33ddad===. Value: FALSE -[2024-10-13 17:24:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/feed/ -[2024-10-13 17:24:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 174 -[2024-10-13 17:24:10] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:10] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023ab8fa0-CEOW1q.tmp -[2024-10-13 17:24:10] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/self-hosted-package-registries-with-gitea/feed/?simply_static_page=119 -[2024-10-13 17:24:10] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/feed/?simply_static_page=119 -[2024-10-13 17:24:11] [class-ss-url-fetcher.php:103] Filesize: 872 bytes -[2024-10-13 17:24:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:11] [class-ss-url-fetcher.php:233] New filename for static page: self-hosted-package-registries-with-gitea/feed/index.xml -[2024-10-13 17:24:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023ab8fa0-CEOW1q.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/feed/index.xml -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:11] [class-ss-page.php:119] Checking Content Identical:a21fcae2dd0cada1fd7ddf0a7e721f98a473d526===. Value: FALSE -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/413 -[2024-10-13 17:24:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 174 -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/413 -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/ -[2024-10-13 17:24:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 174 -[2024-10-13 17:24:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023b7dfb4-K6vhws.tmp -[2024-10-13 17:24:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/?simply_static_page=121 -[2024-10-13 17:24:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/?simply_static_page=121 -[2024-10-13 17:24:12] [class-ss-url-fetcher.php:103] Filesize: 889 bytes -[2024-10-13 17:24:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:12] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml -[2024-10-13 17:24:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023b7dfb4-K6vhws.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:12] [class-ss-page.php:119] Checking Content Identical:99b8a62b9f0451f8218c525651d3d2deb46ecba1===. Value: FALSE -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/425 -[2024-10-13 17:24:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 174 -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/425 -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ -[2024-10-13 17:24:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 174 -[2024-10-13 17:24:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023c27c9e-jmOUnj.tmp -[2024-10-13 17:24:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/?simply_static_page=123 -[2024-10-13 17:24:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/?simply_static_page=123 -[2024-10-13 17:24:13] [class-ss-url-fetcher.php:103] Filesize: 84662 bytes -[2024-10-13 17:24:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:13] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html -[2024-10-13 17:24:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023c27c9e-jmOUnj.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html -[2024-10-13 17:24:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:13] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:24:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:13] [class-ss-page.php:119] Checking Content Identical:7b3c00bcb73190d71d319dd46d7589ba84c3a328===. Value: FALSE -[2024-10-13 17:24:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/ -[2024-10-13 17:24:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 174 -[2024-10-13 17:24:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023da813d-6uxN2F.tmp -[2024-10-13 17:24:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/?simply_static_page=124 -[2024-10-13 17:24:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/?simply_static_page=124 -[2024-10-13 17:24:14] [class-ss-url-fetcher.php:103] Filesize: 893 bytes -[2024-10-13 17:24:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:14] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml -[2024-10-13 17:24:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023da813d-6uxN2F.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:14] [class-ss-page.php:119] Checking Content Identical:5c82aa451ab422f51354ee30567d4ab29faa73eb===. Value: FALSE -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/422 -[2024-10-13 17:24:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 174 -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/422 -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/portfolio/ -[2024-10-13 17:24:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 174 -[2024-10-13 17:24:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023e52435-wmAIvg.tmp -[2024-10-13 17:24:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/portfolio/?simply_static_page=126 -[2024-10-13 17:24:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/portfolio/?simply_static_page=126 -[2024-10-13 17:24:15] [class-ss-url-fetcher.php:103] Filesize: 68846 bytes -[2024-10-13 17:24:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:15] [class-ss-url-fetcher.php:233] New filename for static page: tag/portfolio/index.html -[2024-10-13 17:24:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023e52435-wmAIvg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/index.html -[2024-10-13 17:24:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:15] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:24:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:15] [class-ss-page.php:119] Checking Content Identical:670cd71aa5c8a022c372e7aee286d2830bc397d6===. Value: FALSE -[2024-10-13 17:24:15] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 76 of 174 pages/files -[2024-10-13 17:24:15] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:24:15] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:24:15] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:24:15] [class-ss-fetch-urls-task.php:69] Total pages: 217; Pages remaining: 91 -[2024-10-13 17:24:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/ -[2024-10-13 17:24:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 217 -[2024-10-13 17:24:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c023fe5931-AiQJ1F.tmp -[2024-10-13 17:24:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/?simply_static_page=127 -[2024-10-13 17:24:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/?simply_static_page=127 -[2024-10-13 17:24:16] [class-ss-url-fetcher.php:103] Filesize: 88033 bytes -[2024-10-13 17:24:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:16] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react/index.html -[2024-10-13 17:24:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c023fe5931-AiQJ1F.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/index.html -[2024-10-13 17:24:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:16] [class-ss-fetch-urls-task.php:159] Adding 53 URLs to the queue -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:17] [class-ss-page.php:119] Checking Content Identical:df2df9094a1e96ef78bbc1e64484014db1df847a===. Value: FALSE -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home.webp -[2024-10-13 17:24:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 217 -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02414567d-6Acyx9.tmp -[2024-10-13 17:24:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-home.webp?simply_static_page=128 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home.webp?simply_static_page=128 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:103] Filesize: 48632 bytes -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-home.webp -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02414567d-6Acyx9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home.webp -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:17] [class-ss-page.php:119] Checking Content Identical:c28e203d27421d1bede6ddb6e40fef5bbe3e6a89===. Value: FALSE -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-300x151.webp -[2024-10-13 17:24:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 217 -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02416fc2f-xnkNFD.tmp -[2024-10-13 17:24:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-300x151.webp?simply_static_page=129 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-300x151.webp?simply_static_page=129 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:103] Filesize: 12276 bytes -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-home-300x151.webp -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02416fc2f-xnkNFD.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-300x151.webp -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:17] [class-ss-page.php:119] Checking Content Identical:edfe4e98ab31e2aa0a104cde24cf554c4da667bf===. Value: FALSE -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-768x386.webp -[2024-10-13 17:24:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 217 -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0241af0d5-LNUAgG.tmp -[2024-10-13 17:24:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-768x386.webp?simply_static_page=130 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-768x386.webp?simply_static_page=130 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:103] Filesize: 44430 bytes -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-home-768x386.webp -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0241af0d5-LNUAgG.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-768x386.webp -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:17] [class-ss-page.php:119] Checking Content Identical:5d5d065be6ddc27d4a4a17e2f727d8250fd18e2b===. Value: FALSE -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp -[2024-10-13 17:24:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 217 -[2024-10-13 17:24:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0241f3039-Pw86Zf.tmp -[2024-10-13 17:24:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp?simply_static_page=131 -[2024-10-13 17:24:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp?simply_static_page=131 -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:103] Filesize: 446340 bytes -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0241f3039-Pw86Zf.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:18] [class-ss-page.php:119] Checking Content Identical:7dc13516c47112406700b6e4f2e75362484c7024===. Value: FALSE -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp -[2024-10-13 17:24:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 217 -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02425d163-X6HFkD.tmp -[2024-10-13 17:24:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp?simply_static_page=132 -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp?simply_static_page=132 -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:103] Filesize: 52960 bytes -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-186x300.webp -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02425d163-X6HFkD.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:18] [class-ss-page.php:119] Checking Content Identical:f3b147a6e0355888e25810a6246e2509a3220c20===. Value: FALSE -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp -[2024-10-13 17:24:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 217 -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0242a0187-MwtxbE.tmp -[2024-10-13 17:24:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp?simply_static_page=133 -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp?simply_static_page=133 -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:103] Filesize: 643726 bytes -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0242a0187-MwtxbE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:18] [class-ss-page.php:119] Checking Content Identical:df3c65ad542ab8335936e7eb3b1fdb15b41a016d===. Value: FALSE -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp -[2024-10-13 17:24:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 217 -[2024-10-13 17:24:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0242dc928-NTYlwg.tmp -[2024-10-13 17:24:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp?simply_static_page=134 -[2024-10-13 17:24:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp?simply_static_page=134 -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:103] Filesize: 953392 bytes -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0242dc928-NTYlwg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:19] [class-ss-page.php:119] Checking Content Identical:fd52460c6453b8f0e830a79a7bbb3b11714d1a17===. Value: FALSE -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp -[2024-10-13 17:24:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 217 -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024350074-YwBzdL.tmp -[2024-10-13 17:24:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp?simply_static_page=135 -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp?simply_static_page=135 -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:103] Filesize: 1639922 bytes -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024350074-YwBzdL.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:19] [class-ss-page.php:119] Checking Content Identical:1cdb480939a8292f7bb39d7b26ab0b4e0967f5a7===. Value: FALSE -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp -[2024-10-13 17:24:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 217 -[2024-10-13 17:24:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0243b4dee-hraK7T.tmp -[2024-10-13 17:24:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp?simply_static_page=136 -[2024-10-13 17:24:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp?simply_static_page=136 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:103] Filesize: 2535248 bytes -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-scaled.webp -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0243b4dee-hraK7T.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:20] [class-ss-page.php:119] Checking Content Identical:65b1a82c34628595ff8d8b9dfe87e0229bd9e5f4===. Value: FALSE -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png -[2024-10-13 17:24:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 217 -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024433d43-kH6mMV.tmp -[2024-10-13 17:24:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png?simply_static_page=137 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png?simply_static_page=137 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:103] Filesize: 404245 bytes -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024433d43-kH6mMV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:20] [class-ss-page.php:119] Checking Content Identical:2a2c961bd40cd193b7216ea4bb4e338faa9c47e9===. Value: FALSE -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png -[2024-10-13 17:24:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 217 -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02446fb8a-CbOP9O.tmp -[2024-10-13 17:24:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png?simply_static_page=138 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png?simply_static_page=138 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:103] Filesize: 47861 bytes -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-161x300.png -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02446fb8a-CbOP9O.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:20] [class-ss-page.php:119] Checking Content Identical:100d547b7d532c6d68a9bdd61b8aba39a28c5b49===. Value: FALSE -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png -[2024-10-13 17:24:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 217 -[2024-10-13 17:24:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0244ba75f-2m4Jbw.tmp -[2024-10-13 17:24:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png?simply_static_page=139 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png?simply_static_page=139 -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:103] Filesize: 697764 bytes -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png -[2024-10-13 17:24:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0244ba75f-2m4Jbw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:21] [class-ss-page.php:119] Checking Content Identical:720d90e2744958d468d391be199e637ebe16823c===. Value: FALSE -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png -[2024-10-13 17:24:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 217 -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024507f50-PF4Ro6.tmp -[2024-10-13 17:24:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png?simply_static_page=140 -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png?simply_static_page=140 -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:103] Filesize: 829453 bytes -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024507f50-PF4Ro6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:21] [class-ss-page.php:119] Checking Content Identical:ebe9a6c2a77d9ec7bee8337c7ecd8d8606e3398c===. Value: FALSE -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png -[2024-10-13 17:24:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 217 -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024563f9d-iwfJ6C.tmp -[2024-10-13 17:24:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png?simply_static_page=141 -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png?simply_static_page=141 -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:103] Filesize: 1403061 bytes -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024563f9d-iwfJ6C.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:21] [class-ss-page.php:119] Checking Content Identical:72ea5d2f695490aabf01f8fd2a4a74ba3b4a19d2===. Value: FALSE -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page.png -[2024-10-13 17:24:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 217 -[2024-10-13 17:24:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0245ccd9e-XULEIx.tmp -[2024-10-13 17:24:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page.png?simply_static_page=142 -[2024-10-13 17:24:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page.png?simply_static_page=142 -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:103] Filesize: 1084759 bytes -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page.png -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0245ccd9e-XULEIx.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page.png -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:22] [class-ss-page.php:119] Checking Content Identical:61aed36c2ca9174817d7b5030a9dd57e38f9516c===. Value: FALSE -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png -[2024-10-13 17:24:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 217 -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0246430c1-PVVBY1.tmp -[2024-10-13 17:24:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png?simply_static_page=143 -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png?simply_static_page=143 -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:103] Filesize: 280970 bytes -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0246430c1-PVVBY1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:22] [class-ss-page.php:119] Checking Content Identical:6cab1f576d57c7b2117b8a80f2c2876c59aa16d1===. Value: FALSE -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png -[2024-10-13 17:24:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 217 -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024692864-3F5Uxz.tmp -[2024-10-13 17:24:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png?simply_static_page=144 -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png?simply_static_page=144 -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:103] Filesize: 35197 bytes -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-126x300.png -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024692864-3F5Uxz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:22] [class-ss-page.php:119] Checking Content Identical:3ffc29c55f0bd74235491bf8deb7e62763837f0b===. Value: FALSE -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png -[2024-10-13 17:24:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 217 -[2024-10-13 17:24:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0246d535c-9EfVu1.tmp -[2024-10-13 17:24:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png?simply_static_page=145 -[2024-10-13 17:24:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png?simply_static_page=145 -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:103] Filesize: 767854 bytes -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0246d535c-9EfVu1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:23] [class-ss-page.php:119] Checking Content Identical:de4ff7df1c15d1879e9391ae8d1177bd98b96265===. Value: FALSE -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png -[2024-10-13 17:24:23] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 217 -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024743c53-A4GCJU.tmp -[2024-10-13 17:24:23] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png?simply_static_page=146 -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png?simply_static_page=146 -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:103] Filesize: 947703 bytes -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024743c53-A4GCJU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:23] [class-ss-page.php:119] Checking Content Identical:146cb82a6da8f66d9c43f13cd807efba62ec8dab===. Value: FALSE -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page.png -[2024-10-13 17:24:23] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 217 -[2024-10-13 17:24:23] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0247a3343-PPoOhE.tmp -[2024-10-13 17:24:23] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page.png?simply_static_page=147 -[2024-10-13 17:24:23] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page.png?simply_static_page=147 -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:103] Filesize: 1126848 bytes -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page.png -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0247a3343-PPoOhE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page.png -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:24] [class-ss-page.php:119] Checking Content Identical:114cc966469478694789e272aa5b9a8cd26a10e1===. Value: FALSE -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hoots-wings/feed/ -[2024-10-13 17:24:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 217 -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0248104d7-acwyf0.tmp -[2024-10-13 17:24:24] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hoots-wings/feed/?simply_static_page=148 -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hoots-wings/feed/?simply_static_page=148 -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:103] Filesize: 782 bytes -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:233] New filename for static page: hoots-wings/feed/index.xml -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0248104d7-acwyf0.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/feed/index.xml -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:24] [class-ss-page.php:119] Checking Content Identical:e63167da7537e201cb8ce84d6d44e0d5561c8c02===. Value: FALSE -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/495 -[2024-10-13 17:24:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 217 -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/495 -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp -[2024-10-13 17:24:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 217 -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0248aaed4-8KTThq.tmp -[2024-10-13 17:24:24] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp?simply_static_page=150 -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp?simply_static_page=150 -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:103] Filesize: 40268 bytes -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp -[2024-10-13 17:24:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0248aaed4-8KTThq.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:24] [class-ss-page.php:119] Checking Content Identical:99d736a37742b9322c4c238449dd8768499992c2===. Value: FALSE -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp -[2024-10-13 17:24:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 217 -[2024-10-13 17:24:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0248f4196-7YMpbK.tmp -[2024-10-13 17:24:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp?simply_static_page=151 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp?simply_static_page=151 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:103] Filesize: 6558 bytes -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0248f4196-7YMpbK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:25] [class-ss-page.php:119] Checking Content Identical:61d250924c5bc1b55a50aecd10abb91725d4c172===. Value: FALSE -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp -[2024-10-13 17:24:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 217 -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0249459b6-zZyZa6.tmp -[2024-10-13 17:24:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp?simply_static_page=152 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp?simply_static_page=152 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:103] Filesize: 25632 bytes -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0249459b6-zZyZa6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:25] [class-ss-page.php:119] Checking Content Identical:cbf93c51e0b6cec3d013a8078a134c183ad25fb7===. Value: FALSE -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp -[2024-10-13 17:24:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 217 -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02498e9dd-5cWiYD.tmp -[2024-10-13 17:24:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp?simply_static_page=153 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp?simply_static_page=153 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:103] Filesize: 75970 bytes -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02498e9dd-5cWiYD.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:25] [class-ss-page.php:119] Checking Content Identical:dea1dd423945a1163deae66d9b91b22a782c3344===. Value: FALSE -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp -[2024-10-13 17:24:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 217 -[2024-10-13 17:24:25] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0249beca8-Jvqtwx.tmp -[2024-10-13 17:24:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp?simply_static_page=154 -[2024-10-13 17:24:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp?simply_static_page=154 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:103] Filesize: 42932 bytes -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers.webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0249beca8-Jvqtwx.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:26] [class-ss-page.php:119] Checking Content Identical:2c6a3087f1019c7bfd30d0d6105be6f8ce99844a===. Value: FALSE -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp -[2024-10-13 17:24:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 217 -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024a14ba7-l1ghuG.tmp -[2024-10-13 17:24:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp?simply_static_page=155 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp?simply_static_page=155 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:103] Filesize: 36326 bytes -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024a14ba7-l1ghuG.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:26] [class-ss-page.php:119] Checking Content Identical:5f5c72acfddc4bfe7df2f653f9fdff5b835bcac8===. Value: FALSE -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp -[2024-10-13 17:24:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 217 -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024a61efe-TYjmB2.tmp -[2024-10-13 17:24:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp?simply_static_page=156 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp?simply_static_page=156 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:103] Filesize: 6150 bytes -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024a61efe-TYjmB2.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:26] [class-ss-page.php:119] Checking Content Identical:961c8e7cd7554812c26d91f20b83d0deae4303e8===. Value: FALSE -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp -[2024-10-13 17:24:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 217 -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024a839ce-nIT3fW.tmp -[2024-10-13 17:24:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp?simply_static_page=157 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp?simply_static_page=157 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:103] Filesize: 23578 bytes -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024a839ce-nIT3fW.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:26] [class-ss-page.php:119] Checking Content Identical:774ac23e650204d60370fcbc04d57aa5c2c6f9d3===. Value: FALSE -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp -[2024-10-13 17:24:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 217 -[2024-10-13 17:24:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024abbe03-789h76.tmp -[2024-10-13 17:24:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp?simply_static_page=158 -[2024-10-13 17:24:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp?simply_static_page=158 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:103] Filesize: 67322 bytes -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024abbe03-789h76.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:27] [class-ss-page.php:119] Checking Content Identical:83c0648270915274a847d1ad40dd5e9876aa2967===. Value: FALSE -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp -[2024-10-13 17:24:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 217 -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024b116a9-gNlDfH.tmp -[2024-10-13 17:24:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp?simply_static_page=159 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp?simply_static_page=159 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:103] Filesize: 41934 bytes -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1.webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024b116a9-gNlDfH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:27] [class-ss-page.php:119] Checking Content Identical:d70483195aee4466bd83070073e92305686c5c9c===. Value: FALSE -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp -[2024-10-13 17:24:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 217 -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024b56c17-YWrfIr.tmp -[2024-10-13 17:24:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp?simply_static_page=160 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp?simply_static_page=160 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:103] Filesize: 51514 bytes -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024b56c17-YWrfIr.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:27] [class-ss-page.php:119] Checking Content Identical:644045ba69a333c398b09dd7f6b22593e404cc26===. Value: FALSE -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp -[2024-10-13 17:24:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 217 -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024b92fc1-NIu6fE.tmp -[2024-10-13 17:24:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp?simply_static_page=161 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp?simply_static_page=161 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:103] Filesize: 8408 bytes -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024b92fc1-NIu6fE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:27] [class-ss-page.php:119] Checking Content Identical:05ccdf33d4a4a6ab37b0b9e0ff62f47999c2b803===. Value: FALSE -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp -[2024-10-13 17:24:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 217 -[2024-10-13 17:24:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024bc7b07-dWvN6m.tmp -[2024-10-13 17:24:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp?simply_static_page=162 -[2024-10-13 17:24:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp?simply_static_page=162 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:103] Filesize: 36826 bytes -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024bc7b07-dWvN6m.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:28] [class-ss-page.php:119] Checking Content Identical:5b8584334b39a29d0f6811f345f861d07cc36222===. Value: FALSE -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp -[2024-10-13 17:24:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 217 -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024c17494-ER7Ge4.tmp -[2024-10-13 17:24:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp?simply_static_page=163 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp?simply_static_page=163 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:103] Filesize: 90742 bytes -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024c17494-ER7Ge4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:28] [class-ss-page.php:119] Checking Content Identical:eb0f976025323ee4186d4dabfe0b6462fa0f17ef===. Value: FALSE -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student.webp -[2024-10-13 17:24:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 217 -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024c66f55-owWO3K.tmp -[2024-10-13 17:24:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student.webp?simply_static_page=164 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student.webp?simply_static_page=164 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:103] Filesize: 52962 bytes -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student.webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024c66f55-owWO3K.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student.webp -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:28] [class-ss-page.php:119] Checking Content Identical:513358f525023331ffba2e4bc9f661313db7450f===. Value: FALSE -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp -[2024-10-13 17:24:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 217 -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024cb138c-Kch5Ls.tmp -[2024-10-13 17:24:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp?simply_static_page=165 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp?simply_static_page=165 -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:103] Filesize: 34090 bytes -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp -[2024-10-13 17:24:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024cb138c-Kch5Ls.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:28] [class-ss-page.php:119] Checking Content Identical:422dce3b7ba7ad269eb5d0b13913d8c48f3b5264===. Value: FALSE -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp -[2024-10-13 17:24:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 217 -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024d02ee7-FgGcrJ.tmp -[2024-10-13 17:24:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp?simply_static_page=166 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp?simply_static_page=166 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:103] Filesize: 5568 bytes -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024d02ee7-FgGcrJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:29] [class-ss-page.php:119] Checking Content Identical:ffc0f44bac8ef6854f0165697971836de61f98bc===. Value: FALSE -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp -[2024-10-13 17:24:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 217 -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024d45173-TveIIM.tmp -[2024-10-13 17:24:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp?simply_static_page=167 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp?simply_static_page=167 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:103] Filesize: 21858 bytes -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024d45173-TveIIM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:29] [class-ss-page.php:119] Checking Content Identical:7ebd443a8b317981c33c5f1ac74bfb781911898f===. Value: FALSE -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp -[2024-10-13 17:24:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 217 -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024d8c1c9-HfWxNr.tmp -[2024-10-13 17:24:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp?simply_static_page=168 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp?simply_static_page=168 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:103] Filesize: 64664 bytes -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024d8c1c9-HfWxNr.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:29] [class-ss-page.php:119] Checking Content Identical:af2e86a1693faea50946d46881143ca4af6dc6d8===. Value: FALSE -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents.webp -[2024-10-13 17:24:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 217 -[2024-10-13 17:24:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024dbd45c-qrFYBV.tmp -[2024-10-13 17:24:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents.webp?simply_static_page=169 -[2024-10-13 17:24:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents.webp?simply_static_page=169 -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:103] Filesize: 44026 bytes -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents.webp -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024dbd45c-qrFYBV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents.webp -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:30] [class-ss-page.php:119] Checking Content Identical:3f145cecabfe56603d803dbab7cd65b8ad4bca82===. Value: FALSE -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hilger-grading-portal/feed/ -[2024-10-13 17:24:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 217 -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024e0662e-yPQhhG.tmp -[2024-10-13 17:24:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hilger-grading-portal/feed/?simply_static_page=170 -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hilger-grading-portal/feed/?simply_static_page=170 -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:103] Filesize: 812 bytes -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:233] New filename for static page: hilger-grading-portal/feed/index.xml -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024e0662e-yPQhhG.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/feed/index.xml -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:30] [class-ss-page.php:119] Checking Content Identical:5b1b15af7addb5f025de24f899396b2c431dfd9b===. Value: FALSE -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/509 -[2024-10-13 17:24:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 217 -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/509 -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/upwork-project/ -[2024-10-13 17:24:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 217 -[2024-10-13 17:24:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c024eb1c4c-7W5HmZ.tmp -[2024-10-13 17:24:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/upwork-project/?simply_static_page=172 -[2024-10-13 17:24:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/upwork-project/?simply_static_page=172 -[2024-10-13 17:24:33] [class-ss-url-fetcher.php:103] Filesize: 66323 bytes -[2024-10-13 17:24:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:33] [class-ss-url-fetcher.php:233] New filename for static page: tag/upwork-project/index.html -[2024-10-13 17:24:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c024eb1c4c-7W5HmZ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/index.html -[2024-10-13 17:24:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:33] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:24:33] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:33] [class-ss-page.php:119] Checking Content Identical:e2adbf84740453765fd8abce316605173542f04d===. Value: FALSE -[2024-10-13 17:24:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/feed/ -[2024-10-13 17:24:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 217 -[2024-10-13 17:24:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0251a5e8d-PFgZGs.tmp -[2024-10-13 17:24:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/feed/?simply_static_page=173 -[2024-10-13 17:24:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/feed/?simply_static_page=173 -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:103] Filesize: 905 bytes -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:233] New filename for static page: sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0251a5e8d-PFgZGs.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:36] [class-ss-page.php:119] Checking Content Identical:722a407454c4f89cc5330a6d093bc618e37cadb2===. Value: FALSE -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/599 -[2024-10-13 17:24:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 217 -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/599 -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/styles/cf.errors.css -[2024-10-13 17:24:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 217 -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025480458-jqIKsE.tmp -[2024-10-13 17:24:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/styles/cf.errors.css?simply_static_page=175 -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/styles/cf.errors.css?simply_static_page=175 -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:103] Filesize: 24051 bytes -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/styles/cf.errors.css -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025480458-jqIKsE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/styles/cf.errors.css -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:159] Adding 10 URLs to the queue -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:36] [class-ss-page.php:119] Checking Content Identical:f24dd1ad7c9080575d92a9a9a2c42620725ef836===. Value: FALSE -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/automation/feed/ -[2024-10-13 17:24:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 217 -[2024-10-13 17:24:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0254c71bf-K9oeYt.tmp -[2024-10-13 17:24:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/automation/feed/?simply_static_page=176 -[2024-10-13 17:24:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/automation/feed/?simply_static_page=176 -[2024-10-13 17:24:38] [class-ss-url-fetcher.php:103] Filesize: 49073 bytes -[2024-10-13 17:24:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:38] [class-ss-url-fetcher.php:233] New filename for static page: category/automation/feed/index.xml -[2024-10-13 17:24:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0254c71bf-K9oeYt.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/feed/index.xml -[2024-10-13 17:24:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:38] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:24:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:38] [class-ss-page.php:119] Checking Content Identical:161f121525d58cf93c0e27c29ab7d38a0d5c0413===. Value: FALSE -[2024-10-13 17:24:38] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 126 of 217 pages/files -[2024-10-13 17:24:38] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:24:39] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:24:39] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:69] Total pages: 251; Pages remaining: 75 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/35 -[2024-10-13 17:24:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 251 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/35 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/iac/feed/ -[2024-10-13 17:24:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 251 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025732a3a-pqmZtX.tmp -[2024-10-13 17:24:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/iac/feed/?simply_static_page=178 -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/iac/feed/?simply_static_page=178 -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:103] Filesize: 19244 bytes -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:233] New filename for static page: category/iac/feed/index.xml -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025732a3a-pqmZtX.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/feed/index.xml -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:39] [class-ss-page.php:119] Checking Content Identical:1a337c7dc064b9406b08a8c8f5b5b73143632903===. Value: FALSE -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/67 -[2024-10-13 17:24:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 251 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/67 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/open-source/feed/ -[2024-10-13 17:24:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 251 -[2024-10-13 17:24:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0257dff81-6BjNZp.tmp -[2024-10-13 17:24:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/open-source/feed/?simply_static_page=180 -[2024-10-13 17:24:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/open-source/feed/?simply_static_page=180 -[2024-10-13 17:24:40] [class-ss-url-fetcher.php:103] Filesize: 41180 bytes -[2024-10-13 17:24:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:40] [class-ss-url-fetcher.php:233] New filename for static page: category/open-source/feed/index.xml -[2024-10-13 17:24:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0257dff81-6BjNZp.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/feed/index.xml -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:159] Adding 6 URLs to the queue -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:40] [class-ss-page.php:119] Checking Content Identical:e8e893f5b9ab88ba5cf0eade164a092e89c61bc1===. Value: FALSE -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/52 -[2024-10-13 17:24:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 251 -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/52 -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/security/feed/ -[2024-10-13 17:24:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 251 -[2024-10-13 17:24:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0258c3ed4-Gu2V75.tmp -[2024-10-13 17:24:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/security/feed/?simply_static_page=182 -[2024-10-13 17:24:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/security/feed/?simply_static_page=182 -[2024-10-13 17:24:41] [class-ss-url-fetcher.php:103] Filesize: 46036 bytes -[2024-10-13 17:24:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:41] [class-ss-url-fetcher.php:233] New filename for static page: category/security/feed/index.xml -[2024-10-13 17:24:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0258c3ed4-Gu2V75.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/feed/index.xml -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:159] Adding 11 URLs to the queue -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:41] [class-ss-page.php:119] Checking Content Identical:8c54ac7a97eb88b8bd6a30a5439fffc68a283d91===. Value: FALSE -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/65 -[2024-10-13 17:24:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 251 -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/65 -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/self-hosted/feed/ -[2024-10-13 17:24:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 251 -[2024-10-13 17:24:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025988087-acKySz.tmp -[2024-10-13 17:24:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/self-hosted/feed/?simply_static_page=184 -[2024-10-13 17:24:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/self-hosted/feed/?simply_static_page=184 -[2024-10-13 17:24:42] [class-ss-url-fetcher.php:103] Filesize: 44167 bytes -[2024-10-13 17:24:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:42] [class-ss-url-fetcher.php:233] New filename for static page: category/self-hosted/feed/index.xml -[2024-10-13 17:24:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025988087-acKySz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/feed/index.xml -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:159] Adding 18 URLs to the queue -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:42] [class-ss-page.php:119] Checking Content Identical:cd69a429a7c6c4eaf48fe4224453b3e393a8cd7c===. Value: FALSE -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/40 -[2024-10-13 17:24:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 251 -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/40 -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ -[2024-10-13 17:24:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 251 -[2024-10-13 17:24:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025a45433-aHWJ3t.tmp -[2024-10-13 17:24:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/?simply_static_page=186 -[2024-10-13 17:24:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/?simply_static_page=186 -[2024-10-13 17:24:44] [class-ss-url-fetcher.php:103] Filesize: 86676 bytes -[2024-10-13 17:24:44] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:44] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html -[2024-10-13 17:24:44] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025a45433-aHWJ3t.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html -[2024-10-13 17:24:44] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:44] [class-ss-fetch-urls-task.php:159] Adding 46 URLs to the queue -[2024-10-13 17:24:44] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:44] [class-ss-page.php:119] Checking Content Identical:1c18b2e21ddfcc578626000d9297eecf85102eba===. Value: FALSE -[2024-10-13 17:24:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/software-engineering/feed/ -[2024-10-13 17:24:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 251 -[2024-10-13 17:24:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025c949db-YSVkUB.tmp -[2024-10-13 17:24:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/software-engineering/feed/?simply_static_page=187 -[2024-10-13 17:24:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/software-engineering/feed/?simply_static_page=187 -[2024-10-13 17:24:45] [class-ss-url-fetcher.php:103] Filesize: 73126 bytes -[2024-10-13 17:24:45] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:45] [class-ss-url-fetcher.php:233] New filename for static page: category/software-engineering/feed/index.xml -[2024-10-13 17:24:45] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025c949db-YSVkUB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/feed/index.xml -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:159] Adding 89 URLs to the queue -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:45] [class-ss-page.php:119] Checking Content Identical:c5a489f01f0b09d0ae12b183d037b1cd0886084b===. Value: FALSE -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/50 -[2024-10-13 17:24:45] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 251 -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/50 -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ssh/feed/ -[2024-10-13 17:24:45] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 251 -[2024-10-13 17:24:45] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:45] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025dec056-o9emId.tmp -[2024-10-13 17:24:45] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ssh/feed/?simply_static_page=189 -[2024-10-13 17:24:45] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ssh/feed/?simply_static_page=189 -[2024-10-13 17:24:46] [class-ss-url-fetcher.php:103] Filesize: 38029 bytes -[2024-10-13 17:24:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:46] [class-ss-url-fetcher.php:233] New filename for static page: category/ssh/feed/index.xml -[2024-10-13 17:24:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025dec056-o9emId.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/feed/index.xml -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:159] Adding 5 URLs to the queue -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:46] [class-ss-page.php:119] Checking Content Identical:2aa59362f7caf417061a4a2cb84ecf69d0826ae2===. Value: FALSE -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/63 -[2024-10-13 17:24:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 251 -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/63 -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/blog-post/page/2/ -[2024-10-13 17:24:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 251 -[2024-10-13 17:24:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025ec21bc-OhXsXE.tmp -[2024-10-13 17:24:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/blog-post/page/2/?simply_static_page=191 -[2024-10-13 17:24:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/blog-post/page/2/?simply_static_page=191 -[2024-10-13 17:24:47] [class-ss-url-fetcher.php:103] Filesize: 69169 bytes -[2024-10-13 17:24:47] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:47] [class-ss-url-fetcher.php:233] New filename for static page: tag/blog-post/page/2/index.html -[2024-10-13 17:24:47] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025ec21bc-OhXsXE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/page/2/index.html -[2024-10-13 17:24:47] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:47] [class-ss-fetch-urls-task.php:159] Adding 26 URLs to the queue -[2024-10-13 17:24:47] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:47] [class-ss-page.php:119] Checking Content Identical:b0da40fb479c2eb91ceb03a6972d1639b0c981e6===. Value: FALSE -[2024-10-13 17:24:47] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/blog-post/feed/ -[2024-10-13 17:24:47] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 251 -[2024-10-13 17:24:47] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:47] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c025fe2d2c-cPZCik.tmp -[2024-10-13 17:24:47] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/blog-post/feed/?simply_static_page=192 -[2024-10-13 17:24:47] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/blog-post/feed/?simply_static_page=192 -[2024-10-13 17:24:49] [class-ss-url-fetcher.php:103] Filesize: 89858 bytes -[2024-10-13 17:24:49] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:49] [class-ss-url-fetcher.php:233] New filename for static page: tag/blog-post/feed/index.xml -[2024-10-13 17:24:49] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c025fe2d2c-cPZCik.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/feed/index.xml -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:49] [class-ss-page.php:119] Checking Content Identical:ad39437f0bba8c97d9fc2ecfcc952b54ae1060d7===. Value: FALSE -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/46 -[2024-10-13 17:24:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 251 -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/46 -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/cloudflare/feed/ -[2024-10-13 17:24:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 251 -[2024-10-13 17:24:49] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:49] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026151cf9-JIADtz.tmp -[2024-10-13 17:24:49] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/cloudflare/feed/?simply_static_page=194 -[2024-10-13 17:24:49] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/cloudflare/feed/?simply_static_page=194 -[2024-10-13 17:24:50] [class-ss-url-fetcher.php:103] Filesize: 42049 bytes -[2024-10-13 17:24:50] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:50] [class-ss-url-fetcher.php:233] New filename for static page: category/cloudflare/feed/index.xml -[2024-10-13 17:24:50] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026151cf9-JIADtz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/feed/index.xml -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:159] Adding 15 URLs to the queue -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:50] [class-ss-page.php:119] Checking Content Identical:0e34aa02250e3fb1024dc21b0c752f57bd660447===. Value: FALSE -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/42 -[2024-10-13 17:24:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 251 -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/42 -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/networking/feed/ -[2024-10-13 17:24:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 251 -[2024-10-13 17:24:50] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:50] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02621742a-56o6Ru.tmp -[2024-10-13 17:24:50] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/networking/feed/?simply_static_page=196 -[2024-10-13 17:24:50] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/networking/feed/?simply_static_page=196 -[2024-10-13 17:24:51] [class-ss-url-fetcher.php:103] Filesize: 34179 bytes -[2024-10-13 17:24:51] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:51] [class-ss-url-fetcher.php:233] New filename for static page: category/networking/feed/index.xml -[2024-10-13 17:24:51] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02621742a-56o6Ru.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/feed/index.xml -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:159] Adding 10 URLs to the queue -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:51] [class-ss-page.php:119] Checking Content Identical:ba572164543dfd976310965ddccb4dce7b257a76===. Value: FALSE -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/64 -[2024-10-13 17:24:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 251 -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/64 -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/docker/feed/ -[2024-10-13 17:24:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 251 -[2024-10-13 17:24:51] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:51] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026367c02-UcAXLj.tmp -[2024-10-13 17:24:51] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/docker/feed/?simply_static_page=198 -[2024-10-13 17:24:51] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/docker/feed/?simply_static_page=198 -[2024-10-13 17:24:52] [class-ss-url-fetcher.php:103] Filesize: 41819 bytes -[2024-10-13 17:24:52] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:52] [class-ss-url-fetcher.php:233] New filename for static page: category/docker/feed/index.xml -[2024-10-13 17:24:52] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026367c02-UcAXLj.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/feed/index.xml -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:52] [class-ss-page.php:119] Checking Content Identical:1b97433938e07c8f92382018448621b3b7fa505d===. Value: FALSE -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/38 -[2024-10-13 17:24:52] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 251 -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/38 -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ansible/feed/ -[2024-10-13 17:24:52] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 251 -[2024-10-13 17:24:52] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:52] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026423a04-sUjIq5.tmp -[2024-10-13 17:24:52] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ansible/feed/?simply_static_page=200 -[2024-10-13 17:24:52] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ansible/feed/?simply_static_page=200 -[2024-10-13 17:24:53] [class-ss-url-fetcher.php:103] Filesize: 18313 bytes -[2024-10-13 17:24:53] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:53] [class-ss-url-fetcher.php:233] New filename for static page: category/ansible/feed/index.xml -[2024-10-13 17:24:53] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026423a04-sUjIq5.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/feed/index.xml -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:159] Adding 7 URLs to the queue -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:53] [class-ss-page.php:119] Checking Content Identical:2eb2a73eaa7d83a18faa1542fd47b85747eb6766===. Value: FALSE -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/36 -[2024-10-13 17:24:53] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 251 -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/36 -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/traefik/feed/ -[2024-10-13 17:24:53] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 251 -[2024-10-13 17:24:53] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:53] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0265d48d7-0tRiPd.tmp -[2024-10-13 17:24:53] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/traefik/feed/?simply_static_page=202 -[2024-10-13 17:24:53] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/traefik/feed/?simply_static_page=202 -[2024-10-13 17:24:54] [class-ss-url-fetcher.php:103] Filesize: 23038 bytes -[2024-10-13 17:24:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:54] [class-ss-url-fetcher.php:233] New filename for static page: category/traefik/feed/index.xml -[2024-10-13 17:24:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0265d48d7-0tRiPd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/feed/index.xml -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:159] Adding 11 URLs to the queue -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:54] [class-ss-page.php:119] Checking Content Identical:c6f826b24eaf633ea00e0ac98ba41c5d8566dd9a===. Value: FALSE -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/41 -[2024-10-13 17:24:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 251 -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/41 -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ci-cd/feed/ -[2024-10-13 17:24:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 251 -[2024-10-13 17:24:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026689337-VdvCsh.tmp -[2024-10-13 17:24:54] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ci-cd/feed/?simply_static_page=204 -[2024-10-13 17:24:54] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ci-cd/feed/?simply_static_page=204 -[2024-10-13 17:24:55] [class-ss-url-fetcher.php:103] Filesize: 10532 bytes -[2024-10-13 17:24:55] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:55] [class-ss-url-fetcher.php:233] New filename for static page: category/ci-cd/feed/index.xml -[2024-10-13 17:24:55] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026689337-VdvCsh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/feed/index.xml -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:55] [class-ss-page.php:119] Checking Content Identical:0c4de4d107d447f28fe7fbdb06832b946f65efc4===. Value: FALSE -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/34 -[2024-10-13 17:24:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 251 -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/34 -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/teamcity/feed/ -[2024-10-13 17:24:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 251 -[2024-10-13 17:24:55] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:55] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02674bad0-XLvpfQ.tmp -[2024-10-13 17:24:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/teamcity/feed/?simply_static_page=206 -[2024-10-13 17:24:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/teamcity/feed/?simply_static_page=206 -[2024-10-13 17:24:56] [class-ss-url-fetcher.php:103] Filesize: 10541 bytes -[2024-10-13 17:24:56] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:56] [class-ss-url-fetcher.php:233] New filename for static page: category/teamcity/feed/index.xml -[2024-10-13 17:24:56] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02674bad0-XLvpfQ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/feed/index.xml -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:56] [class-ss-page.php:119] Checking Content Identical:230f0172a70c67ae979126dd448d303cf373a304===. Value: FALSE -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/37 -[2024-10-13 17:24:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 251 -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/37 -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/oci/feed/ -[2024-10-13 17:24:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 251 -[2024-10-13 17:24:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026848b41-19OHUs.tmp -[2024-10-13 17:24:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/oci/feed/?simply_static_page=208 -[2024-10-13 17:24:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/oci/feed/?simply_static_page=208 -[2024-10-13 17:24:57] [class-ss-url-fetcher.php:103] Filesize: 5749 bytes -[2024-10-13 17:24:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:24:57] [class-ss-url-fetcher.php:233] New filename for static page: category/oci/feed/index.xml -[2024-10-13 17:24:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026848b41-19OHUs.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/feed/index.xml -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:159] Adding 14 URLs to the queue -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:57] [class-ss-page.php:119] Checking Content Identical:4f70da49cc6cf709ff9c4c5f3684fb0ea3beef8a===. Value: FALSE -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/39 -[2024-10-13 17:24:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 251 -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/39 -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/authentication/ -[2024-10-13 17:24:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 251 -[2024-10-13 17:24:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02692303f-fJGKhZ.tmp -[2024-10-13 17:24:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/authentication/?simply_static_page=210 -[2024-10-13 17:24:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/authentication/?simply_static_page=210 -[2024-10-13 17:24:59] [class-ss-url-fetcher.php:103] Filesize: 66327 bytes -[2024-10-13 17:24:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:24:59] [class-ss-url-fetcher.php:233] New filename for static page: tag/authentication/index.html -[2024-10-13 17:24:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02692303f-fJGKhZ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/index.html -[2024-10-13 17:24:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:24:59] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:24:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:24:59] [class-ss-page.php:119] Checking Content Identical:ce3b040d8e54994eaf070d9582e88199cc2a1a66===. Value: FALSE -[2024-10-13 17:24:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/react/ -[2024-10-13 17:24:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 251 -[2024-10-13 17:24:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:24:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026b54da0-IUYZDT.tmp -[2024-10-13 17:24:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/react/?simply_static_page=211 -[2024-10-13 17:24:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/react/?simply_static_page=211 -[2024-10-13 17:25:00] [class-ss-url-fetcher.php:103] Filesize: 66282 bytes -[2024-10-13 17:25:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:00] [class-ss-url-fetcher.php:233] New filename for static page: tag/react/index.html -[2024-10-13 17:25:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026b54da0-IUYZDT.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/index.html -[2024-10-13 17:25:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:00] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:25:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:00] [class-ss-page.php:119] Checking Content Identical:dd53e24a3d0aff3e5ce75dbb7ab9dbfb6decede1===. Value: FALSE -[2024-10-13 17:25:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/typescript/ -[2024-10-13 17:25:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 251 -[2024-10-13 17:25:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026c56a3b-C43kFD.tmp -[2024-10-13 17:25:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/typescript/?simply_static_page=212 -[2024-10-13 17:25:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/typescript/?simply_static_page=212 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:103] Filesize: 68239 bytes -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:233] New filename for static page: tag/typescript/index.html -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026c56a3b-C43kFD.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/index.html -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:01] [class-ss-page.php:119] Checking Content Identical:d68fb9cce1383778816f6256cb6a773c660a0124===. Value: FALSE -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4 -[2024-10-13 17:25:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 251 -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026d8dc4f-7mt5k9.tmp -[2024-10-13 17:25:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4?simply_static_page=213 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4?simply_static_page=213 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:103] Filesize: 29730 bytes -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: video/mp4 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/otp-countdown.mp4 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026d8dc4f-7mt5k9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/otp-countdown.mp4 -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:01] [class-ss-page.php:119] Checking Content Identical:d6e77f2d22a0d6338dbb57e2d56ad1188fe2a2a2===. Value: FALSE -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/ -[2024-10-13 17:25:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 251 -[2024-10-13 17:25:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026dcca4e-EMPUXP.tmp -[2024-10-13 17:25:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/?simply_static_page=214 -[2024-10-13 17:25:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/?simply_static_page=214 -[2024-10-13 17:25:02] [class-ss-url-fetcher.php:103] Filesize: 943 bytes -[2024-10-13 17:25:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:02] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml -[2024-10-13 17:25:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026dcca4e-EMPUXP.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:02] [class-ss-page.php:119] Checking Content Identical:a3c260c1e6a70f81a669e26f0c4681b7ae6863ab===. Value: FALSE -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/546 -[2024-10-13 17:25:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 251 -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/546 -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/portfolio/feed/ -[2024-10-13 17:25:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 251 -[2024-10-13 17:25:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c026e9b981-w3f4rE.tmp -[2024-10-13 17:25:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/portfolio/feed/?simply_static_page=216 -[2024-10-13 17:25:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/portfolio/feed/?simply_static_page=216 -[2024-10-13 17:25:04] [class-ss-url-fetcher.php:103] Filesize: 14743 bytes -[2024-10-13 17:25:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:04] [class-ss-url-fetcher.php:233] New filename for static page: tag/portfolio/feed/index.xml -[2024-10-13 17:25:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c026e9b981-w3f4rE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/feed/index.xml -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:159] Adding 50 URLs to the queue -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:04] [class-ss-page.php:119] Checking Content Identical:946b882f82cfee80ed8e1057d164387831ef308e===. Value: FALSE -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/47 -[2024-10-13 17:25:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 251 -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/47 -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/graphql/ -[2024-10-13 17:25:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 251 -[2024-10-13 17:25:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0270483fa-JhvQMP.tmp -[2024-10-13 17:25:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/graphql/?simply_static_page=218 -[2024-10-13 17:25:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/graphql/?simply_static_page=218 -[2024-10-13 17:25:05] [class-ss-url-fetcher.php:103] Filesize: 67268 bytes -[2024-10-13 17:25:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:05] [class-ss-url-fetcher.php:233] New filename for static page: tag/graphql/index.html -[2024-10-13 17:25:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0270483fa-JhvQMP.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/index.html -[2024-10-13 17:25:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:05] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:25:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:05] [class-ss-page.php:119] Checking Content Identical:4598ab72cd789b9150f02baa37fffe2364d3cde1===. Value: FALSE -[2024-10-13 17:25:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/keystonejs/ -[2024-10-13 17:25:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 251 -[2024-10-13 17:25:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02718a9c7-RM4wKM.tmp -[2024-10-13 17:25:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/keystonejs/?simply_static_page=219 -[2024-10-13 17:25:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/keystonejs/?simply_static_page=219 -[2024-10-13 17:25:06] [class-ss-url-fetcher.php:103] Filesize: 67283 bytes -[2024-10-13 17:25:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:06] [class-ss-url-fetcher.php:233] New filename for static page: tag/keystonejs/index.html -[2024-10-13 17:25:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02718a9c7-RM4wKM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/index.html -[2024-10-13 17:25:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:06] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:25:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:06] [class-ss-page.php:119] Checking Content Identical:eccd2a68ad57d535c20d4e22f5ef0773e38b8c78===. Value: FALSE -[2024-10-13 17:25:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/nodejs/ -[2024-10-13 17:25:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 251 -[2024-10-13 17:25:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02728b11c-GMBWus.tmp -[2024-10-13 17:25:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/nodejs/?simply_static_page=220 -[2024-10-13 17:25:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/nodejs/?simply_static_page=220 -[2024-10-13 17:25:07] [class-ss-url-fetcher.php:103] Filesize: 67263 bytes -[2024-10-13 17:25:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:07] [class-ss-url-fetcher.php:233] New filename for static page: tag/nodejs/index.html -[2024-10-13 17:25:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02728b11c-GMBWus.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/index.html -[2024-10-13 17:25:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:07] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:25:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:07] [class-ss-page.php:119] Checking Content Identical:6578ace77e0d92bb7821a38aa1f3ffceeeaa8e72===. Value: FALSE -[2024-10-13 17:25:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/prisma/ -[2024-10-13 17:25:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 251 -[2024-10-13 17:25:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027384137-fwEXgA.tmp -[2024-10-13 17:25:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/prisma/?simply_static_page=221 -[2024-10-13 17:25:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/prisma/?simply_static_page=221 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:103] Filesize: 67263 bytes -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:233] New filename for static page: tag/prisma/index.html -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027384137-fwEXgA.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/index.html -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:09] [class-ss-page.php:119] Checking Content Identical:b6afb292e0ca58e6db9c486ed820bf9933d62df2===. Value: FALSE -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min.webp -[2024-10-13 17:25:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 251 -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0275831b1-HfVKgz.tmp -[2024-10-13 17:25:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min.webp?simply_static_page=222 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min.webp?simply_static_page=222 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:103] Filesize: 8498 bytes -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-init-min.webp -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0275831b1-HfVKgz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min.webp -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:09] [class-ss-page.php:119] Checking Content Identical:0d6df3b8b294d5b48499cb59e9f022b71d5e3c39===. Value: FALSE -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-300x239.webp -[2024-10-13 17:25:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 251 -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0275a64af-9pK9S4.tmp -[2024-10-13 17:25:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-300x239.webp?simply_static_page=223 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-300x239.webp?simply_static_page=223 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:103] Filesize: 4474 bytes -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-init-min-300x239.webp -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0275a64af-9pK9S4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-300x239.webp -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:09] [class-ss-page.php:119] Checking Content Identical:15b82df4062571ba1d5061984f42cc2c78365f9b===. Value: FALSE -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-768x612.webp -[2024-10-13 17:25:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 251 -[2024-10-13 17:25:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0275e8a24-vNHM1B.tmp -[2024-10-13 17:25:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-768x612.webp?simply_static_page=224 -[2024-10-13 17:25:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-768x612.webp?simply_static_page=224 -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:103] Filesize: 15162 bytes -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-init-min-768x612.webp -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0275e8a24-vNHM1B.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-768x612.webp -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:10] [class-ss-page.php:119] Checking Content Identical:f2aefb9509977f4537a22fe150711f1ea6c9cfdd===. Value: FALSE -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp -[2024-10-13 17:25:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 251 -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027638662-2Ry0Mt.tmp -[2024-10-13 17:25:10] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp?simply_static_page=225 -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp?simply_static_page=225 -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:103] Filesize: 15766 bytes -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027638662-2Ry0Mt.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:10] [class-ss-page.php:119] Checking Content Identical:f3b7c807c36578329e7b71a9c35c3f290a6f0e06===. Value: FALSE -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp -[2024-10-13 17:25:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 251 -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02767efae-YI9ueu.tmp -[2024-10-13 17:25:10] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp?simply_static_page=226 -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp?simply_static_page=226 -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:103] Filesize: 3046 bytes -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp -[2024-10-13 17:25:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02767efae-YI9ueu.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:10] [class-ss-page.php:119] Checking Content Identical:9c6d2a917d32b378ccd3de1c931affa38c13ee9c===. Value: FALSE -[2024-10-13 17:25:10] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 176 of 251 pages/files -[2024-10-13 17:25:10] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:25:11] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:25:11] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:69] Total pages: 276; Pages remaining: 50 -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp -[2024-10-13 17:25:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 276 -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027754754-VBup6I.tmp -[2024-10-13 17:25:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp?simply_static_page=227 -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp?simply_static_page=227 -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:103] Filesize: 10888 bytes -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027754754-VBup6I.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:11] [class-ss-page.php:119] Checking Content Identical:2dc9eef4a5ab719d687551728bb0d3f1e7e56f4f===. Value: FALSE -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min.webp -[2024-10-13 17:25:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 276 -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02779c976-tU2mmS.tmp -[2024-10-13 17:25:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min.webp?simply_static_page=228 -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min.webp?simply_static_page=228 -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:103] Filesize: 7062 bytes -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min.webp -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02779c976-tU2mmS.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min.webp -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:11] [class-ss-page.php:119] Checking Content Identical:f6c7b3cb0007fdb5f5cfd1a263d763944ef2153f===. Value: FALSE -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-1024x572.webp -[2024-10-13 17:25:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 276 -[2024-10-13 17:25:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0277dc95e-ZYV9bb.tmp -[2024-10-13 17:25:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-1024x572.webp?simply_static_page=229 -[2024-10-13 17:25:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-1024x572.webp?simply_static_page=229 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:103] Filesize: 24070 bytes -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min-1024x572.webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0277dc95e-ZYV9bb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-1024x572.webp -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:12] [class-ss-page.php:119] Checking Content Identical:0b6951bf7d654ba395aa7ee9270b6a5b18106539===. Value: FALSE -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-300x167.webp -[2024-10-13 17:25:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 276 -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02781f1ba-YmCk0D.tmp -[2024-10-13 17:25:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-300x167.webp?simply_static_page=230 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-300x167.webp?simply_static_page=230 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:103] Filesize: 4130 bytes -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min-300x167.webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02781f1ba-YmCk0D.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-300x167.webp -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:12] [class-ss-page.php:119] Checking Content Identical:c751f2aa3e5dab1ee1991c31128a79844ac5f077===. Value: FALSE -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-768x429.webp -[2024-10-13 17:25:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 276 -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027864ec1-JwWpBl.tmp -[2024-10-13 17:25:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-768x429.webp?simply_static_page=231 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-768x429.webp?simply_static_page=231 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:103] Filesize: 16250 bytes -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min-768x429.webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027864ec1-JwWpBl.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-768x429.webp -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:12] [class-ss-page.php:119] Checking Content Identical:8f126cf07085d2c81cc9b3410a59286d9b19f741===. Value: FALSE -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min.webp -[2024-10-13 17:25:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 276 -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02788ae63-DDTn8I.tmp -[2024-10-13 17:25:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min.webp?simply_static_page=232 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min.webp?simply_static_page=232 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:103] Filesize: 10490 bytes -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min.webp -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02788ae63-DDTn8I.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min.webp -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:12] [class-ss-page.php:119] Checking Content Identical:96e637a807982bd6423869c246b7c277551567cb===. Value: FALSE -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp -[2024-10-13 17:25:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 276 -[2024-10-13 17:25:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0278c8806-ZJDAul.tmp -[2024-10-13 17:25:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp?simply_static_page=233 -[2024-10-13 17:25:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp?simply_static_page=233 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:103] Filesize: 14542 bytes -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0278c8806-ZJDAul.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:13] [class-ss-page.php:119] Checking Content Identical:ef969460b8f4e586283c4c74843421e00c90effc===. Value: FALSE -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp -[2024-10-13 17:25:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 276 -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02790cc9b-UDyExw.tmp -[2024-10-13 17:25:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp?simply_static_page=234 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp?simply_static_page=234 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:103] Filesize: 2562 bytes -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02790cc9b-UDyExw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:13] [class-ss-page.php:119] Checking Content Identical:35d0b83cbeeda9c8b16edc3cd807a3d414e6e2c8===. Value: FALSE -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp -[2024-10-13 17:25:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 276 -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027949c6f-q0OLcn.tmp -[2024-10-13 17:25:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp?simply_static_page=235 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp?simply_static_page=235 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:103] Filesize: 9512 bytes -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027949c6f-q0OLcn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:13] [class-ss-page.php:119] Checking Content Identical:9cd58c29f2df6b644965c75264fe5e0cc6ae4df9===. Value: FALSE -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp -[2024-10-13 17:25:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 276 -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027981f02-u2p6yl.tmp -[2024-10-13 17:25:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp?simply_static_page=236 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp?simply_static_page=236 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:103] Filesize: 24188 bytes -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027981f02-u2p6yl.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:13] [class-ss-page.php:119] Checking Content Identical:cc4a183bede73c1284a13c9bf5bfc6007abcfffd===. Value: FALSE -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min.webp -[2024-10-13 17:25:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 276 -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0279b71ac-NEuuD1.tmp -[2024-10-13 17:25:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min.webp?simply_static_page=237 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min.webp?simply_static_page=237 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:103] Filesize: 12200 bytes -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min.webp -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0279b71ac-NEuuD1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min.webp -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:13] [class-ss-page.php:119] Checking Content Identical:80ec1c0929e41ae677b8c9c81caef27c16130530===. Value: FALSE -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/ -[2024-10-13 17:25:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 276 -[2024-10-13 17:25:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0279dc29e-IHUFWV.tmp -[2024-10-13 17:25:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/?simply_static_page=238 -[2024-10-13 17:25:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/?simply_static_page=238 -[2024-10-13 17:25:14] [class-ss-url-fetcher.php:103] Filesize: 920 bytes -[2024-10-13 17:25:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:14] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml -[2024-10-13 17:25:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0279dc29e-IHUFWV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:14] [class-ss-page.php:119] Checking Content Identical:254e6e8aebb6953ce960e07fa7b34b19ebe951af===. Value: FALSE -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/533 -[2024-10-13 17:25:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 276 -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/533 -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/upwork-project/feed/ -[2024-10-13 17:25:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 276 -[2024-10-13 17:25:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027aa8fa3-CdSYPw.tmp -[2024-10-13 17:25:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/upwork-project/feed/?simply_static_page=240 -[2024-10-13 17:25:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/upwork-project/feed/?simply_static_page=240 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:103] Filesize: 4281 bytes -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:233] New filename for static page: tag/upwork-project/feed/index.xml -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027aa8fa3-CdSYPw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/feed/index.xml -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:15] [class-ss-page.php:119] Checking Content Identical:05ca14278f95976622c812b3db1b332283049dcb===. Value: FALSE -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/66 -[2024-10-13 17:25:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 276 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/66 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/icon-exclamation.png -[2024-10-13 17:25:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 276 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027b78905-C6QsZg.tmp -[2024-10-13 17:25:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/icon-exclamation.png?simply_static_page=242 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/icon-exclamation.png?simply_static_page=242 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:103] Filesize: 452 bytes -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/icon-exclamation.png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027b78905-C6QsZg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/icon-exclamation.png -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:15] [class-ss-page.php:119] Checking Content Identical:b9f9d500f8814381451011d4dcf59cd2d90ad94f===. Value: FALSE -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-horizontal-arrow.png -[2024-10-13 17:25:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 276 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027b9e604-RwHo6C.tmp -[2024-10-13 17:25:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-horizontal-arrow.png?simply_static_page=243 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-horizontal-arrow.png?simply_static_page=243 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:103] Filesize: 537 bytes -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-horizontal-arrow.png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027b9e604-RwHo6C.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-horizontal-arrow.png -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:15] [class-ss-page.php:119] Checking Content Identical:8a2e5106528d7049f6add7851da80895faf31fd0===. Value: FALSE -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/browser-bar.png -[2024-10-13 17:25:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 276 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027bb713c-x9H4Ry.tmp -[2024-10-13 17:25:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/browser-bar.png?simply_static_page=244 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/browser-bar.png?simply_static_page=244 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:103] Filesize: 715 bytes -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/browser-bar.png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027bb713c-x9H4Ry.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/browser-bar.png -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:15] [class-ss-page.php:119] Checking Content Identical:3785cc5b3bf52f8e398177b0ff1020b24aa86b8c===. Value: FALSE -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-warn.png -[2024-10-13 17:25:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 276 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027bcfc83-axEcLH.tmp -[2024-10-13 17:25:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-warn.png?simply_static_page=245 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-warn.png?simply_static_page=245 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:103] Filesize: 2592 bytes -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-no-screenshot-warn.png -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027bcfc83-axEcLH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-warn.png -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:15] [class-ss-page.php:119] Checking Content Identical:5b925e54a66b1241bf1b61a38b9a2068173a50ea===. Value: FALSE -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-error.png -[2024-10-13 17:25:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 276 -[2024-10-13 17:25:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027becacb-lAHgqI.tmp -[2024-10-13 17:25:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-error.png?simply_static_page=246 -[2024-10-13 17:25:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-error.png?simply_static_page=246 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 3213 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-no-screenshot-error.png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027becacb-lAHgqI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-error.png -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:aff136a4c761e1df1ada7e5d9a6ed0ebea74a4b7===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-ok.png -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027c152be-7MVE3Q.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-ok.png?simply_static_page=247 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-ok.png?simply_static_page=247 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 946 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-ok.png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027c152be-7MVE3Q.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-ok.png -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:8f2597eb7ba4c89892aac0559816db3f5280b23e===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-error.png -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027c315e4-k7M298.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-error.png?simply_static_page=248 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-error.png?simply_static_page=248 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 854 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-error.png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027c315e4-k7M298.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-error.png -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:16946b2c99d98a57f83eac170ce94b012b7d1a7b===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-browser.png -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027c4ea0a-JxU5zY.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-browser.png?simply_static_page=249 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-browser.png?simply_static_page=249 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 484 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-browser.png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027c4ea0a-JxU5zY.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-browser.png -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:8024e688e78e910ae1ea3bc25be7a7ab65444b02===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-cloud.png -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027c6b42c-rO4A5h.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-cloud.png?simply_static_page=250 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-cloud.png?simply_static_page=250 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 1484 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-cloud.png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027c6b42c-rO4A5h.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-cloud.png -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:8f03b6857ab8d31feb65f97b1ae6b678efdc2ddd===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-server.png -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027c86906-U6SI19.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-server.png?simply_static_page=251 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-server.png?simply_static_page=251 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 1384 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-server.png -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027c86906-U6SI19.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-server.png -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:01dc915d4745f00632021c05d3eef634747a9c3d===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth.webp -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027c9ef54-VKOFeC.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/ente-auth.webp?simply_static_page=252 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth.webp?simply_static_page=252 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:103] Filesize: 4990 bytes -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/ente-auth.webp -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027c9ef54-VKOFeC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth.webp -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:16] [class-ss-page.php:119] Checking Content Identical:609ad80bc89f47256a5364c6e7f2210de6339775===. Value: FALSE -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-300x103.webp -[2024-10-13 17:25:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 276 -[2024-10-13 17:25:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027cbeebd-BUBmYC.tmp -[2024-10-13 17:25:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-300x103.webp?simply_static_page=253 -[2024-10-13 17:25:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-300x103.webp?simply_static_page=253 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:103] Filesize: 1754 bytes -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/ente-auth-300x103.webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027cbeebd-BUBmYC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-300x103.webp -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:17] [class-ss-page.php:119] Checking Content Identical:136a03b38fa125fd7ca043bb1334bd84c5e7ed6c===. Value: FALSE -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-768x265.webp -[2024-10-13 17:25:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 276 -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027d0c187-CnQemM.tmp -[2024-10-13 17:25:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-768x265.webp?simply_static_page=254 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-768x265.webp?simply_static_page=254 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:103] Filesize: 6900 bytes -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/ente-auth-768x265.webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027d0c187-CnQemM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-768x265.webp -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:17] [class-ss-page.php:119] Checking Content Identical:50a9073b4580a9fc6debc6759c22d54bea0411ba===. Value: FALSE -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend.webp -[2024-10-13 17:25:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 276 -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027d5255b-Xfy8Qp.tmp -[2024-10-13 17:25:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend.webp?simply_static_page=255 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend.webp?simply_static_page=255 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:103] Filesize: 3756 bytes -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/initial-token-frontend.webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027d5255b-Xfy8Qp.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend.webp -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:17] [class-ss-page.php:119] Checking Content Identical:919eca1ff682e82f1140553c3957ee269bf16a89===. Value: FALSE -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp -[2024-10-13 17:25:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 276 -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027d877d9-bz8YdT.tmp -[2024-10-13 17:25:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp?simply_static_page=256 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp?simply_static_page=256 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:103] Filesize: 1262 bytes -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/initial-token-frontend-300x103.webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027d877d9-bz8YdT.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:17] [class-ss-page.php:119] Checking Content Identical:e019e96a4583b93e26b562f282b0a76f643e5560===. Value: FALSE -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp -[2024-10-13 17:25:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 276 -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027dbb3c6-c53WYx.tmp -[2024-10-13 17:25:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp?simply_static_page=257 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp?simply_static_page=257 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:103] Filesize: 4536 bytes -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/initial-token-frontend-768x265.webp -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027dbb3c6-c53WYx.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:17] [class-ss-page.php:119] Checking Content Identical:1eb89a872db2cd5da6be1595dfd0f5d09b231133===. Value: FALSE -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1.png -[2024-10-13 17:25:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 276 -[2024-10-13 17:25:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027ded9a0-YP4w7A.tmp -[2024-10-13 17:25:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/token-display-1.png?simply_static_page=258 -[2024-10-13 17:25:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1.png?simply_static_page=258 -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:103] Filesize: 4798 bytes -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/token-display-1.png -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027ded9a0-YP4w7A.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1.png -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:18] [class-ss-page.php:119] Checking Content Identical:34134a92feb5b096515e7e0ecf7d0d5db7cab710===. Value: FALSE -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-300x103.png -[2024-10-13 17:25:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 276 -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027e2d828-xxs9BV.tmp -[2024-10-13 17:25:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-300x103.png?simply_static_page=259 -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-300x103.png?simply_static_page=259 -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:103] Filesize: 1494 bytes -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/token-display-1-300x103.png -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027e2d828-xxs9BV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-300x103.png -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:18] [class-ss-page.php:119] Checking Content Identical:6196f971bd3c947274aac69dbf73a405bb7ef685===. Value: FALSE -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-768x265.png -[2024-10-13 17:25:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 276 -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027e62e3f-2U7pc9.tmp -[2024-10-13 17:25:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-768x265.png?simply_static_page=260 -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-768x265.png?simply_static_page=260 -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:103] Filesize: 5050 bytes -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/token-display-1-768x265.png -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027e62e3f-2U7pc9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-768x265.png -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:18] [class-ss-page.php:119] Checking Content Identical:68865b91b15d5b8b58174ae783236afa60f48643===. Value: FALSE -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/ -[2024-10-13 17:25:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 276 -[2024-10-13 17:25:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027e97f27-X1bnv6.tmp -[2024-10-13 17:25:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/?simply_static_page=261 -[2024-10-13 17:25:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/?simply_static_page=261 -[2024-10-13 17:25:19] [class-ss-url-fetcher.php:103] Filesize: 943 bytes -[2024-10-13 17:25:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:19] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml -[2024-10-13 17:25:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027e97f27-X1bnv6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:19] [class-ss-page.php:119] Checking Content Identical:7e2b54d86296a16c73d0c9bd85d4138f2cb8a61a===. Value: FALSE -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/539 -[2024-10-13 17:25:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 276 -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/539 -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/authentication/feed/ -[2024-10-13 17:25:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 276 -[2024-10-13 17:25:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c027f62501-klKurB.tmp -[2024-10-13 17:25:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/authentication/feed/?simply_static_page=263 -[2024-10-13 17:25:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/authentication/feed/?simply_static_page=263 -[2024-10-13 17:25:20] [class-ss-url-fetcher.php:103] Filesize: 8610 bytes -[2024-10-13 17:25:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:20] [class-ss-url-fetcher.php:233] New filename for static page: tag/authentication/feed/index.xml -[2024-10-13 17:25:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c027f62501-klKurB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/feed/index.xml -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:159] Adding 5 URLs to the queue -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:20] [class-ss-page.php:119] Checking Content Identical:767c69512ae1862a66331a094de18047f0bc156f===. Value: FALSE -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/61 -[2024-10-13 17:25:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 276 -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/61 -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/react/feed/ -[2024-10-13 17:25:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 276 -[2024-10-13 17:25:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02800fe8f-xiVxoV.tmp -[2024-10-13 17:25:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/react/feed/?simply_static_page=265 -[2024-10-13 17:25:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/react/feed/?simply_static_page=265 -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:103] Filesize: 8583 bytes -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:233] New filename for static page: tag/react/feed/index.xml -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02800fe8f-xiVxoV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/feed/index.xml -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:159] Adding 5 URLs to the queue -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:21] [class-ss-page.php:119] Checking Content Identical:7ee1ef92a96cf1f9657fb3d35e549a26a82f6da8===. Value: FALSE -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/60 -[2024-10-13 17:25:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 276 -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/60 -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/typescript/feed/ -[2024-10-13 17:25:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 276 -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028111ea7-SWVgYE.tmp -[2024-10-13 17:25:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/typescript/feed/?simply_static_page=267 -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/typescript/feed/?simply_static_page=267 -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:103] Filesize: 27059 bytes -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:233] New filename for static page: tag/typescript/feed/index.xml -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028111ea7-SWVgYE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/feed/index.xml -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:21] [class-ss-page.php:119] Checking Content Identical:a3dcdde51b3bee6b504fce455760cb8ee80d4a16===. Value: FALSE -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/58 -[2024-10-13 17:25:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 276 -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/58 -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/graphql/feed/ -[2024-10-13 17:25:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 276 -[2024-10-13 17:25:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0281d5e4b-DiAnVP.tmp -[2024-10-13 17:25:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/graphql/feed/?simply_static_page=269 -[2024-10-13 17:25:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/graphql/feed/?simply_static_page=269 -[2024-10-13 17:25:22] [class-ss-url-fetcher.php:103] Filesize: 19594 bytes -[2024-10-13 17:25:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:22] [class-ss-url-fetcher.php:233] New filename for static page: tag/graphql/feed/index.xml -[2024-10-13 17:25:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0281d5e4b-DiAnVP.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/feed/index.xml -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:22] [class-ss-page.php:119] Checking Content Identical:14c34df7e62ad7943634eb86fd4b41db5c421006===. Value: FALSE -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/57 -[2024-10-13 17:25:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 276 -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/57 -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/keystonejs/feed/ -[2024-10-13 17:25:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 276 -[2024-10-13 17:25:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0282bdb4c-XmYYGJ.tmp -[2024-10-13 17:25:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/keystonejs/feed/?simply_static_page=271 -[2024-10-13 17:25:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/keystonejs/feed/?simply_static_page=271 -[2024-10-13 17:25:24] [class-ss-url-fetcher.php:103] Filesize: 19603 bytes -[2024-10-13 17:25:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:24] [class-ss-url-fetcher.php:233] New filename for static page: tag/keystonejs/feed/index.xml -[2024-10-13 17:25:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0282bdb4c-XmYYGJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/feed/index.xml -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:24] [class-ss-page.php:119] Checking Content Identical:2f3f73ee662dfb43f4d6b4c11537fe9bba5ed1d7===. Value: FALSE -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/55 -[2024-10-13 17:25:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 276 -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/55 -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/nodejs/feed/ -[2024-10-13 17:25:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 276 -[2024-10-13 17:25:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:24] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02844233c-mF2r2C.tmp -[2024-10-13 17:25:24] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/nodejs/feed/?simply_static_page=273 -[2024-10-13 17:25:24] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/nodejs/feed/?simply_static_page=273 -[2024-10-13 17:25:25] [class-ss-url-fetcher.php:103] Filesize: 19591 bytes -[2024-10-13 17:25:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:25] [class-ss-url-fetcher.php:233] New filename for static page: tag/nodejs/feed/index.xml -[2024-10-13 17:25:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02844233c-mF2r2C.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/feed/index.xml -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:25] [class-ss-page.php:119] Checking Content Identical:43f8ae57162e44a50efb53e4b9319520538e9dbb===. Value: FALSE -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/56 -[2024-10-13 17:25:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 276 -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/56 -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/prisma/feed/ -[2024-10-13 17:25:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 276 -[2024-10-13 17:25:25] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028561eb2-5HF83F.tmp -[2024-10-13 17:25:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/prisma/feed/?simply_static_page=275 -[2024-10-13 17:25:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/prisma/feed/?simply_static_page=275 -[2024-10-13 17:25:26] [class-ss-url-fetcher.php:103] Filesize: 19591 bytes -[2024-10-13 17:25:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:26] [class-ss-url-fetcher.php:233] New filename for static page: tag/prisma/feed/index.xml -[2024-10-13 17:25:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028561eb2-5HF83F.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/feed/index.xml -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:26] [class-ss-page.php:119] Checking Content Identical:b399ba73f57f40bdfdd22477907f133d15f7a5f4===. Value: FALSE -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/59 -[2024-10-13 17:25:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 276 -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/59 -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:26] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 226 of 276 pages/files -[2024-10-13 17:25:26] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:25:26] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:25:26] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:25:26] [class-ss-fetch-urls-task.php:69] Total pages: 276; Pages remaining: 0 -[2024-10-13 17:25:26] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 276 of 276 pages/files -[2024-10-13 17:25:26] [class-ss-archive-creation-job.php:175] We've found our next task: generate_404 -[2024-10-13 17:25:26] [class-ss-archive-creation-job.php:136] Current task: generate_404 -[2024-10-13 17:25:26] [class-ss-archive-creation-job.php:153] Performing task: generate_404 -[2024-10-13 17:25:26] [class-ss-task.php:44] Status message: [generate_404] Generating 404 Page. -[2024-10-13 17:25:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028664a5e-vGaN3E.tmp -[2024-10-13 17:25:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/1728840327?simply_static_page=0 -[2024-10-13 17:25:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/1728840327?simply_static_page=0 -[2024-10-13 17:25:27] [class-ss-url-fetcher.php:103] Filesize: 62544 bytes -[2024-10-13 17:25:27] [class-ss-url-fetcher.php:119] http_status_code: 404 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:27] [class-ss-url-fetcher.php:233] New filename for static page: 404/index.html -[2024-10-13 17:25:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028664a5e-vGaN3E.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/404/index.html -[2024-10-13 17:25:27] [class-ss-generate-404-task.php:119] Replacing URLs in the static file -[2024-10-13 17:25:27] [class-ss-generate-404-task.php:125] We're saving this URL; keeping the static file -[2024-10-13 17:25:27] [class-ss-page.php:119] Checking Content Identical:db24b68590834985a7bccd6b894c1a61b5e361de===. Value: FALSE -[2024-10-13 17:25:27] [class-ss-task.php:44] Status message: [generate_404] 404 Page generated -[2024-10-13 17:25:27] [class-ss-archive-creation-job.php:175] We've found our next task: create_zip_archive -[2024-10-13 17:25:27] [class-ss-archive-creation-job.php:136] Current task: create_zip_archive -[2024-10-13 17:25:27] [class-ss-archive-creation-job.php:153] Performing task: create_zip_archive -[2024-10-13 17:25:27] [class-ss-create-zip-archive.php:71] Fetching list of files to include in zip -[2024-10-13 17:25:27] [class-ss-create-zip-archive.php:80] Creating zip archive -[2024-10-13 17:25:28] [class-ss-task.php:44] Status message: [create_zip_archive] ZIP archive created: Click here to download -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:175] We've found our next task: wrapup -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:136] Current task: wrapup -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:153] Performing task: wrapup -[2024-10-13 17:25:28] [class-ss-wrapup-task.php:22] Deleting temporary files -[2024-10-13 17:25:28] [class-ss-task.php:44] Status message: [wrapup] Wrapping up -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:170] This task is done and there are no more tasks, time to complete the job -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:136] Current task: setup -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:153] Performing task: setup -[2024-10-13 17:25:28] [class-ss-task.php:44] Status message: [setup] Setting up -[2024-10-13 17:25:28] [class-ss-setup-task.php:33] Creating archive directory: /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/ -[2024-10-13 17:25:28] [class-ss-setup-task.php:72] Adding origin URL to queue: https://hackanooga.com/ -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:175] We've found our next task: fetch_urls -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:25:28] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:25:28] [class-ss-fetch-urls-task.php:69] Total pages: 1; Pages remaining: 1 -[2024-10-13 17:25:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/ -[2024-10-13 17:25:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 1 -[2024-10-13 17:25:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0288a42e2-QioiSC.tmp -[2024-10-13 17:25:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/?simply_static_page=277 -[2024-10-13 17:25:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/?simply_static_page=277 -[2024-10-13 17:25:29] [class-ss-url-fetcher.php:103] Filesize: 77495 bytes -[2024-10-13 17:25:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:29] [class-ss-url-fetcher.php:233] New filename for static page: index.html -[2024-10-13 17:25:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0288a42e2-QioiSC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/index.html -[2024-10-13 17:25:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:29] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:25:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:29] [class-ss-page.php:119] Checking Content Identical:48f3f27dce7ab3fce67437346cec4847c0095a5b===. Value: FALSE -[2024-10-13 17:25:29] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 0 of 1 pages/files -[2024-10-13 17:25:29] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:25:29] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:25:29] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:25:29] [class-ss-fetch-urls-task.php:69] Total pages: 30; Pages remaining: 29 -[2024-10-13 17:25:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/blog/ -[2024-10-13 17:25:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 30 -[2024-10-13 17:25:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0289f2cdd-lcTl9v.tmp -[2024-10-13 17:25:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/blog/?simply_static_page=278 -[2024-10-13 17:25:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/blog/?simply_static_page=278 -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:103] Filesize: 77997 bytes -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:233] New filename for static page: blog/index.html -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0289f2cdd-lcTl9v.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/blog/index.html -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:31] [class-ss-page.php:119] Checking Content Identical:ae9e14e40a5f82b9e5e012a4f31f4e9d07b22bb3===. Value: FALSE -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/mikeconrad-devops.pdf -[2024-10-13 17:25:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 30 -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028b4f690-wKaJVd.tmp -[2024-10-13 17:25:31] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/mikeconrad-devops.pdf?simply_static_page=279 -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/mikeconrad-devops.pdf?simply_static_page=279 -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:103] Filesize: 272979 bytes -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/pdf -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/mikeconrad-devops.pdf -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028b4f690-wKaJVd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/mikeconrad-devops.pdf -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:31] [class-ss-page.php:119] Checking Content Identical:3a28cfce3d33c52cec89cd8e8a6ab43871d78786===. Value: FALSE -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/portfolio/ -[2024-10-13 17:25:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 30 -[2024-10-13 17:25:31] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028b87e3e-aHrysn.tmp -[2024-10-13 17:25:31] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/portfolio/?simply_static_page=280 -[2024-10-13 17:25:31] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/portfolio/?simply_static_page=280 -[2024-10-13 17:25:32] [class-ss-url-fetcher.php:103] Filesize: 68683 bytes -[2024-10-13 17:25:32] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:32] [class-ss-url-fetcher.php:233] New filename for static page: portfolio/index.html -[2024-10-13 17:25:32] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028b87e3e-aHrysn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/portfolio/index.html -[2024-10-13 17:25:32] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:32] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:25:32] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:32] [class-ss-page.php:119] Checking Content Identical:2fb596b719091e7b2e0acb80e21e824d3540b43b===. Value: FALSE -[2024-10-13 17:25:32] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/my-story/ -[2024-10-13 17:25:32] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 30 -[2024-10-13 17:25:32] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:32] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028cbd508-OTS7sX.tmp -[2024-10-13 17:25:32] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/my-story/?simply_static_page=281 -[2024-10-13 17:25:32] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/my-story/?simply_static_page=281 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:103] Filesize: 67070 bytes -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:233] New filename for static page: my-story/index.html -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028cbd508-OTS7sX.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/my-story/index.html -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:34] [class-ss-page.php:119] Checking Content Identical:12252d9751dcaf138d9542784e7409e4d2056cfe===. Value: FALSE -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg -[2024-10-13 17:25:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 30 -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028e5368c-4fHCKc.tmp -[2024-10-13 17:25:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg?simply_static_page=282 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg?simply_static_page=282 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:103] Filesize: 224955 bytes -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min.jpg -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028e5368c-4fHCKc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:34] [class-ss-page.php:119] Checking Content Identical:4a8b6bebf0743e654af73fadc9c83760e3101d8f===. Value: FALSE -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg -[2024-10-13 17:25:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 30 -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028e97102-5sl2Q1.tmp -[2024-10-13 17:25:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg?simply_static_page=283 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg?simply_static_page=283 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:103] Filesize: 15443 bytes -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028e97102-5sl2Q1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:34] [class-ss-page.php:119] Checking Content Identical:0d4ba3d0299db8e6242fb0237e3f7e11170a11ab===. Value: FALSE -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg -[2024-10-13 17:25:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 30 -[2024-10-13 17:25:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028ed0737-4sUB3q.tmp -[2024-10-13 17:25:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg?simply_static_page=284 -[2024-10-13 17:25:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg?simply_static_page=284 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:103] Filesize: 81647 bytes -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028ed0737-4sUB3q.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:35] [class-ss-page.php:119] Checking Content Identical:6f709bf032c5df43e69282dc247ed0e057abedeb===. Value: FALSE -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg -[2024-10-13 17:25:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 30 -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028f09047-oX9DTc.tmp -[2024-10-13 17:25:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg?simply_static_page=285 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg?simply_static_page=285 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:103] Filesize: 55757 bytes -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028f09047-oX9DTc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:35] [class-ss-page.php:119] Checking Content Identical:e44e73c757c194fcd56c6a3f8ad603a07513963a===. Value: FALSE -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg -[2024-10-13 17:25:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 30 -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028f46708-M5682k.tmp -[2024-10-13 17:25:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg?simply_static_page=286 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg?simply_static_page=286 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:103] Filesize: 143078 bytes -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028f46708-M5682k.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:35] [class-ss-page.php:119] Checking Content Identical:d6585817ea437a87f57704395ccc5cd54485e154===. Value: FALSE -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min.jpg -[2024-10-13 17:25:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 30 -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028f8b68c-3ArCFE.tmp -[2024-10-13 17:25:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/avatar-min.jpg?simply_static_page=287 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min.jpg?simply_static_page=287 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:103] Filesize: 12507 bytes -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/avatar-min.jpg -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028f8b68c-3ArCFE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min.jpg -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:35] [class-ss-page.php:119] Checking Content Identical:0bf79c33a2c378211dd16dc09630d325f5b689f8===. Value: FALSE -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-300x225.jpg -[2024-10-13 17:25:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 30 -[2024-10-13 17:25:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c028fc3c3a-8gCB4V.tmp -[2024-10-13 17:25:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-300x225.jpg?simply_static_page=288 -[2024-10-13 17:25:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-300x225.jpg?simply_static_page=288 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:103] Filesize: 3977 bytes -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/avatar-min-300x225.jpg -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c028fc3c3a-8gCB4V.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-300x225.jpg -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:36] [class-ss-page.php:119] Checking Content Identical:2d942a2de89decbfa83a962de7f162e6ccd0024b===. Value: FALSE -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-768x576.jpg -[2024-10-13 17:25:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 30 -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029010bfd-R0jwPJ.tmp -[2024-10-13 17:25:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-768x576.jpg?simply_static_page=289 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/avatar-min-768x576.jpg?simply_static_page=289 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:103] Filesize: 12568 bytes -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/jpeg -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/avatar-min-768x576.jpg -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029010bfd-R0jwPJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-768x576.jpg -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:36] [class-ss-page.php:119] Checking Content Identical:ff5b1b50da55ca864a90ed96e9a31c1c39cd2574===. Value: FALSE -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/navigation/view.min.js -[2024-10-13 17:25:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 30 -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029056e21-fEpEen.tmp -[2024-10-13 17:25:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/navigation/view.min.js?simply_static_page=290 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/navigation/view.min.js?simply_static_page=290 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:103] Filesize: 3300 bytes -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/navigation/view.min.js -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029056e21-fEpEen.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/view.min.js -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:36] [class-ss-page.php:119] Checking Content Identical:b27ba805d3b9118edfd523f01fd6e84229d52ffd===. Value: FALSE -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/assets/js/openpanel.js -[2024-10-13 17:25:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 30 -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029098e12-60yQTy.tmp -[2024-10-13 17:25:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/assets/js/openpanel.js?simply_static_page=291 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/assets/js/openpanel.js?simply_static_page=291 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:103] Filesize: 264 bytes -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/assets/js/openpanel.js -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029098e12-60yQTy.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/js/openpanel.js -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:36] [class-ss-page.php:119] Checking Content Identical:ee8c6ac229f233f4a0aa42c3a947a5b9e3a0d1fd===. Value: FALSE -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png -[2024-10-13 17:25:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 30 -[2024-10-13 17:25:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0290d9109-vn40Xs.tmp -[2024-10-13 17:25:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png?simply_static_page=292 -[2024-10-13 17:25:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png?simply_static_page=292 -[2024-10-13 17:25:37] [class-ss-url-fetcher.php:103] Filesize: 20864 bytes -[2024-10-13 17:25:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:37] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png -[2024-10-13 17:25:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0290d9109-vn40Xs.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png -[2024-10-13 17:25:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:37] [class-ss-page.php:119] Checking Content Identical:9adf5fdc8eee1562ca42ad8eba33aa317e494c20===. Value: FALSE -[2024-10-13 17:25:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/feed/ -[2024-10-13 17:25:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 30 -[2024-10-13 17:25:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02912b6ae-RbhE2S.tmp -[2024-10-13 17:25:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/feed/?simply_static_page=293 -[2024-10-13 17:25:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/feed/?simply_static_page=293 -[2024-10-13 17:25:39] [class-ss-url-fetcher.php:103] Filesize: 85168 bytes -[2024-10-13 17:25:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:39] [class-ss-url-fetcher.php:233] New filename for static page: feed/index.xml -[2024-10-13 17:25:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02912b6ae-RbhE2S.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.xml -[2024-10-13 17:25:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:39] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:25:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:39] [class-ss-page.php:119] Checking Content Identical:2b83b4e4d9c9df81eea7e9d5ca84ece73ef52764===. Value: FALSE -[2024-10-13 17:25:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/comments/feed/ -[2024-10-13 17:25:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 30 -[2024-10-13 17:25:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029370eed-6EDVQp.tmp -[2024-10-13 17:25:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/comments/feed/?simply_static_page=294 -[2024-10-13 17:25:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/comments/feed/?simply_static_page=294 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:103] Filesize: 765 bytes -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:233] New filename for static page: comments/feed/index.xml -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029370eed-6EDVQp.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/comments/feed/index.xml -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:40] [class-ss-page.php:119] Checking Content Identical:53d7749de9c8359981aa4a7200ee52ea6eee0acf===. Value: FALSE -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/navigation/style.min.css -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02942650e-uLjWau.tmp -[2024-10-13 17:25:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/navigation/style.min.css?simply_static_page=295 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/navigation/style.min.css?simply_static_page=295 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:103] Filesize: 16384 bytes -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/navigation/style.min.css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02942650e-uLjWau.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/style.min.css -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:40] [class-ss-page.php:119] Checking Content Identical:da66b61dcc5204277eb7846b9dce55b2e7d58a42===. Value: FALSE -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/social-links/style.min.css -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02944bfce-snFMsK.tmp -[2024-10-13 17:25:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/social-links/style.min.css?simply_static_page=296 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/social-links/style.min.css?simply_static_page=296 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:103] Filesize: 11600 bytes -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/social-links/style.min.css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02944bfce-snFMsK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/social-links/style.min.css -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:40] [class-ss-page.php:119] Checking Content Identical:d31bfce420030e49e51a5714f07ff2c31b812848===. Value: FALSE -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/cover/style.min.css -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02947fed3-fPqCzK.tmp -[2024-10-13 17:25:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/cover/style.min.css?simply_static_page=297 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/cover/style.min.css?simply_static_page=297 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:103] Filesize: 17950 bytes -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/cover/style.min.css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02947fed3-fPqCzK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/cover/style.min.css -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:40] [class-ss-page.php:119] Checking Content Identical:62c549867e546e9b70dbba51b299d0a884dd5df3===. Value: FALSE -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/style.css -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0294b4d94-6R6aJO.tmp -[2024-10-13 17:25:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/style.css?simply_static_page=298 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/style.css?simply_static_page=298 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:103] Filesize: 9050 bytes -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/style.css -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0294b4d94-6R6aJO.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/style.css -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:40] [class-ss-page.php:119] Checking Content Identical:450b8acb429381f4fdb50afd3a1b9af317b1385b===. Value: FALSE -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/ -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/ -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/xmlrpc.php -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/xmlrpc.php -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/js/dist/interactivity.min.js -[2024-10-13 17:25:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 30 -[2024-10-13 17:25:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0294da2d5-xYsWZo.tmp -[2024-10-13 17:25:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/js/dist/interactivity.min.js?simply_static_page=301 -[2024-10-13 17:25:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/js/dist/interactivity.min.js?simply_static_page=301 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:103] Filesize: 36686 bytes -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/js/dist/interactivity.min.js -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0294da2d5-xYsWZo.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/dist/interactivity.min.js -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:41] [class-ss-page.php:119] Checking Content Identical:39f2fd1115fdb171ea318c2ca240c7fe53df79b4===. Value: FALSE -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png -[2024-10-13 17:25:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 30 -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0295295f6-2K1Fx4.tmp -[2024-10-13 17:25:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png?simply_static_page=302 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png?simply_static_page=302 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:103] Filesize: 1357 bytes -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0295295f6-2K1Fx4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:41] [class-ss-page.php:119] Checking Content Identical:900076750a33c4d1fb886cb2bad80f67d83dd6d0===. Value: FALSE -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png -[2024-10-13 17:25:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 30 -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02955e76c-1kRbeI.tmp -[2024-10-13 17:25:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png?simply_static_page=303 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png?simply_static_page=303 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:103] Filesize: 13763 bytes -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02955e76c-1kRbeI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:41] [class-ss-page.php:119] Checking Content Identical:eb04e9a55ad719f89b480f638d573b2cab4ce9e4===. Value: FALSE -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png -[2024-10-13 17:25:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 30 -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029586cb0-26ep8b.tmp -[2024-10-13 17:25:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png?simply_static_page=304 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png?simply_static_page=304 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:103] Filesize: 12737 bytes -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029586cb0-26ep8b.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:41] [class-ss-page.php:119] Checking Content Identical:e204f1a0a759244f6cd69dbe809b8a26f635d89e===. Value: FALSE -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 -[2024-10-13 17:25:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 30 -[2024-10-13 17:25:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0295c1284-wXK5BC.tmp -[2024-10-13 17:25:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2?simply_static_page=305 -[2024-10-13 17:25:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2?simply_static_page=305 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:103] Filesize: 52144 bytes -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: font/woff2 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0295c1284-wXK5BC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:42] [class-ss-page.php:119] Checking Content Identical:384dd000623891596c50b1036f22510c738d3073===. Value: FALSE -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 -[2024-10-13 17:25:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 30 -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029608955-XLihqo.tmp -[2024-10-13 17:25:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2?simply_static_page=306 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2?simply_static_page=306 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:103] Filesize: 56508 bytes -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: font/woff2 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 -[2024-10-13 17:25:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029608955-XLihqo.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:42] [class-ss-page.php:119] Checking Content Identical:f412f885a4a650be678d4321d30fdc5a76f0c653===. Value: FALSE -[2024-10-13 17:25:42] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 1 of 30 pages/files -[2024-10-13 17:25:42] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:25:43] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:25:43] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:25:44] [class-ss-fetch-urls-task.php:69] Total pages: 76; Pages remaining: 46 -[2024-10-13 17:25:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/standing-up-a-wireguard-vpn/ -[2024-10-13 17:25:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 76 -[2024-10-13 17:25:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0298032c3-N7Z5lu.tmp -[2024-10-13 17:25:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/standing-up-a-wireguard-vpn/?simply_static_page=307 -[2024-10-13 17:25:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/standing-up-a-wireguard-vpn/?simply_static_page=307 -[2024-10-13 17:25:45] [class-ss-url-fetcher.php:103] Filesize: 96532 bytes -[2024-10-13 17:25:45] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:45] [class-ss-url-fetcher.php:233] New filename for static page: standing-up-a-wireguard-vpn/index.html -[2024-10-13 17:25:45] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0298032c3-N7Z5lu.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/index.html -[2024-10-13 17:25:45] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:45] [class-ss-fetch-urls-task.php:159] Adding 36 URLs to the queue -[2024-10-13 17:25:45] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:45] [class-ss-page.php:119] Checking Content Identical:3ef322231a2e5b716b1ad6001c322f936c50996b===. Value: FALSE -[2024-10-13 17:25:45] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ -[2024-10-13 17:25:45] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 76 -[2024-10-13 17:25:45] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:45] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02996fbfb-nwxyV6.tmp -[2024-10-13 17:25:45] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/?simply_static_page=308 -[2024-10-13 17:25:45] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/?simply_static_page=308 -[2024-10-13 17:25:46] [class-ss-url-fetcher.php:103] Filesize: 83216 bytes -[2024-10-13 17:25:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:46] [class-ss-url-fetcher.php:233] New filename for static page: hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html -[2024-10-13 17:25:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02996fbfb-nwxyV6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html -[2024-10-13 17:25:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:46] [class-ss-fetch-urls-task.php:159] Adding 37 URLs to the queue -[2024-10-13 17:25:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:46] [class-ss-page.php:119] Checking Content Identical:5dd52506b44e418fbbf2033d36ae79652e370de2===. Value: FALSE -[2024-10-13 17:25:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/debugging-running-nginx-config/ -[2024-10-13 17:25:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 76 -[2024-10-13 17:25:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029abc7cb-qr57iZ.tmp -[2024-10-13 17:25:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/debugging-running-nginx-config/?simply_static_page=309 -[2024-10-13 17:25:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/debugging-running-nginx-config/?simply_static_page=309 -[2024-10-13 17:25:47] [class-ss-url-fetcher.php:103] Filesize: 86392 bytes -[2024-10-13 17:25:47] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:47] [class-ss-url-fetcher.php:233] New filename for static page: debugging-running-nginx-config/index.html -[2024-10-13 17:25:47] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029abc7cb-qr57iZ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/index.html -[2024-10-13 17:25:47] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:47] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:25:47] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:47] [class-ss-page.php:119] Checking Content Identical:093869fc652a9077df248a35ee25bd912c5261d5===. Value: FALSE -[2024-10-13 17:25:47] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/ -[2024-10-13 17:25:47] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 76 -[2024-10-13 17:25:47] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:47] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029bb776c-8WK1FY.tmp -[2024-10-13 17:25:47] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/fun-with-bots-ssh-tarpitting/?simply_static_page=310 -[2024-10-13 17:25:47] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/?simply_static_page=310 -[2024-10-13 17:25:49] [class-ss-url-fetcher.php:103] Filesize: 96548 bytes -[2024-10-13 17:25:49] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:49] [class-ss-url-fetcher.php:233] New filename for static page: fun-with-bots-ssh-tarpitting/index.html -[2024-10-13 17:25:49] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029bb776c-8WK1FY.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/index.html -[2024-10-13 17:25:49] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:49] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:25:49] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:49] [class-ss-page.php:119] Checking Content Identical:8780f5c7f49594c1612d18ae951bfdd5ef37b98e===. Value: FALSE -[2024-10-13 17:25:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/ -[2024-10-13 17:25:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 76 -[2024-10-13 17:25:49] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:49] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029d773e7-YaqJCT.tmp -[2024-10-13 17:25:49] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/?simply_static_page=311 -[2024-10-13 17:25:49] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/?simply_static_page=311 -[2024-10-13 17:25:50] [class-ss-url-fetcher.php:103] Filesize: 84814 bytes -[2024-10-13 17:25:50] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:50] [class-ss-url-fetcher.php:233] New filename for static page: traefik-3-0-service-discovery-in-docker-swarm-mode/index.html -[2024-10-13 17:25:50] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029d773e7-YaqJCT.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/index.html -[2024-10-13 17:25:50] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:50] [class-ss-fetch-urls-task.php:159] Adding 36 URLs to the queue -[2024-10-13 17:25:50] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:50] [class-ss-page.php:119] Checking Content Identical:9d83f6a74a47d1f53d5da5b721cd61e49cfc1beb===. Value: FALSE -[2024-10-13 17:25:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/stop-all-running-containers-with-docker/ -[2024-10-13 17:25:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 76 -[2024-10-13 17:25:50] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:50] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029e72354-YjCd3I.tmp -[2024-10-13 17:25:50] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/stop-all-running-containers-with-docker/?simply_static_page=312 -[2024-10-13 17:25:50] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/stop-all-running-containers-with-docker/?simply_static_page=312 -[2024-10-13 17:25:51] [class-ss-url-fetcher.php:103] Filesize: 79173 bytes -[2024-10-13 17:25:51] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:51] [class-ss-url-fetcher.php:233] New filename for static page: stop-all-running-containers-with-docker/index.html -[2024-10-13 17:25:51] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029e72354-YjCd3I.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/index.html -[2024-10-13 17:25:51] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:51] [class-ss-fetch-urls-task.php:159] Adding 37 URLs to the queue -[2024-10-13 17:25:51] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:51] [class-ss-page.php:119] Checking Content Identical:321910d797eeffe672022e5ab1e1fa5e4871738f===. Value: FALSE -[2024-10-13 17:25:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/ -[2024-10-13 17:25:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 76 -[2024-10-13 17:25:51] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:51] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c029fd23d3-fj6cnh.tmp -[2024-10-13 17:25:51] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/?simply_static_page=313 -[2024-10-13 17:25:51] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/?simply_static_page=313 -[2024-10-13 17:25:52] [class-ss-url-fetcher.php:103] Filesize: 87252 bytes -[2024-10-13 17:25:52] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:52] [class-ss-url-fetcher.php:233] New filename for static page: automating-ci-cd-with-teamcity-ansible/index.html -[2024-10-13 17:25:52] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c029fd23d3-fj6cnh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/index.html -[2024-10-13 17:25:52] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:52] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:25:52] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:52] [class-ss-page.php:119] Checking Content Identical:bef3a248ae11f53856b6175fe4d910a8766f54b2===. Value: FALSE -[2024-10-13 17:25:52] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/ -[2024-10-13 17:25:52] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 76 -[2024-10-13 17:25:52] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:52] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a0ea5c9-B5wU7C.tmp -[2024-10-13 17:25:52] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/self-hosted-package-registries-with-gitea/?simply_static_page=314 -[2024-10-13 17:25:52] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/?simply_static_page=314 -[2024-10-13 17:25:53] [class-ss-url-fetcher.php:103] Filesize: 81709 bytes -[2024-10-13 17:25:53] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:53] [class-ss-url-fetcher.php:233] New filename for static page: self-hosted-package-registries-with-gitea/index.html -[2024-10-13 17:25:53] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a0ea5c9-B5wU7C.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/index.html -[2024-10-13 17:25:53] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:53] [class-ss-fetch-urls-task.php:159] Adding 43 URLs to the queue -[2024-10-13 17:25:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:54] [class-ss-page.php:119] Checking Content Identical:0cd375c68986283db089a96a4e1b7a7104cd09d7===. Value: FALSE -[2024-10-13 17:25:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/ -[2024-10-13 17:25:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 76 -[2024-10-13 17:25:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a20b0c0-kgI5Ei.tmp -[2024-10-13 17:25:54] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/?simply_static_page=315 -[2024-10-13 17:25:54] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/?simply_static_page=315 -[2024-10-13 17:25:54] [class-ss-url-fetcher.php:103] Filesize: 84420 bytes -[2024-10-13 17:25:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:54] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html -[2024-10-13 17:25:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a20b0c0-kgI5Ei.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html -[2024-10-13 17:25:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:55] [class-ss-fetch-urls-task.php:159] Adding 36 URLs to the queue -[2024-10-13 17:25:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:55] [class-ss-page.php:119] Checking Content Identical:3eee01373dcb0f3ed8313608759caf8d4519e26e===. Value: FALSE -[2024-10-13 17:25:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/ -[2024-10-13 17:25:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 76 -[2024-10-13 17:25:55] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:55] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a32a760-b4PbDg.tmp -[2024-10-13 17:25:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/?simply_static_page=316 -[2024-10-13 17:25:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/?simply_static_page=316 -[2024-10-13 17:25:56] [class-ss-url-fetcher.php:103] Filesize: 84784 bytes -[2024-10-13 17:25:56] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:56] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html -[2024-10-13 17:25:56] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a32a760-b4PbDg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:56] [class-ss-page.php:119] Checking Content Identical:df1552228f77ea0fc1083fa02abc46151ff90eb9===. Value: FALSE -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/pages/452 -[2024-10-13 17:25:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 76 -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/pages/452 -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/oembed/1.0/embed -[2024-10-13 17:25:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 76 -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/oembed/1.0/embed -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hoots-wings/ -[2024-10-13 17:25:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 76 -[2024-10-13 17:25:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a44d2c7-5v7CIt.tmp -[2024-10-13 17:25:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hoots-wings/?simply_static_page=319 -[2024-10-13 17:25:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hoots-wings/?simply_static_page=319 -[2024-10-13 17:25:57] [class-ss-url-fetcher.php:103] Filesize: 83662 bytes -[2024-10-13 17:25:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:57] [class-ss-url-fetcher.php:233] New filename for static page: hoots-wings/index.html -[2024-10-13 17:25:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a44d2c7-5v7CIt.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/index.html -[2024-10-13 17:25:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:57] [class-ss-fetch-urls-task.php:159] Adding 55 URLs to the queue -[2024-10-13 17:25:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:57] [class-ss-page.php:119] Checking Content Identical:8e07c09d2cc3007ad83bd51f016199dc4c9a2ada===. Value: FALSE -[2024-10-13 17:25:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hilger-grading-portal/ -[2024-10-13 17:25:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 76 -[2024-10-13 17:25:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a5885de-u54Z07.tmp -[2024-10-13 17:25:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hilger-grading-portal/?simply_static_page=320 -[2024-10-13 17:25:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hilger-grading-portal/?simply_static_page=320 -[2024-10-13 17:25:58] [class-ss-url-fetcher.php:103] Filesize: 84535 bytes -[2024-10-13 17:25:58] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:25:58] [class-ss-url-fetcher.php:233] New filename for static page: hilger-grading-portal/index.html -[2024-10-13 17:25:58] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a5885de-u54Z07.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/index.html -[2024-10-13 17:25:58] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:58] [class-ss-fetch-urls-task.php:159] Adding 54 URLs to the queue -[2024-10-13 17:25:58] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:58] [class-ss-page.php:119] Checking Content Identical:764139176ec66c39febac8e681d4a05653e21b6f===. Value: FALSE -[2024-10-13 17:25:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min.webp -[2024-10-13 17:25:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 76 -[2024-10-13 17:25:58] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:58] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a6dbc72-g7LKjl.tmp -[2024-10-13 17:25:58] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min.webp?simply_static_page=321 -[2024-10-13 17:25:58] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min.webp?simply_static_page=321 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:103] Filesize: 301528 bytes -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min.webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a6dbc72-g7LKjl.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min.webp -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:59] [class-ss-page.php:119] Checking Content Identical:7960d0918693e5e76fb6c4a37605d4da566ae769===. Value: FALSE -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp -[2024-10-13 17:25:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 76 -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a720ef7-CWnFp5.tmp -[2024-10-13 17:25:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp?simply_static_page=322 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp?simply_static_page=322 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:103] Filesize: 36442 bytes -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-300x153.webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a720ef7-CWnFp5.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:59] [class-ss-page.php:119] Checking Content Identical:53ca89eab5081594f77d5295323366378a79f0f4===. Value: FALSE -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp -[2024-10-13 17:25:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 76 -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a76992a-SDa2Op.tmp -[2024-10-13 17:25:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp?simply_static_page=323 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp?simply_static_page=323 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:103] Filesize: 300644 bytes -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a76992a-SDa2Op.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:25:59] [class-ss-page.php:119] Checking Content Identical:56115651ac76d3e539c76900adab29b1e405227d===. Value: FALSE -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp -[2024-10-13 17:25:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 76 -[2024-10-13 17:25:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a7a17c2-cNs45q.tmp -[2024-10-13 17:25:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp?simply_static_page=324 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp?simply_static_page=324 -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:103] Filesize: 180536 bytes -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-768x391.webp -[2024-10-13 17:25:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a7a17c2-cNs45q.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:00] [class-ss-page.php:119] Checking Content Identical:90881f0ad55b51a1603eb5c8e0351e0a8da3f36e===. Value: FALSE -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp -[2024-10-13 17:26:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 76 -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a805fa7-QzxxdU.tmp -[2024-10-13 17:26:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp?simply_static_page=325 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp?simply_static_page=325 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:103] Filesize: 653846 bytes -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a805fa7-QzxxdU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:00] [class-ss-page.php:119] Checking Content Identical:68cdaa02310b4c3bc43f1daffabdc75ea6d42ac1===. Value: FALSE -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home.webp -[2024-10-13 17:26:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 76 -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a85596d-xIkcly.tmp -[2024-10-13 17:26:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home.webp?simply_static_page=326 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home.webp?simply_static_page=326 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:103] Filesize: 42748 bytes -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home.webp -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a85596d-xIkcly.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home.webp -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:00] [class-ss-page.php:119] Checking Content Identical:1988106080c31c1c28c91a8ba9858215f1ab1440===. Value: FALSE -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp -[2024-10-13 17:26:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 76 -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a89de78-of3Oow.tmp -[2024-10-13 17:26:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp?simply_static_page=327 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp?simply_static_page=327 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:103] Filesize: 5256 bytes -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-300x150.webp -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a89de78-of3Oow.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:00] [class-ss-page.php:119] Checking Content Identical:b29bd6891a6fb625b7a41810980f80802f83fe42===. Value: FALSE -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp -[2024-10-13 17:26:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 76 -[2024-10-13 17:26:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a8e00f2-PZdW0Y.tmp -[2024-10-13 17:26:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp?simply_static_page=328 -[2024-10-13 17:26:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp?simply_static_page=328 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:103] Filesize: 34090 bytes -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a8e00f2-PZdW0Y.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:01] [class-ss-page.php:119] Checking Content Identical:0c9252641263ec877fa55fe8a7444b4d8823874d===. Value: FALSE -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp -[2024-10-13 17:26:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 76 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a9343c0-oSsD09.tmp -[2024-10-13 17:26:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp?simply_static_page=329 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp?simply_static_page=329 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:103] Filesize: 21532 bytes -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-768x385.webp -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a9343c0-oSsD09.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:01] [class-ss-page.php:119] Checking Content Identical:3c2958da28d3a3d57e0d8c94e7b27f64bb741fd0===. Value: FALSE -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp -[2024-10-13 17:26:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 76 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a95dc08-PjJ5GB.tmp -[2024-10-13 17:26:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp?simply_static_page=330 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp?simply_static_page=330 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:103] Filesize: 65742 bytes -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a95dc08-PjJ5GB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:01] [class-ss-page.php:119] Checking Content Identical:e4d9c8d382e77c3330b885c00e7520c44becc880===. Value: FALSE -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/pages/494 -[2024-10-13 17:26:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 76 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/pages/494 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/pages/491 -[2024-10-13 17:26:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 76 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/pages/491 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image-1024x320.png -[2024-10-13 17:26:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 76 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a990749-vXmhgA.tmp -[2024-10-13 17:26:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image-1024x320.png?simply_static_page=333 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image-1024x320.png?simply_static_page=333 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:103] Filesize: 72620 bytes -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image-1024x320.png -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a990749-vXmhgA.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-1024x320.png -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:01] [class-ss-page.php:119] Checking Content Identical:e4a5a010cfaa36a78d6f98ee9383812b991547ac===. Value: FALSE -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image-300x94.png -[2024-10-13 17:26:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 76 -[2024-10-13 17:26:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02a9db04a-zaOOf9.tmp -[2024-10-13 17:26:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image-300x94.png?simply_static_page=334 -[2024-10-13 17:26:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image-300x94.png?simply_static_page=334 -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:103] Filesize: 11468 bytes -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image-300x94.png -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02a9db04a-zaOOf9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-300x94.png -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:02] [class-ss-page.php:119] Checking Content Identical:2740f372cd2e8a87a32ea27dc98ae872c34647d4===. Value: FALSE -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image-768x240.png -[2024-10-13 17:26:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 76 -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02aa22ee3-QXWBD6.tmp -[2024-10-13 17:26:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image-768x240.png?simply_static_page=335 -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image-768x240.png?simply_static_page=335 -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:103] Filesize: 47793 bytes -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image-768x240.png -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02aa22ee3-QXWBD6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-768x240.png -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:02] [class-ss-page.php:119] Checking Content Identical:0daadd873f9aad029408cbf6cbbeec618be9f6a5===. Value: FALSE -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/09/image.png -[2024-10-13 17:26:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 76 -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02aa6db09-wFWImh.tmp -[2024-10-13 17:26:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/09/image.png?simply_static_page=336 -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/09/image.png?simply_static_page=336 -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:103] Filesize: 106600 bytes -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/09/image.png -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02aa6db09-wFWImh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image.png -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:02] [class-ss-page.php:119] Checking Content Identical:109d56f88e929cc9188dd267793f362f7d65622c===. Value: FALSE -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/ -[2024-10-13 17:26:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 76 -[2024-10-13 17:26:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02aac2547-bxNCzG.tmp -[2024-10-13 17:26:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/?simply_static_page=337 -[2024-10-13 17:26:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/?simply_static_page=337 -[2024-10-13 17:26:03] [class-ss-url-fetcher.php:103] Filesize: 80752 bytes -[2024-10-13 17:26:03] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:03] [class-ss-url-fetcher.php:233] New filename for static page: sftp-server-setup-for-daily-inventory-file-transfers/index.html -[2024-10-13 17:26:03] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02aac2547-bxNCzG.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/index.html -[2024-10-13 17:26:03] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:03] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:26:03] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:03] [class-ss-page.php:119] Checking Content Identical:d10ac85d46ad7062ef5359aa211cdc4b5a23418f===. Value: FALSE -[2024-10-13 17:26:03] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/05/image.png -[2024-10-13 17:26:03] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 76 -[2024-10-13 17:26:03] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:03] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02abb46da-ESkTi9.tmp -[2024-10-13 17:26:03] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/05/image.png?simply_static_page=338 -[2024-10-13 17:26:03] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/05/image.png?simply_static_page=338 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:103] Filesize: 24565 bytes -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/05/image.png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02abb46da-ESkTi9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image.png -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:04] [class-ss-page.php:119] Checking Content Identical:e427a176015408bd45825cc2466bbfb7c9313600===. Value: FALSE -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/05/image-300x86.png -[2024-10-13 17:26:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 76 -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ac09cae-qImYmV.tmp -[2024-10-13 17:26:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/05/image-300x86.png?simply_static_page=339 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/05/image-300x86.png?simply_static_page=339 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:103] Filesize: 13574 bytes -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/05/image-300x86.png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ac09cae-qImYmV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image-300x86.png -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:04] [class-ss-page.php:119] Checking Content Identical:bf5b41bc94ba3976437d8610da02bc9dc0b5ddc9===. Value: FALSE -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1024x313.png -[2024-10-13 17:26:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 76 -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ac4f71b-LR5qzK.tmp -[2024-10-13 17:26:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-1024x313.png?simply_static_page=340 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1024x313.png?simply_static_page=340 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:103] Filesize: 30106 bytes -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-1024x313.png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ac4f71b-LR5qzK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1024x313.png -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:04] [class-ss-page.php:119] Checking Content Identical:c0eb3dc0c140af4e140bb19bd0a9880fe6ea10df===. Value: FALSE -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-300x92.png -[2024-10-13 17:26:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 76 -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ac96aa6-a3JbKd.tmp -[2024-10-13 17:26:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-300x92.png?simply_static_page=341 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-300x92.png?simply_static_page=341 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:103] Filesize: 7263 bytes -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-300x92.png -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ac96aa6-a3JbKd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-300x92.png -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:04] [class-ss-page.php:119] Checking Content Identical:a99d34929aecc771eeb0f6d924c8230445abf86b===. Value: FALSE -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-768x235.png -[2024-10-13 17:26:04] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 76 -[2024-10-13 17:26:04] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02acb7a3b-xckgwM.tmp -[2024-10-13 17:26:04] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-768x235.png?simply_static_page=342 -[2024-10-13 17:26:04] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-768x235.png?simply_static_page=342 -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:103] Filesize: 21663 bytes -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-768x235.png -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02acb7a3b-xckgwM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-768x235.png -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:05] [class-ss-page.php:119] Checking Content Identical:f6526930286cb774c8f656e29a0b41c8ad9fab11===. Value: FALSE -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1536x469.png -[2024-10-13 17:26:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 76 -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ad09bfb-KXLWKg.tmp -[2024-10-13 17:26:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6-1536x469.png?simply_static_page=343 -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6-1536x469.png?simply_static_page=343 -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:103] Filesize: 47460 bytes -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6-1536x469.png -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ad09bfb-KXLWKg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1536x469.png -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:05] [class-ss-page.php:119] Checking Content Identical:80270449830cc2634298f3ec691ed975fb93fbc2===. Value: FALSE -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6.png -[2024-10-13 17:26:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 76 -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ad5443b-TxJjuq.tmp -[2024-10-13 17:26:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-6.png?simply_static_page=344 -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-6.png?simply_static_page=344 -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:103] Filesize: 35465 bytes -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-6.png -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ad5443b-TxJjuq.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6.png -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:05] [class-ss-page.php:119] Checking Content Identical:15ff7c8b84ef88575f4a317819b3511b54edfac9===. Value: FALSE -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1024x437.png -[2024-10-13 17:26:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 76 -[2024-10-13 17:26:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02adbf67b-MzhUkU.tmp -[2024-10-13 17:26:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-1024x437.png?simply_static_page=345 -[2024-10-13 17:26:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1024x437.png?simply_static_page=345 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:103] Filesize: 60320 bytes -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-1024x437.png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02adbf67b-MzhUkU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1024x437.png -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:06] [class-ss-page.php:119] Checking Content Identical:b3450b8a2518754851f8cbdf1ef972b46a043434===. Value: FALSE -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-300x128.png -[2024-10-13 17:26:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 76 -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ae162f9-jiiBSb.tmp -[2024-10-13 17:26:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-300x128.png?simply_static_page=346 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-300x128.png?simply_static_page=346 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:103] Filesize: 8428 bytes -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-300x128.png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ae162f9-jiiBSb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-300x128.png -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:06] [class-ss-page.php:119] Checking Content Identical:2b2a8dd00349b576a3dc768f4cc9504468b0b9cd===. Value: FALSE -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-768x328.png -[2024-10-13 17:26:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 76 -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ae55b09-yRN1bA.tmp -[2024-10-13 17:26:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-768x328.png?simply_static_page=347 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-768x328.png?simply_static_page=347 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:103] Filesize: 39096 bytes -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-768x328.png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ae55b09-yRN1bA.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-768x328.png -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:06] [class-ss-page.php:119] Checking Content Identical:5624e260c13827070a8a78fe02cbea4bf5638dca===. Value: FALSE -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1536x655.png -[2024-10-13 17:26:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 76 -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02aea0b2c-TQt1un.tmp -[2024-10-13 17:26:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7-1536x655.png?simply_static_page=348 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7-1536x655.png?simply_static_page=348 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:103] Filesize: 107117 bytes -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7-1536x655.png -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02aea0b2c-TQt1un.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1536x655.png -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:06] [class-ss-page.php:119] Checking Content Identical:c4247b88afe64f5ecf3be25769d8dc6e2f5a3f75===. Value: FALSE -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7.png -[2024-10-13 17:26:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 76 -[2024-10-13 17:26:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02aed1ff8-ZmEErz.tmp -[2024-10-13 17:26:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-7.png?simply_static_page=349 -[2024-10-13 17:26:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-7.png?simply_static_page=349 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:103] Filesize: 85037 bytes -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-7.png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02aed1ff8-ZmEErz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7.png -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:07] [class-ss-page.php:119] Checking Content Identical:feeed01744eb02a37b5e20d041fa592069bf3687===. Value: FALSE -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9.png -[2024-10-13 17:26:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 76 -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02af2e6a3-9nz8QQ.tmp -[2024-10-13 17:26:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-9.png?simply_static_page=350 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9.png?simply_static_page=350 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:103] Filesize: 61632 bytes -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-9.png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02af2e6a3-9nz8QQ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9.png -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:07] [class-ss-page.php:119] Checking Content Identical:de8432ed173fffae45b04731c1e9a37bf324dd5e===. Value: FALSE -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-300x228.png -[2024-10-13 17:26:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 76 -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02af60273-KuIGbF.tmp -[2024-10-13 17:26:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-9-300x228.png?simply_static_page=351 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-300x228.png?simply_static_page=351 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:103] Filesize: 15320 bytes -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-9-300x228.png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02af60273-KuIGbF.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-300x228.png -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:07] [class-ss-page.php:119] Checking Content Identical:db8765f86009a9fc65379a008357f935e4388112===. Value: FALSE -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-768x583.png -[2024-10-13 17:26:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 76 -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02af88439-vUJWi1.tmp -[2024-10-13 17:26:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/image-9-768x583.png?simply_static_page=352 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/image-9-768x583.png?simply_static_page=352 -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:103] Filesize: 64950 bytes -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/image-9-768x583.png -[2024-10-13 17:26:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02af88439-vUJWi1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-768x583.png -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:07] [class-ss-page.php:119] Checking Content Identical:158ff6973bee8c5096fa01c99f0148159268d4cc===. Value: FALSE -[2024-10-13 17:26:07] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 30 of 76 pages/files -[2024-10-13 17:26:07] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:26:08] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:26:08] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:69] Total pages: 174; Pages remaining: 98 -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/l/email-protection -[2024-10-13 17:26:08] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 174 -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b07927a-auyaVK.tmp -[2024-10-13 17:26:08] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/l/email-protection?simply_static_page=353 -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/l/email-protection?simply_static_page=353 -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:103] Filesize: 4690 bytes -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/l/email-protection/index.html -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b07927a-auyaVK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/l/email-protection/index.html -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:159] Adding 1 URLs to the queue -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:08] [class-ss-page.php:119] Checking Content Identical:cf35126a6c92e1f0902038511c9f1b62bfe6a786===. Value: FALSE -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/automation/ -[2024-10-13 17:26:08] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 174 -[2024-10-13 17:26:08] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b0a721d-5ib4UC.tmp -[2024-10-13 17:26:08] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/automation/?simply_static_page=354 -[2024-10-13 17:26:08] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/automation/?simply_static_page=354 -[2024-10-13 17:26:09] [class-ss-url-fetcher.php:103] Filesize: 71963 bytes -[2024-10-13 17:26:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:09] [class-ss-url-fetcher.php:233] New filename for static page: category/automation/index.html -[2024-10-13 17:26:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b0a721d-5ib4UC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/index.html -[2024-10-13 17:26:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:09] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:26:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:09] [class-ss-page.php:119] Checking Content Identical:f20d873cba2685a3ade63a2c1fd85946eaed7a36===. Value: FALSE -[2024-10-13 17:26:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/iac/ -[2024-10-13 17:26:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 174 -[2024-10-13 17:26:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b198f85-Iso1AI.tmp -[2024-10-13 17:26:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/iac/?simply_static_page=355 -[2024-10-13 17:26:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/iac/?simply_static_page=355 -[2024-10-13 17:26:10] [class-ss-url-fetcher.php:103] Filesize: 66294 bytes -[2024-10-13 17:26:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:10] [class-ss-url-fetcher.php:233] New filename for static page: category/iac/index.html -[2024-10-13 17:26:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b198f85-Iso1AI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/index.html -[2024-10-13 17:26:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:10] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:26:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:10] [class-ss-page.php:119] Checking Content Identical:4bd7976d1b6bca080a93ba0f610865a69b56da62===. Value: FALSE -[2024-10-13 17:26:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/open-source/ -[2024-10-13 17:26:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 174 -[2024-10-13 17:26:10] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:10] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b292321-eVAdVU.tmp -[2024-10-13 17:26:10] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/open-source/?simply_static_page=356 -[2024-10-13 17:26:10] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/open-source/?simply_static_page=356 -[2024-10-13 17:26:11] [class-ss-url-fetcher.php:103] Filesize: 68188 bytes -[2024-10-13 17:26:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:11] [class-ss-url-fetcher.php:233] New filename for static page: category/open-source/index.html -[2024-10-13 17:26:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b292321-eVAdVU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/index.html -[2024-10-13 17:26:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:11] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:26:11] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:11] [class-ss-page.php:119] Checking Content Identical:86e5d7b52001fcbaf056128e6b91e87a9ea93802===. Value: FALSE -[2024-10-13 17:26:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/security/ -[2024-10-13 17:26:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 174 -[2024-10-13 17:26:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b37de80-GjEdoO.tmp -[2024-10-13 17:26:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/security/?simply_static_page=357 -[2024-10-13 17:26:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/security/?simply_static_page=357 -[2024-10-13 17:26:12] [class-ss-url-fetcher.php:103] Filesize: 69138 bytes -[2024-10-13 17:26:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:12] [class-ss-url-fetcher.php:233] New filename for static page: category/security/index.html -[2024-10-13 17:26:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b37de80-GjEdoO.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/index.html -[2024-10-13 17:26:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:12] [class-ss-fetch-urls-task.php:159] Adding 26 URLs to the queue -[2024-10-13 17:26:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:12] [class-ss-page.php:119] Checking Content Identical:2db78b7c7b8c74a40132113225245077fe31660b===. Value: FALSE -[2024-10-13 17:26:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/self-hosted/ -[2024-10-13 17:26:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 174 -[2024-10-13 17:26:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b463892-853lEQ.tmp -[2024-10-13 17:26:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/self-hosted/?simply_static_page=358 -[2024-10-13 17:26:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/self-hosted/?simply_static_page=358 -[2024-10-13 17:26:13] [class-ss-url-fetcher.php:103] Filesize: 70616 bytes -[2024-10-13 17:26:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:13] [class-ss-url-fetcher.php:233] New filename for static page: category/self-hosted/index.html -[2024-10-13 17:26:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b463892-853lEQ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/index.html -[2024-10-13 17:26:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:13] [class-ss-fetch-urls-task.php:159] Adding 29 URLs to the queue -[2024-10-13 17:26:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:13] [class-ss-page.php:119] Checking Content Identical:869eeae41eba6f170d51fdff47d810f9f9204dd0===. Value: FALSE -[2024-10-13 17:26:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/software-engineering/ -[2024-10-13 17:26:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 174 -[2024-10-13 17:26:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b55d98b-Xa3YFb.tmp -[2024-10-13 17:26:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/software-engineering/?simply_static_page=359 -[2024-10-13 17:26:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/software-engineering/?simply_static_page=359 -[2024-10-13 17:26:14] [class-ss-url-fetcher.php:103] Filesize: 76649 bytes -[2024-10-13 17:26:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:14] [class-ss-url-fetcher.php:233] New filename for static page: category/software-engineering/index.html -[2024-10-13 17:26:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b55d98b-Xa3YFb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/index.html -[2024-10-13 17:26:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:14] [class-ss-fetch-urls-task.php:159] Adding 47 URLs to the queue -[2024-10-13 17:26:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:14] [class-ss-page.php:119] Checking Content Identical:3b719b6d4ab0aff75395631a34a0e27a3c6e3509===. Value: FALSE -[2024-10-13 17:26:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ssh/ -[2024-10-13 17:26:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 174 -[2024-10-13 17:26:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b654381-Uur3Kt.tmp -[2024-10-13 17:26:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ssh/?simply_static_page=360 -[2024-10-13 17:26:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ssh/?simply_static_page=360 -[2024-10-13 17:26:15] [class-ss-url-fetcher.php:103] Filesize: 67196 bytes -[2024-10-13 17:26:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:15] [class-ss-url-fetcher.php:233] New filename for static page: category/ssh/index.html -[2024-10-13 17:26:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b654381-Uur3Kt.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/index.html -[2024-10-13 17:26:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:15] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:26:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:15] [class-ss-page.php:119] Checking Content Identical:e02b43919994ac1e3c9fa56df1dc132c0f5096f5===. Value: FALSE -[2024-10-13 17:26:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/blog-post/ -[2024-10-13 17:26:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 174 -[2024-10-13 17:26:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b7411cf-D1G6xg.tmp -[2024-10-13 17:26:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/blog-post/?simply_static_page=361 -[2024-10-13 17:26:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/blog-post/?simply_static_page=361 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:103] Filesize: 77124 bytes -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:233] New filename for static page: tag/blog-post/index.html -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b7411cf-D1G6xg.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/index.html -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:159] Adding 41 URLs to the queue -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:16] [class-ss-page.php:119] Checking Content Identical:a185e2fd0a777791c9ef12e5ae2c9f04b78d5587===. Value: FALSE -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js -[2024-10-13 17:26:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 174 -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b842970-BLPto0.tmp -[2024-10-13 17:26:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js?simply_static_page=362 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js?simply_static_page=362 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:103] Filesize: 1239 bytes -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/javascript -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b842970-BLPto0.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:16] [class-ss-page.php:119] Checking Content Identical:a8af90d7482e1e99d03de6bf88fed2315c5dd728===. Value: FALSE -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/js/comment-reply.min.js -[2024-10-13 17:26:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 174 -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b85dc43-Lm75h8.tmp -[2024-10-13 17:26:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/js/comment-reply.min.js?simply_static_page=363 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/js/comment-reply.min.js?simply_static_page=363 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:103] Filesize: 2981 bytes -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/javascript -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/js/comment-reply.min.js -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b85dc43-Lm75h8.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/comment-reply.min.js -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:16] [class-ss-page.php:119] Checking Content Identical:db36a77f6aaa2063bfbec02c2c0e967438c5a245===. Value: FALSE -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/standing-up-a-wireguard-vpn/feed/ -[2024-10-13 17:26:16] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 174 -[2024-10-13 17:26:16] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b8a1d9a-RozkMn.tmp -[2024-10-13 17:26:16] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/standing-up-a-wireguard-vpn/feed/?simply_static_page=364 -[2024-10-13 17:26:16] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/standing-up-a-wireguard-vpn/feed/?simply_static_page=364 -[2024-10-13 17:26:17] [class-ss-url-fetcher.php:103] Filesize: 830 bytes -[2024-10-13 17:26:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:17] [class-ss-url-fetcher.php:233] New filename for static page: standing-up-a-wireguard-vpn/feed/index.xml -[2024-10-13 17:26:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b8a1d9a-RozkMn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/feed/index.xml -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:17] [class-ss-page.php:119] Checking Content Identical:867a052908378d333550e126d023ce4825c4a748===. Value: FALSE -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/619 -[2024-10-13 17:26:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 174 -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/619 -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/cloudflare/ -[2024-10-13 17:26:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 174 -[2024-10-13 17:26:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02b94bd4e-gw2rR4.tmp -[2024-10-13 17:26:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/cloudflare/?simply_static_page=366 -[2024-10-13 17:26:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/cloudflare/?simply_static_page=366 -[2024-10-13 17:26:18] [class-ss-url-fetcher.php:103] Filesize: 70048 bytes -[2024-10-13 17:26:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:18] [class-ss-url-fetcher.php:233] New filename for static page: category/cloudflare/index.html -[2024-10-13 17:26:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02b94bd4e-gw2rR4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/index.html -[2024-10-13 17:26:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:18] [class-ss-fetch-urls-task.php:159] Adding 27 URLs to the queue -[2024-10-13 17:26:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:18] [class-ss-page.php:119] Checking Content Identical:0eea549ea6281683fa7435cd5e5561fed4a06273===. Value: FALSE -[2024-10-13 17:26:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/networking/ -[2024-10-13 17:26:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 174 -[2024-10-13 17:26:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ba4630f-XLTheW.tmp -[2024-10-13 17:26:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/networking/?simply_static_page=367 -[2024-10-13 17:26:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/networking/?simply_static_page=367 -[2024-10-13 17:26:19] [class-ss-url-fetcher.php:103] Filesize: 68769 bytes -[2024-10-13 17:26:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:19] [class-ss-url-fetcher.php:233] New filename for static page: category/networking/index.html -[2024-10-13 17:26:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ba4630f-XLTheW.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/index.html -[2024-10-13 17:26:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:19] [class-ss-fetch-urls-task.php:159] Adding 27 URLs to the queue -[2024-10-13 17:26:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:19] [class-ss-page.php:119] Checking Content Identical:1297998ca1b585555cad328e897ed34af5249ac6===. Value: FALSE -[2024-10-13 17:26:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/ -[2024-10-13 17:26:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 174 -[2024-10-13 17:26:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02bb546ef-kGGJN1.tmp -[2024-10-13 17:26:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/?simply_static_page=368 -[2024-10-13 17:26:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/?simply_static_page=368 -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:103] Filesize: 947 bytes -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:233] New filename for static page: hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02bb546ef-kGGJN1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:20] [class-ss-page.php:119] Checking Content Identical:7daa91c2cfc48b9c12a5723a26ee3dc865f3043a===. Value: FALSE -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-includes/blocks/image/style.min.css -[2024-10-13 17:26:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 174 -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02bc40d87-6t9xWn.tmp -[2024-10-13 17:26:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-includes/blocks/image/style.min.css?simply_static_page=369 -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-includes/blocks/image/style.min.css?simply_static_page=369 -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:103] Filesize: 6358 bytes -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:233] New filename for static page: wp-includes/blocks/image/style.min.css -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02bc40d87-6t9xWn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/image/style.min.css -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:20] [class-ss-page.php:119] Checking Content Identical:54a1fef5278908a5bbd901dea250139c6d992b6f===. Value: FALSE -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/607 -[2024-10-13 17:26:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 174 -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/607 -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/docker/ -[2024-10-13 17:26:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 174 -[2024-10-13 17:26:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02bc86f5a-RbHfO7.tmp -[2024-10-13 17:26:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/docker/?simply_static_page=371 -[2024-10-13 17:26:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/docker/?simply_static_page=371 -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:103] Filesize: 73490 bytes -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:233] New filename for static page: category/docker/index.html -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02bc86f5a-RbHfO7.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/index.html -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:159] Adding 37 URLs to the queue -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:21] [class-ss-page.php:119] Checking Content Identical:f04fd1f85ee0caf232653a44ba9ad38ad3c167db===. Value: FALSE -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx.png -[2024-10-13 17:26:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 174 -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02bdd34cd-CKihtA.tmp -[2024-10-13 17:26:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/07/nginx.png?simply_static_page=372 -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx.png?simply_static_page=372 -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:103] Filesize: 2103 bytes -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/07/nginx.png -[2024-10-13 17:26:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02bdd34cd-CKihtA.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx.png -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:21] [class-ss-page.php:119] Checking Content Identical:77552569f50ea0a22a66a3dc267dfb91ebce3259===. Value: FALSE -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx-300x61.png -[2024-10-13 17:26:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 174 -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02be02705-nwMZft.tmp -[2024-10-13 17:26:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/07/nginx-300x61.png?simply_static_page=373 -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/07/nginx-300x61.png?simply_static_page=373 -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:103] Filesize: 6281 bytes -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/07/nginx-300x61.png -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02be02705-nwMZft.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx-300x61.png -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:22] [class-ss-page.php:119] Checking Content Identical:500cb29de8cf0b92a492491bd210b94299d61b34===. Value: FALSE -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/debugging-running-nginx-config/feed/ -[2024-10-13 17:26:22] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 174 -[2024-10-13 17:26:22] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02be21e8d-2cU2Gs.tmp -[2024-10-13 17:26:22] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/debugging-running-nginx-config/feed/?simply_static_page=374 -[2024-10-13 17:26:22] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/debugging-running-nginx-config/feed/?simply_static_page=374 -[2024-10-13 17:26:24] [class-ss-url-fetcher.php:103] Filesize: 839 bytes -[2024-10-13 17:26:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:24] [class-ss-url-fetcher.php:233] New filename for static page: debugging-running-nginx-config/feed/index.xml -[2024-10-13 17:26:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02be21e8d-2cU2Gs.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/feed/index.xml -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:24] [class-ss-page.php:119] Checking Content Identical:a09a7c8e6ec2d6c362d1806a32394157a1de7a5e===. Value: FALSE -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/596 -[2024-10-13 17:26:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 174 -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/596 -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/feed/ -[2024-10-13 17:26:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 174 -[2024-10-13 17:26:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:24] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c05dcfc-GmV3Da.tmp -[2024-10-13 17:26:24] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/fun-with-bots-ssh-tarpitting/feed/?simply_static_page=376 -[2024-10-13 17:26:24] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/fun-with-bots-ssh-tarpitting/feed/?simply_static_page=376 -[2024-10-13 17:26:26] [class-ss-url-fetcher.php:103] Filesize: 841 bytes -[2024-10-13 17:26:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:26] [class-ss-url-fetcher.php:233] New filename for static page: fun-with-bots-ssh-tarpitting/feed/index.xml -[2024-10-13 17:26:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c05dcfc-GmV3Da.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/feed/index.xml -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:26] [class-ss-page.php:119] Checking Content Identical:7b9814b72d96b9b68b25441bc7b06bc20be8f73c===. Value: FALSE -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/576 -[2024-10-13 17:26:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 174 -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/576 -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ansible/ -[2024-10-13 17:26:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 174 -[2024-10-13 17:26:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c20ec41-wjgzSE.tmp -[2024-10-13 17:26:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ansible/?simply_static_page=378 -[2024-10-13 17:26:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ansible/?simply_static_page=378 -[2024-10-13 17:26:27] [class-ss-url-fetcher.php:103] Filesize: 67215 bytes -[2024-10-13 17:26:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:27] [class-ss-url-fetcher.php:233] New filename for static page: category/ansible/index.html -[2024-10-13 17:26:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c20ec41-wjgzSE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/index.html -[2024-10-13 17:26:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:27] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:26:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:27] [class-ss-page.php:119] Checking Content Identical:8f74de42b3b0c0e0aeacfb5688d3ce1615d8580a===. Value: FALSE -[2024-10-13 17:26:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/traefik/ -[2024-10-13 17:26:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 174 -[2024-10-13 17:26:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c35bf09-e0MF1D.tmp -[2024-10-13 17:26:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/traefik/?simply_static_page=379 -[2024-10-13 17:26:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/traefik/?simply_static_page=379 -[2024-10-13 17:26:28] [class-ss-url-fetcher.php:103] Filesize: 68159 bytes -[2024-10-13 17:26:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:28] [class-ss-url-fetcher.php:233] New filename for static page: category/traefik/index.html -[2024-10-13 17:26:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c35bf09-e0MF1D.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/index.html -[2024-10-13 17:26:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:28] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:26:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:28] [class-ss-page.php:119] Checking Content Identical:a893a47e456fa8a8f135b008c94dae0b84973203===. Value: FALSE -[2024-10-13 17:26:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/ -[2024-10-13 17:26:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 174 -[2024-10-13 17:26:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c485bc0-N2h5BV.tmp -[2024-10-13 17:26:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/?simply_static_page=380 -[2024-10-13 17:26:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/?simply_static_page=380 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:103] Filesize: 899 bytes -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:233] New filename for static page: traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c485bc0-N2h5BV.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:29] [class-ss-page.php:119] Checking Content Identical:174a55349073586a58b407cfd5c3d1a4014cdfde===. Value: FALSE -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/564 -[2024-10-13 17:26:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 174 -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/564 -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min.png -[2024-10-13 17:26:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 174 -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c538e04-CslXj4.tmp -[2024-10-13 17:26:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min.png?simply_static_page=382 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min.png?simply_static_page=382 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:103] Filesize: 103577 bytes -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min.png -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c538e04-CslXj4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min.png -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:29] [class-ss-page.php:119] Checking Content Identical:09ee553e98a7ad114766bee18a3ee964020d65e6===. Value: FALSE -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png -[2024-10-13 17:26:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 174 -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c58f6c1-mK3Gxa.tmp -[2024-10-13 17:26:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png?simply_static_page=383 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png?simply_static_page=383 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:103] Filesize: 6493 bytes -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c58f6c1-mK3Gxa.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:29] [class-ss-page.php:119] Checking Content Identical:4d1c44e19f833058d5fb5bf1f06146e0ceeaf18a===. Value: FALSE -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png -[2024-10-13 17:26:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 174 -[2024-10-13 17:26:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c5d338c-dzktPi.tmp -[2024-10-13 17:26:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png?simply_static_page=384 -[2024-10-13 17:26:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png?simply_static_page=384 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:103] Filesize: 24218 bytes -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c5d338c-dzktPi.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:30] [class-ss-page.php:119] Checking Content Identical:791df7def0573227b71448a9983b3f92789b05b8===. Value: FALSE -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png -[2024-10-13 17:26:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 174 -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c62a41b-xkRAVC.tmp -[2024-10-13 17:26:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png?simply_static_page=385 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png?simply_static_page=385 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:103] Filesize: 17805 bytes -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c62a41b-xkRAVC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:30] [class-ss-page.php:119] Checking Content Identical:445f28571f471bc2e45f82ba391cb329bb36084c===. Value: FALSE -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png -[2024-10-13 17:26:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 174 -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c6549b3-sGPpc6.tmp -[2024-10-13 17:26:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png?simply_static_page=386 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png?simply_static_page=386 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:103] Filesize: 38621 bytes -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c6549b3-sGPpc6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:30] [class-ss-page.php:119] Checking Content Identical:38eca6e0e53a85a916fcdc619972172279d921d1===. Value: FALSE -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png -[2024-10-13 17:26:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 174 -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c6a3fe4-PGCOB6.tmp -[2024-10-13 17:26:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png?simply_static_page=387 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png?simply_static_page=387 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:103] Filesize: 53064 bytes -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c6a3fe4-PGCOB6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:30] [class-ss-page.php:119] Checking Content Identical:5a1aeaf421a4eb2ddb4806bc450b114b66fdb5d7===. Value: FALSE -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/stop-all-running-containers-with-docker/feed/ -[2024-10-13 17:26:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 174 -[2024-10-13 17:26:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c6f144e-ijqNcU.tmp -[2024-10-13 17:26:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/stop-all-running-containers-with-docker/feed/?simply_static_page=388 -[2024-10-13 17:26:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/stop-all-running-containers-with-docker/feed/?simply_static_page=388 -[2024-10-13 17:26:31] [class-ss-url-fetcher.php:103] Filesize: 866 bytes -[2024-10-13 17:26:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:31] [class-ss-url-fetcher.php:233] New filename for static page: stop-all-running-containers-with-docker/feed/index.xml -[2024-10-13 17:26:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c6f144e-ijqNcU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/feed/index.xml -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:31] [class-ss-page.php:119] Checking Content Identical:27b9c32af20eda50a8c6ce9ecaaecafff6f5d5de===. Value: FALSE -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/557 -[2024-10-13 17:26:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 174 -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/557 -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ci-cd/ -[2024-10-13 17:26:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 174 -[2024-10-13 17:26:31] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:31] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c7ba2bf-xNnPeJ.tmp -[2024-10-13 17:26:31] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ci-cd/?simply_static_page=390 -[2024-10-13 17:26:31] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ci-cd/?simply_static_page=390 -[2024-10-13 17:26:32] [class-ss-url-fetcher.php:103] Filesize: 66260 bytes -[2024-10-13 17:26:32] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:32] [class-ss-url-fetcher.php:233] New filename for static page: category/ci-cd/index.html -[2024-10-13 17:26:32] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c7ba2bf-xNnPeJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/index.html -[2024-10-13 17:26:32] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:32] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:26:32] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:32] [class-ss-page.php:119] Checking Content Identical:421b2e3b7121e21cae3a53cae367a63ddcfce40b===. Value: FALSE -[2024-10-13 17:26:32] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/teamcity/ -[2024-10-13 17:26:32] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 174 -[2024-10-13 17:26:32] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:32] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c8c420d-EXpmYL.tmp -[2024-10-13 17:26:32] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/teamcity/?simply_static_page=391 -[2024-10-13 17:26:32] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/teamcity/?simply_static_page=391 -[2024-10-13 17:26:33] [class-ss-url-fetcher.php:103] Filesize: 66275 bytes -[2024-10-13 17:26:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:33] [class-ss-url-fetcher.php:233] New filename for static page: category/teamcity/index.html -[2024-10-13 17:26:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c8c420d-EXpmYL.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/index.html -[2024-10-13 17:26:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:33] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:26:33] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:33] [class-ss-page.php:119] Checking Content Identical:3b4848a8eafde2d596e03e08b2e2868f23dc03b6===. Value: FALSE -[2024-10-13 17:26:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/feed/ -[2024-10-13 17:26:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 174 -[2024-10-13 17:26:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02c9a862f-68nfaS.tmp -[2024-10-13 17:26:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/feed/?simply_static_page=392 -[2024-10-13 17:26:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/automating-ci-cd-with-teamcity-ansible/feed/?simply_static_page=392 -[2024-10-13 17:26:34] [class-ss-url-fetcher.php:103] Filesize: 867 bytes -[2024-10-13 17:26:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:34] [class-ss-url-fetcher.php:233] New filename for static page: automating-ci-cd-with-teamcity-ansible/feed/index.xml -[2024-10-13 17:26:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02c9a862f-68nfaS.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/feed/index.xml -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:34] [class-ss-page.php:119] Checking Content Identical:9a1cf8f5b2f946f1e4897db72b71d358a0e09757===. Value: FALSE -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/393 -[2024-10-13 17:26:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 174 -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/393 -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/oci/ -[2024-10-13 17:26:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 174 -[2024-10-13 17:26:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ca5364b-MWwyuM.tmp -[2024-10-13 17:26:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/oci/?simply_static_page=394 -[2024-10-13 17:26:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/oci/?simply_static_page=394 -[2024-10-13 17:26:35] [class-ss-url-fetcher.php:103] Filesize: 66251 bytes -[2024-10-13 17:26:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:35] [class-ss-url-fetcher.php:233] New filename for static page: category/oci/index.html -[2024-10-13 17:26:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ca5364b-MWwyuM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/index.html -[2024-10-13 17:26:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:35] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:26:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:35] [class-ss-page.php:119] Checking Content Identical:67936a50c83b89c0283d0c8eee928a91a6d824bd===. Value: FALSE -[2024-10-13 17:26:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/feed/ -[2024-10-13 17:26:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 174 -[2024-10-13 17:26:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02cbac36b-VuII48.tmp -[2024-10-13 17:26:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/self-hosted-package-registries-with-gitea/feed/?simply_static_page=395 -[2024-10-13 17:26:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/self-hosted-package-registries-with-gitea/feed/?simply_static_page=395 -[2024-10-13 17:26:38] [class-ss-url-fetcher.php:103] Filesize: 872 bytes -[2024-10-13 17:26:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:38] [class-ss-url-fetcher.php:233] New filename for static page: self-hosted-package-registries-with-gitea/feed/index.xml -[2024-10-13 17:26:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02cbac36b-VuII48.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/feed/index.xml -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:38] [class-ss-page.php:119] Checking Content Identical:a21fcae2dd0cada1fd7ddf0a7e721f98a473d526===. Value: FALSE -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/413 -[2024-10-13 17:26:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 174 -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/413 -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/ -[2024-10-13 17:26:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 174 -[2024-10-13 17:26:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02cee5edc-1g2aSH.tmp -[2024-10-13 17:26:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/?simply_static_page=397 -[2024-10-13 17:26:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/?simply_static_page=397 -[2024-10-13 17:26:40] [class-ss-url-fetcher.php:103] Filesize: 889 bytes -[2024-10-13 17:26:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:40] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml -[2024-10-13 17:26:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02cee5edc-1g2aSH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:40] [class-ss-page.php:119] Checking Content Identical:99b8a62b9f0451f8218c525651d3d2deb46ecba1===. Value: FALSE -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/425 -[2024-10-13 17:26:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 174 -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/425 -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ -[2024-10-13 17:26:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 174 -[2024-10-13 17:26:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d09f231-s7SMSu.tmp -[2024-10-13 17:26:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/?simply_static_page=399 -[2024-10-13 17:26:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/?simply_static_page=399 -[2024-10-13 17:26:41] [class-ss-url-fetcher.php:103] Filesize: 84662 bytes -[2024-10-13 17:26:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:41] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html -[2024-10-13 17:26:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d09f231-s7SMSu.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html -[2024-10-13 17:26:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:41] [class-ss-fetch-urls-task.php:159] Adding 33 URLs to the queue -[2024-10-13 17:26:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:41] [class-ss-page.php:119] Checking Content Identical:4512ab5c6411c7278125516ba003fe599d13eb2b===. Value: FALSE -[2024-10-13 17:26:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/ -[2024-10-13 17:26:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 174 -[2024-10-13 17:26:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d1abb43-YYOL6W.tmp -[2024-10-13 17:26:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/?simply_static_page=400 -[2024-10-13 17:26:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/?simply_static_page=400 -[2024-10-13 17:26:42] [class-ss-url-fetcher.php:103] Filesize: 893 bytes -[2024-10-13 17:26:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:42] [class-ss-url-fetcher.php:233] New filename for static page: traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml -[2024-10-13 17:26:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d1abb43-YYOL6W.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:42] [class-ss-page.php:119] Checking Content Identical:5c82aa451ab422f51354ee30567d4ab29faa73eb===. Value: FALSE -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/422 -[2024-10-13 17:26:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 174 -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/422 -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/portfolio/ -[2024-10-13 17:26:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 174 -[2024-10-13 17:26:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d2b9bb7-KgSNxu.tmp -[2024-10-13 17:26:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/portfolio/?simply_static_page=402 -[2024-10-13 17:26:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/portfolio/?simply_static_page=402 -[2024-10-13 17:26:43] [class-ss-url-fetcher.php:103] Filesize: 68846 bytes -[2024-10-13 17:26:43] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:43] [class-ss-url-fetcher.php:233] New filename for static page: tag/portfolio/index.html -[2024-10-13 17:26:43] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d2b9bb7-KgSNxu.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/index.html -[2024-10-13 17:26:43] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:43] [class-ss-fetch-urls-task.php:159] Adding 34 URLs to the queue -[2024-10-13 17:26:43] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:43] [class-ss-page.php:119] Checking Content Identical:4c74bf52bc0a744fac96c40447475775b27f96d6===. Value: FALSE -[2024-10-13 17:26:43] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 76 of 174 pages/files -[2024-10-13 17:26:43] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:26:44] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:26:44] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:26:44] [class-ss-fetch-urls-task.php:69] Total pages: 217; Pages remaining: 91 -[2024-10-13 17:26:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/ -[2024-10-13 17:26:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 217 -[2024-10-13 17:26:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d45845c-fx7fLF.tmp -[2024-10-13 17:26:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/?simply_static_page=403 -[2024-10-13 17:26:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/?simply_static_page=403 -[2024-10-13 17:26:45] [class-ss-url-fetcher.php:103] Filesize: 88033 bytes -[2024-10-13 17:26:45] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:26:45] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react/index.html -[2024-10-13 17:26:45] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d45845c-fx7fLF.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/index.html -[2024-10-13 17:26:45] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:45] [class-ss-fetch-urls-task.php:159] Adding 53 URLs to the queue -[2024-10-13 17:26:45] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:45] [class-ss-page.php:119] Checking Content Identical:ab700b31e23e038e0019366e917a301861f2723f===. Value: FALSE -[2024-10-13 17:26:45] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home.webp -[2024-10-13 17:26:45] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 217 -[2024-10-13 17:26:45] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:45] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d5c2643-eI6AoI.tmp -[2024-10-13 17:26:45] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-home.webp?simply_static_page=404 -[2024-10-13 17:26:45] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home.webp?simply_static_page=404 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:103] Filesize: 48632 bytes -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-home.webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d5c2643-eI6AoI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home.webp -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:46] [class-ss-page.php:119] Checking Content Identical:c28e203d27421d1bede6ddb6e40fef5bbe3e6a89===. Value: FALSE -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-300x151.webp -[2024-10-13 17:26:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 217 -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d61761a-yxbC2H.tmp -[2024-10-13 17:26:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-300x151.webp?simply_static_page=405 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-300x151.webp?simply_static_page=405 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:103] Filesize: 12276 bytes -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-home-300x151.webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d61761a-yxbC2H.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-300x151.webp -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:46] [class-ss-page.php:119] Checking Content Identical:edfe4e98ab31e2aa0a104cde24cf554c4da667bf===. Value: FALSE -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-768x386.webp -[2024-10-13 17:26:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 217 -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d65c009-3DLPQK.tmp -[2024-10-13 17:26:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-768x386.webp?simply_static_page=406 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hoots-home-768x386.webp?simply_static_page=406 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:103] Filesize: 44430 bytes -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hoots-home-768x386.webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d65c009-3DLPQK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-768x386.webp -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:46] [class-ss-page.php:119] Checking Content Identical:5d5d065be6ddc27d4a4a17e2f727d8250fd18e2b===. Value: FALSE -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp -[2024-10-13 17:26:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 217 -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d6aa1dd-lAw0EN.tmp -[2024-10-13 17:26:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp?simply_static_page=407 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp?simply_static_page=407 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:103] Filesize: 446340 bytes -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d6aa1dd-lAw0EN.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:46] [class-ss-page.php:119] Checking Content Identical:7dc13516c47112406700b6e4f2e75362484c7024===. Value: FALSE -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp -[2024-10-13 17:26:46] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 217 -[2024-10-13 17:26:46] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d6f05c5-7F5mhz.tmp -[2024-10-13 17:26:46] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp?simply_static_page=408 -[2024-10-13 17:26:46] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp?simply_static_page=408 -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:103] Filesize: 52960 bytes -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-186x300.webp -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d6f05c5-7F5mhz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:47] [class-ss-page.php:119] Checking Content Identical:f3b147a6e0355888e25810a6246e2509a3220c20===. Value: FALSE -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp -[2024-10-13 17:26:47] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 217 -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d737124-c7LewE.tmp -[2024-10-13 17:26:47] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp?simply_static_page=409 -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp?simply_static_page=409 -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:103] Filesize: 643726 bytes -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d737124-c7LewE.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:47] [class-ss-page.php:119] Checking Content Identical:df3c65ad542ab8335936e7eb3b1fdb15b41a016d===. Value: FALSE -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp -[2024-10-13 17:26:47] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 217 -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d79355b-a4M7UX.tmp -[2024-10-13 17:26:47] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp?simply_static_page=410 -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp?simply_static_page=410 -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:103] Filesize: 953392 bytes -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d79355b-a4M7UX.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:47] [class-ss-page.php:119] Checking Content Identical:fd52460c6453b8f0e830a79a7bbb3b11714d1a17===. Value: FALSE -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp -[2024-10-13 17:26:47] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 217 -[2024-10-13 17:26:47] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d7f1d0a-4trUHC.tmp -[2024-10-13 17:26:47] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp?simply_static_page=411 -[2024-10-13 17:26:47] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp?simply_static_page=411 -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:103] Filesize: 1639922 bytes -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d7f1d0a-4trUHC.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:48] [class-ss-page.php:119] Checking Content Identical:1cdb480939a8292f7bb39d7b26ab0b4e0967f5a7===. Value: FALSE -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp -[2024-10-13 17:26:48] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 217 -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d855870-1YsZcx.tmp -[2024-10-13 17:26:48] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp?simply_static_page=412 -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp?simply_static_page=412 -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:103] Filesize: 2535248 bytes -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-home-full-scaled.webp -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d855870-1YsZcx.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:48] [class-ss-page.php:119] Checking Content Identical:65b1a82c34628595ff8d8b9dfe87e0229bd9e5f4===. Value: FALSE -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png -[2024-10-13 17:26:48] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 217 -[2024-10-13 17:26:48] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d8c657e-sHa65j.tmp -[2024-10-13 17:26:48] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png?simply_static_page=413 -[2024-10-13 17:26:48] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png?simply_static_page=413 -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:103] Filesize: 404245 bytes -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d8c657e-sHa65j.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:49] [class-ss-page.php:119] Checking Content Identical:2a2c961bd40cd193b7216ea4bb4e338faa9c47e9===. Value: FALSE -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png -[2024-10-13 17:26:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 217 -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d933827-JbijRo.tmp -[2024-10-13 17:26:49] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png?simply_static_page=414 -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png?simply_static_page=414 -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:103] Filesize: 47861 bytes -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-161x300.png -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d933827-JbijRo.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:49] [class-ss-page.php:119] Checking Content Identical:100d547b7d532c6d68a9bdd61b8aba39a28c5b49===. Value: FALSE -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png -[2024-10-13 17:26:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 217 -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d97de99-i7KA7R.tmp -[2024-10-13 17:26:49] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png?simply_static_page=415 -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png?simply_static_page=415 -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:103] Filesize: 697764 bytes -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d97de99-i7KA7R.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:49] [class-ss-page.php:119] Checking Content Identical:720d90e2744958d468d391be199e637ebe16823c===. Value: FALSE -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png -[2024-10-13 17:26:49] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 217 -[2024-10-13 17:26:49] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02d9da153-751ECs.tmp -[2024-10-13 17:26:49] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png?simply_static_page=416 -[2024-10-13 17:26:49] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png?simply_static_page=416 -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:103] Filesize: 829453 bytes -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02d9da153-751ECs.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:50] [class-ss-page.php:119] Checking Content Identical:ebe9a6c2a77d9ec7bee8337c7ecd8d8606e3398c===. Value: FALSE -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png -[2024-10-13 17:26:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 217 -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02da441a2-K77FPA.tmp -[2024-10-13 17:26:50] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png?simply_static_page=417 -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png?simply_static_page=417 -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:103] Filesize: 1403061 bytes -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02da441a2-K77FPA.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:50] [class-ss-page.php:119] Checking Content Identical:72ea5d2f695490aabf01f8fd2a4a74ba3b4a19d2===. Value: FALSE -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page.png -[2024-10-13 17:26:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 217 -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02da9cdbf-Uw2LS5.tmp -[2024-10-13 17:26:50] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page.png?simply_static_page=418 -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-menu-page.png?simply_static_page=418 -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:103] Filesize: 1084759 bytes -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-menu-page.png -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02da9cdbf-Uw2LS5.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page.png -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:50] [class-ss-page.php:119] Checking Content Identical:61aed36c2ca9174817d7b5030a9dd57e38f9516c===. Value: FALSE -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png -[2024-10-13 17:26:50] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 217 -[2024-10-13 17:26:50] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02daef109-sJf8Yb.tmp -[2024-10-13 17:26:50] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png?simply_static_page=419 -[2024-10-13 17:26:50] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png?simply_static_page=419 -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:103] Filesize: 280970 bytes -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02daef109-sJf8Yb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:51] [class-ss-page.php:119] Checking Content Identical:6cab1f576d57c7b2117b8a80f2c2876c59aa16d1===. Value: FALSE -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png -[2024-10-13 17:26:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 217 -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02db52df9-Rq8Qn7.tmp -[2024-10-13 17:26:51] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png?simply_static_page=420 -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png?simply_static_page=420 -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:103] Filesize: 35197 bytes -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-126x300.png -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02db52df9-Rq8Qn7.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:51] [class-ss-page.php:119] Checking Content Identical:3ffc29c55f0bd74235491bf8deb7e62763837f0b===. Value: FALSE -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png -[2024-10-13 17:26:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 217 -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02db8d0c3-lpLJ7Z.tmp -[2024-10-13 17:26:51] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png?simply_static_page=421 -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png?simply_static_page=421 -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:103] Filesize: 767854 bytes -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02db8d0c3-lpLJ7Z.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:51] [class-ss-page.php:119] Checking Content Identical:de4ff7df1c15d1879e9391ae8d1177bd98b96265===. Value: FALSE -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png -[2024-10-13 17:26:51] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 217 -[2024-10-13 17:26:51] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02dbd6ebf-5LqsHv.tmp -[2024-10-13 17:26:51] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png?simply_static_page=422 -[2024-10-13 17:26:51] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png?simply_static_page=422 -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:103] Filesize: 947703 bytes -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02dbd6ebf-5LqsHv.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:52] [class-ss-page.php:119] Checking Content Identical:146cb82a6da8f66d9c43f13cd807efba62ec8dab===. Value: FALSE -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page.png -[2024-10-13 17:26:52] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 217 -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02dc35ab6-wJqUdQ.tmp -[2024-10-13 17:26:52] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page.png?simply_static_page=423 -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hootswings-locations-page.png?simply_static_page=423 -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:103] Filesize: 1126848 bytes -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hootswings-locations-page.png -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02dc35ab6-wJqUdQ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page.png -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:52] [class-ss-page.php:119] Checking Content Identical:114cc966469478694789e272aa5b9a8cd26a10e1===. Value: FALSE -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hoots-wings/feed/ -[2024-10-13 17:26:52] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 217 -[2024-10-13 17:26:52] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02dc88cf2-ZJbWOJ.tmp -[2024-10-13 17:26:52] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hoots-wings/feed/?simply_static_page=424 -[2024-10-13 17:26:52] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hoots-wings/feed/?simply_static_page=424 -[2024-10-13 17:26:53] [class-ss-url-fetcher.php:103] Filesize: 782 bytes -[2024-10-13 17:26:53] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:26:53] [class-ss-url-fetcher.php:233] New filename for static page: hoots-wings/feed/index.xml -[2024-10-13 17:26:53] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02dc88cf2-ZJbWOJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/feed/index.xml -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:53] [class-ss-page.php:119] Checking Content Identical:e63167da7537e201cb8ce84d6d44e0d5561c8c02===. Value: FALSE -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/495 -[2024-10-13 17:26:53] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 217 -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/495 -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp -[2024-10-13 17:26:53] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 217 -[2024-10-13 17:26:53] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:53] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02dda3a9e-K9zDhh.tmp -[2024-10-13 17:26:53] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp?simply_static_page=426 -[2024-10-13 17:26:53] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp?simply_static_page=426 -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:103] Filesize: 40268 bytes -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02dda3a9e-K9zDhh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:54] [class-ss-page.php:119] Checking Content Identical:99d736a37742b9322c4c238449dd8768499992c2===. Value: FALSE -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp -[2024-10-13 17:26:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 217 -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02deb8764-UA1JyH.tmp -[2024-10-13 17:26:54] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp?simply_static_page=427 -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp?simply_static_page=427 -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:103] Filesize: 6558 bytes -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02deb8764-UA1JyH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:54] [class-ss-page.php:119] Checking Content Identical:61d250924c5bc1b55a50aecd10abb91725d4c172===. Value: FALSE -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp -[2024-10-13 17:26:54] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 217 -[2024-10-13 17:26:54] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:54] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02def3af0-SvXK3n.tmp -[2024-10-13 17:26:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp?simply_static_page=428 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp?simply_static_page=428 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:103] Filesize: 25632 bytes -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02def3af0-SvXK3n.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:55] [class-ss-page.php:119] Checking Content Identical:cbf93c51e0b6cec3d013a8078a134c183ad25fb7===. Value: FALSE -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp -[2024-10-13 17:26:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 217 -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02df4699b-62L9vw.tmp -[2024-10-13 17:26:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp?simply_static_page=429 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp?simply_static_page=429 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:103] Filesize: 75970 bytes -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02df4699b-62L9vw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:55] [class-ss-page.php:119] Checking Content Identical:dea1dd423945a1163deae66d9b91b22a782c3344===. Value: FALSE -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp -[2024-10-13 17:26:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 217 -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02df9b084-TSAj1U.tmp -[2024-10-13 17:26:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp?simply_static_page=430 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp?simply_static_page=430 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:103] Filesize: 42932 bytes -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-teachers.webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02df9b084-TSAj1U.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:55] [class-ss-page.php:119] Checking Content Identical:2c6a3087f1019c7bfd30d0d6105be6f8ce99844a===. Value: FALSE -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp -[2024-10-13 17:26:55] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 217 -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02dfcacda-fQITXI.tmp -[2024-10-13 17:26:55] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp?simply_static_page=431 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp?simply_static_page=431 -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:103] Filesize: 36326 bytes -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp -[2024-10-13 17:26:55] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02dfcacda-fQITXI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:55] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:55] [class-ss-page.php:119] Checking Content Identical:5f5c72acfddc4bfe7df2f653f9fdff5b835bcac8===. Value: FALSE -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp -[2024-10-13 17:26:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 217 -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e00396f-u1qIrB.tmp -[2024-10-13 17:26:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp?simply_static_page=432 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp?simply_static_page=432 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:103] Filesize: 6150 bytes -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e00396f-u1qIrB.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:56] [class-ss-page.php:119] Checking Content Identical:961c8e7cd7554812c26d91f20b83d0deae4303e8===. Value: FALSE -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp -[2024-10-13 17:26:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 217 -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e028a65-9EmKOe.tmp -[2024-10-13 17:26:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp?simply_static_page=433 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp?simply_static_page=433 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:103] Filesize: 23578 bytes -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e028a65-9EmKOe.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:56] [class-ss-page.php:119] Checking Content Identical:774ac23e650204d60370fcbc04d57aa5c2c6f9d3===. Value: FALSE -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp -[2024-10-13 17:26:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 217 -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e06b760-bDfwVq.tmp -[2024-10-13 17:26:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp?simply_static_page=434 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp?simply_static_page=434 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:103] Filesize: 67322 bytes -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e06b760-bDfwVq.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:56] [class-ss-page.php:119] Checking Content Identical:83c0648270915274a847d1ad40dd5e9876aa2967===. Value: FALSE -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp -[2024-10-13 17:26:56] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 217 -[2024-10-13 17:26:56] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e0b4ee9-9Ls6i4.tmp -[2024-10-13 17:26:56] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp?simply_static_page=435 -[2024-10-13 17:26:56] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp?simply_static_page=435 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:103] Filesize: 41934 bytes -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-all-students-1.webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e0b4ee9-9Ls6i4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:57] [class-ss-page.php:119] Checking Content Identical:d70483195aee4466bd83070073e92305686c5c9c===. Value: FALSE -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp -[2024-10-13 17:26:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 217 -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e10c5fd-1n02Dn.tmp -[2024-10-13 17:26:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp?simply_static_page=436 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp?simply_static_page=436 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:103] Filesize: 51514 bytes -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e10c5fd-1n02Dn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:57] [class-ss-page.php:119] Checking Content Identical:644045ba69a333c398b09dd7f6b22593e404cc26===. Value: FALSE -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp -[2024-10-13 17:26:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 217 -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e1555b6-tJa26e.tmp -[2024-10-13 17:26:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp?simply_static_page=437 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp?simply_static_page=437 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:103] Filesize: 8408 bytes -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e1555b6-tJa26e.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:57] [class-ss-page.php:119] Checking Content Identical:05ccdf33d4a4a6ab37b0b9e0ff62f47999c2b803===. Value: FALSE -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp -[2024-10-13 17:26:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 217 -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e17a883-scib6C.tmp -[2024-10-13 17:26:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp?simply_static_page=438 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp?simply_static_page=438 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:103] Filesize: 36826 bytes -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e17a883-scib6C.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:57] [class-ss-page.php:119] Checking Content Identical:5b8584334b39a29d0f6811f345f861d07cc36222===. Value: FALSE -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp -[2024-10-13 17:26:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 217 -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e1c065e-3YdcQz.tmp -[2024-10-13 17:26:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp?simply_static_page=439 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp?simply_static_page=439 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:103] Filesize: 90742 bytes -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e1c065e-3YdcQz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:57] [class-ss-page.php:119] Checking Content Identical:eb0f976025323ee4186d4dabfe0b6462fa0f17ef===. Value: FALSE -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student.webp -[2024-10-13 17:26:57] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 217 -[2024-10-13 17:26:57] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e1ed8ca-axn7TN.tmp -[2024-10-13 17:26:57] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student.webp?simply_static_page=440 -[2024-10-13 17:26:57] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-edit-student.webp?simply_static_page=440 -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:103] Filesize: 52962 bytes -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-edit-student.webp -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e1ed8ca-axn7TN.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student.webp -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:58] [class-ss-page.php:119] Checking Content Identical:513358f525023331ffba2e4bc9f661313db7450f===. Value: FALSE -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp -[2024-10-13 17:26:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 217 -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e2454d5-YI2AMd.tmp -[2024-10-13 17:26:58] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp?simply_static_page=441 -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp?simply_static_page=441 -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:103] Filesize: 34090 bytes -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e2454d5-YI2AMd.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:58] [class-ss-page.php:119] Checking Content Identical:422dce3b7ba7ad269eb5d0b13913d8c48f3b5264===. Value: FALSE -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp -[2024-10-13 17:26:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 217 -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e28a7e8-SkSAba.tmp -[2024-10-13 17:26:58] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp?simply_static_page=442 -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp?simply_static_page=442 -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:103] Filesize: 5568 bytes -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e28a7e8-SkSAba.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:58] [class-ss-page.php:119] Checking Content Identical:ffc0f44bac8ef6854f0165697971836de61f98bc===. Value: FALSE -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp -[2024-10-13 17:26:58] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 217 -[2024-10-13 17:26:58] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e2bfb64-ydA0F3.tmp -[2024-10-13 17:26:58] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp?simply_static_page=443 -[2024-10-13 17:26:58] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp?simply_static_page=443 -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:103] Filesize: 21858 bytes -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e2bfb64-ydA0F3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:59] [class-ss-page.php:119] Checking Content Identical:7ebd443a8b317981c33c5f1ac74bfb781911898f===. Value: FALSE -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp -[2024-10-13 17:26:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 217 -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e3121a7-cAKgOW.tmp -[2024-10-13 17:26:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp?simply_static_page=444 -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp?simply_static_page=444 -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:103] Filesize: 64664 bytes -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e3121a7-cAKgOW.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:59] [class-ss-page.php:119] Checking Content Identical:af2e86a1693faea50946d46881143ca4af6dc6d8===. Value: FALSE -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents.webp -[2024-10-13 17:26:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 217 -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e345f7d-JpW19q.tmp -[2024-10-13 17:26:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents.webp?simply_static_page=445 -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/hilger-portal-parents.webp?simply_static_page=445 -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:103] Filesize: 44026 bytes -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/hilger-portal-parents.webp -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e345f7d-JpW19q.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents.webp -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:26:59] [class-ss-page.php:119] Checking Content Identical:3f145cecabfe56603d803dbab7cd65b8ad4bca82===. Value: FALSE -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/hilger-grading-portal/feed/ -[2024-10-13 17:26:59] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 217 -[2024-10-13 17:26:59] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e3903ad-8SfTPR.tmp -[2024-10-13 17:26:59] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/hilger-grading-portal/feed/?simply_static_page=446 -[2024-10-13 17:26:59] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/hilger-grading-portal/feed/?simply_static_page=446 -[2024-10-13 17:27:00] [class-ss-url-fetcher.php:103] Filesize: 812 bytes -[2024-10-13 17:27:00] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:00] [class-ss-url-fetcher.php:233] New filename for static page: hilger-grading-portal/feed/index.xml -[2024-10-13 17:27:00] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e3903ad-8SfTPR.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/feed/index.xml -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:00] [class-ss-page.php:119] Checking Content Identical:5b1b15af7addb5f025de24f899396b2c431dfd9b===. Value: FALSE -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/509 -[2024-10-13 17:27:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 217 -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/509 -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/upwork-project/ -[2024-10-13 17:27:00] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 217 -[2024-10-13 17:27:00] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:00] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e468db0-DcUL7k.tmp -[2024-10-13 17:27:00] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/upwork-project/?simply_static_page=448 -[2024-10-13 17:27:00] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/upwork-project/?simply_static_page=448 -[2024-10-13 17:27:01] [class-ss-url-fetcher.php:103] Filesize: 66323 bytes -[2024-10-13 17:27:01] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:01] [class-ss-url-fetcher.php:233] New filename for static page: tag/upwork-project/index.html -[2024-10-13 17:27:01] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e468db0-DcUL7k.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/index.html -[2024-10-13 17:27:01] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:01] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:27:01] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:01] [class-ss-page.php:119] Checking Content Identical:68776f2f75373a39c2fcbc73274507e95b5ec0d8===. Value: FALSE -[2024-10-13 17:27:01] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/feed/ -[2024-10-13 17:27:01] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 217 -[2024-10-13 17:27:01] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:01] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e56013b-Uhr6EZ.tmp -[2024-10-13 17:27:01] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/feed/?simply_static_page=449 -[2024-10-13 17:27:01] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/sftp-server-setup-for-daily-inventory-file-transfers/feed/?simply_static_page=449 -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:103] Filesize: 905 bytes -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:233] New filename for static page: sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e56013b-Uhr6EZ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:02] [class-ss-page.php:119] Checking Content Identical:722a407454c4f89cc5330a6d093bc618e37cadb2===. Value: FALSE -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/599 -[2024-10-13 17:27:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 217 -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/599 -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/styles/cf.errors.css -[2024-10-13 17:27:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 217 -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e611203-Mib7Gv.tmp -[2024-10-13 17:27:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/styles/cf.errors.css?simply_static_page=451 -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/styles/cf.errors.css?simply_static_page=451 -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:103] Filesize: 24051 bytes -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/css -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/styles/cf.errors.css -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e611203-Mib7Gv.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/styles/cf.errors.css -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:159] Adding 10 URLs to the queue -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:02] [class-ss-page.php:119] Checking Content Identical:f24dd1ad7c9080575d92a9a9a2c42620725ef836===. Value: FALSE -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/automation/feed/ -[2024-10-13 17:27:02] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 217 -[2024-10-13 17:27:02] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e6549cd-uZQTnH.tmp -[2024-10-13 17:27:02] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/automation/feed/?simply_static_page=452 -[2024-10-13 17:27:02] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/automation/feed/?simply_static_page=452 -[2024-10-13 17:27:03] [class-ss-url-fetcher.php:103] Filesize: 49073 bytes -[2024-10-13 17:27:03] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:03] [class-ss-url-fetcher.php:233] New filename for static page: category/automation/feed/index.xml -[2024-10-13 17:27:03] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e6549cd-uZQTnH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/feed/index.xml -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:03] [class-ss-page.php:119] Checking Content Identical:161f121525d58cf93c0e27c29ab7d38a0d5c0413===. Value: FALSE -[2024-10-13 17:27:03] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 126 of 217 pages/files -[2024-10-13 17:27:03] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:27:03] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:27:03] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:69] Total pages: 251; Pages remaining: 75 -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/35 -[2024-10-13 17:27:03] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 251 -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/35 -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/iac/feed/ -[2024-10-13 17:27:03] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 251 -[2024-10-13 17:27:03] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:03] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e78db7c-USxkfn.tmp -[2024-10-13 17:27:03] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/iac/feed/?simply_static_page=454 -[2024-10-13 17:27:03] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/iac/feed/?simply_static_page=454 -[2024-10-13 17:27:05] [class-ss-url-fetcher.php:103] Filesize: 19244 bytes -[2024-10-13 17:27:05] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:05] [class-ss-url-fetcher.php:233] New filename for static page: category/iac/feed/index.xml -[2024-10-13 17:27:05] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e78db7c-USxkfn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/feed/index.xml -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:05] [class-ss-page.php:119] Checking Content Identical:1a337c7dc064b9406b08a8c8f5b5b73143632903===. Value: FALSE -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/67 -[2024-10-13 17:27:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 251 -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/67 -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/open-source/feed/ -[2024-10-13 17:27:05] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 251 -[2024-10-13 17:27:05] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:05] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02e9d8a95-KoIBJv.tmp -[2024-10-13 17:27:05] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/open-source/feed/?simply_static_page=456 -[2024-10-13 17:27:05] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/open-source/feed/?simply_static_page=456 -[2024-10-13 17:27:06] [class-ss-url-fetcher.php:103] Filesize: 41180 bytes -[2024-10-13 17:27:06] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:06] [class-ss-url-fetcher.php:233] New filename for static page: category/open-source/feed/index.xml -[2024-10-13 17:27:06] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02e9d8a95-KoIBJv.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/feed/index.xml -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:159] Adding 6 URLs to the queue -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:06] [class-ss-page.php:119] Checking Content Identical:e8e893f5b9ab88ba5cf0eade164a092e89c61bc1===. Value: FALSE -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/52 -[2024-10-13 17:27:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 251 -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/52 -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/security/feed/ -[2024-10-13 17:27:06] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 251 -[2024-10-13 17:27:06] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:06] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02eabeb1a-7hAsTG.tmp -[2024-10-13 17:27:06] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/security/feed/?simply_static_page=458 -[2024-10-13 17:27:06] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/security/feed/?simply_static_page=458 -[2024-10-13 17:27:07] [class-ss-url-fetcher.php:103] Filesize: 46036 bytes -[2024-10-13 17:27:07] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:07] [class-ss-url-fetcher.php:233] New filename for static page: category/security/feed/index.xml -[2024-10-13 17:27:07] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02eabeb1a-7hAsTG.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/feed/index.xml -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:159] Adding 11 URLs to the queue -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:07] [class-ss-page.php:119] Checking Content Identical:8c54ac7a97eb88b8bd6a30a5439fffc68a283d91===. Value: FALSE -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/65 -[2024-10-13 17:27:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 251 -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/65 -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/self-hosted/feed/ -[2024-10-13 17:27:07] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 251 -[2024-10-13 17:27:07] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:07] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02eb89173-vpPFbw.tmp -[2024-10-13 17:27:07] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/self-hosted/feed/?simply_static_page=460 -[2024-10-13 17:27:07] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/self-hosted/feed/?simply_static_page=460 -[2024-10-13 17:27:08] [class-ss-url-fetcher.php:103] Filesize: 44167 bytes -[2024-10-13 17:27:08] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:08] [class-ss-url-fetcher.php:233] New filename for static page: category/self-hosted/feed/index.xml -[2024-10-13 17:27:08] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02eb89173-vpPFbw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/feed/index.xml -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:159] Adding 18 URLs to the queue -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:08] [class-ss-page.php:119] Checking Content Identical:cd69a429a7c6c4eaf48fe4224453b3e393a8cd7c===. Value: FALSE -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/40 -[2024-10-13 17:27:08] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 251 -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/40 -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ -[2024-10-13 17:27:08] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 251 -[2024-10-13 17:27:08] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:08] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ec4aace-wAKjT1.tmp -[2024-10-13 17:27:08] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/?simply_static_page=462 -[2024-10-13 17:27:08] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/?simply_static_page=462 -[2024-10-13 17:27:09] [class-ss-url-fetcher.php:103] Filesize: 86676 bytes -[2024-10-13 17:27:09] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:09] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html -[2024-10-13 17:27:09] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ec4aace-wAKjT1.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html -[2024-10-13 17:27:09] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:09] [class-ss-fetch-urls-task.php:159] Adding 46 URLs to the queue -[2024-10-13 17:27:09] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:09] [class-ss-page.php:119] Checking Content Identical:2ad2ee93c29a5de61b7902b802920e9fdb89f607===. Value: FALSE -[2024-10-13 17:27:09] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/software-engineering/feed/ -[2024-10-13 17:27:09] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 251 -[2024-10-13 17:27:09] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:09] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ed556fe-4RWYf8.tmp -[2024-10-13 17:27:09] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/software-engineering/feed/?simply_static_page=463 -[2024-10-13 17:27:09] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/software-engineering/feed/?simply_static_page=463 -[2024-10-13 17:27:10] [class-ss-url-fetcher.php:103] Filesize: 73126 bytes -[2024-10-13 17:27:10] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:10] [class-ss-url-fetcher.php:233] New filename for static page: category/software-engineering/feed/index.xml -[2024-10-13 17:27:10] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ed556fe-4RWYf8.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/feed/index.xml -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:159] Adding 89 URLs to the queue -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:10] [class-ss-page.php:119] Checking Content Identical:c5a489f01f0b09d0ae12b183d037b1cd0886084b===. Value: FALSE -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/50 -[2024-10-13 17:27:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 251 -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/50 -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ssh/feed/ -[2024-10-13 17:27:10] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 251 -[2024-10-13 17:27:10] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:10] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ee46843-JpYCtb.tmp -[2024-10-13 17:27:10] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ssh/feed/?simply_static_page=465 -[2024-10-13 17:27:10] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ssh/feed/?simply_static_page=465 -[2024-10-13 17:27:11] [class-ss-url-fetcher.php:103] Filesize: 38029 bytes -[2024-10-13 17:27:11] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:11] [class-ss-url-fetcher.php:233] New filename for static page: category/ssh/feed/index.xml -[2024-10-13 17:27:11] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ee46843-JpYCtb.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/feed/index.xml -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:159] Adding 5 URLs to the queue -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:11] [class-ss-page.php:119] Checking Content Identical:2aa59362f7caf417061a4a2cb84ecf69d0826ae2===. Value: FALSE -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/63 -[2024-10-13 17:27:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 251 -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/63 -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/blog-post/page/2/ -[2024-10-13 17:27:11] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 251 -[2024-10-13 17:27:11] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:11] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ef17aae-Ccwdp8.tmp -[2024-10-13 17:27:11] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/blog-post/page/2/?simply_static_page=467 -[2024-10-13 17:27:11] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/blog-post/page/2/?simply_static_page=467 -[2024-10-13 17:27:12] [class-ss-url-fetcher.php:103] Filesize: 69169 bytes -[2024-10-13 17:27:12] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:12] [class-ss-url-fetcher.php:233] New filename for static page: tag/blog-post/page/2/index.html -[2024-10-13 17:27:12] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ef17aae-Ccwdp8.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/page/2/index.html -[2024-10-13 17:27:12] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:12] [class-ss-fetch-urls-task.php:159] Adding 26 URLs to the queue -[2024-10-13 17:27:12] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:12] [class-ss-page.php:119] Checking Content Identical:f6dd208fbb1dfce1979acf76c5375f9261e5a7e1===. Value: FALSE -[2024-10-13 17:27:12] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/blog-post/feed/ -[2024-10-13 17:27:12] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 251 -[2024-10-13 17:27:12] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:12] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f0c2772-8XNtur.tmp -[2024-10-13 17:27:12] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/blog-post/feed/?simply_static_page=468 -[2024-10-13 17:27:12] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/blog-post/feed/?simply_static_page=468 -[2024-10-13 17:27:13] [class-ss-url-fetcher.php:103] Filesize: 89858 bytes -[2024-10-13 17:27:13] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:13] [class-ss-url-fetcher.php:233] New filename for static page: tag/blog-post/feed/index.xml -[2024-10-13 17:27:13] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f0c2772-8XNtur.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/feed/index.xml -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:13] [class-ss-page.php:119] Checking Content Identical:ad39437f0bba8c97d9fc2ecfcc952b54ae1060d7===. Value: FALSE -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/46 -[2024-10-13 17:27:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 251 -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/46 -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/cloudflare/feed/ -[2024-10-13 17:27:13] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 251 -[2024-10-13 17:27:13] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:13] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f1a8f13-DmJnCz.tmp -[2024-10-13 17:27:13] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/cloudflare/feed/?simply_static_page=470 -[2024-10-13 17:27:13] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/cloudflare/feed/?simply_static_page=470 -[2024-10-13 17:27:14] [class-ss-url-fetcher.php:103] Filesize: 42049 bytes -[2024-10-13 17:27:14] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:14] [class-ss-url-fetcher.php:233] New filename for static page: category/cloudflare/feed/index.xml -[2024-10-13 17:27:14] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f1a8f13-DmJnCz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/feed/index.xml -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:159] Adding 15 URLs to the queue -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:14] [class-ss-page.php:119] Checking Content Identical:0e34aa02250e3fb1024dc21b0c752f57bd660447===. Value: FALSE -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/42 -[2024-10-13 17:27:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 251 -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/42 -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/networking/feed/ -[2024-10-13 17:27:14] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 251 -[2024-10-13 17:27:14] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:14] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f2f01c2-kCpl3f.tmp -[2024-10-13 17:27:14] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/networking/feed/?simply_static_page=472 -[2024-10-13 17:27:14] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/networking/feed/?simply_static_page=472 -[2024-10-13 17:27:15] [class-ss-url-fetcher.php:103] Filesize: 34179 bytes -[2024-10-13 17:27:15] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:15] [class-ss-url-fetcher.php:233] New filename for static page: category/networking/feed/index.xml -[2024-10-13 17:27:15] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f2f01c2-kCpl3f.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/feed/index.xml -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:159] Adding 10 URLs to the queue -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:15] [class-ss-page.php:119] Checking Content Identical:ba572164543dfd976310965ddccb4dce7b257a76===. Value: FALSE -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/64 -[2024-10-13 17:27:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 251 -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/64 -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/docker/feed/ -[2024-10-13 17:27:15] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 251 -[2024-10-13 17:27:15] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:15] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f3aba23-JcbUP3.tmp -[2024-10-13 17:27:15] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/docker/feed/?simply_static_page=474 -[2024-10-13 17:27:15] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/docker/feed/?simply_static_page=474 -[2024-10-13 17:27:17] [class-ss-url-fetcher.php:103] Filesize: 41819 bytes -[2024-10-13 17:27:17] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:17] [class-ss-url-fetcher.php:233] New filename for static page: category/docker/feed/index.xml -[2024-10-13 17:27:17] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f3aba23-JcbUP3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/feed/index.xml -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:17] [class-ss-page.php:119] Checking Content Identical:1b97433938e07c8f92382018448621b3b7fa505d===. Value: FALSE -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/38 -[2024-10-13 17:27:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 251 -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/38 -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ansible/feed/ -[2024-10-13 17:27:17] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 251 -[2024-10-13 17:27:17] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:17] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f5d288d-ZxIdbn.tmp -[2024-10-13 17:27:17] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ansible/feed/?simply_static_page=476 -[2024-10-13 17:27:17] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ansible/feed/?simply_static_page=476 -[2024-10-13 17:27:18] [class-ss-url-fetcher.php:103] Filesize: 18313 bytes -[2024-10-13 17:27:18] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:18] [class-ss-url-fetcher.php:233] New filename for static page: category/ansible/feed/index.xml -[2024-10-13 17:27:18] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f5d288d-ZxIdbn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/feed/index.xml -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:159] Adding 7 URLs to the queue -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:18] [class-ss-page.php:119] Checking Content Identical:2eb2a73eaa7d83a18faa1542fd47b85747eb6766===. Value: FALSE -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/36 -[2024-10-13 17:27:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 251 -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/36 -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/traefik/feed/ -[2024-10-13 17:27:18] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 251 -[2024-10-13 17:27:18] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:18] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f6a786b-1KHmeT.tmp -[2024-10-13 17:27:18] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/traefik/feed/?simply_static_page=478 -[2024-10-13 17:27:18] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/traefik/feed/?simply_static_page=478 -[2024-10-13 17:27:19] [class-ss-url-fetcher.php:103] Filesize: 23038 bytes -[2024-10-13 17:27:19] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:19] [class-ss-url-fetcher.php:233] New filename for static page: category/traefik/feed/index.xml -[2024-10-13 17:27:19] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f6a786b-1KHmeT.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/feed/index.xml -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:159] Adding 11 URLs to the queue -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:19] [class-ss-page.php:119] Checking Content Identical:c6f826b24eaf633ea00e0ac98ba41c5d8566dd9a===. Value: FALSE -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/41 -[2024-10-13 17:27:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 251 -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/41 -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/ci-cd/feed/ -[2024-10-13 17:27:19] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 251 -[2024-10-13 17:27:19] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:19] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f78423f-xYa0A9.tmp -[2024-10-13 17:27:19] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/ci-cd/feed/?simply_static_page=480 -[2024-10-13 17:27:19] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/ci-cd/feed/?simply_static_page=480 -[2024-10-13 17:27:20] [class-ss-url-fetcher.php:103] Filesize: 10532 bytes -[2024-10-13 17:27:20] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:20] [class-ss-url-fetcher.php:233] New filename for static page: category/ci-cd/feed/index.xml -[2024-10-13 17:27:20] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f78423f-xYa0A9.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/feed/index.xml -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:20] [class-ss-page.php:119] Checking Content Identical:0c4de4d107d447f28fe7fbdb06832b946f65efc4===. Value: FALSE -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/34 -[2024-10-13 17:27:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 251 -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/34 -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/teamcity/feed/ -[2024-10-13 17:27:20] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 251 -[2024-10-13 17:27:20] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:20] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f85d2d8-Rh8QB6.tmp -[2024-10-13 17:27:20] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/teamcity/feed/?simply_static_page=482 -[2024-10-13 17:27:20] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/teamcity/feed/?simply_static_page=482 -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:103] Filesize: 10541 bytes -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:233] New filename for static page: category/teamcity/feed/index.xml -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f85d2d8-Rh8QB6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/feed/index.xml -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:21] [class-ss-page.php:119] Checking Content Identical:230f0172a70c67ae979126dd448d303cf373a304===. Value: FALSE -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/37 -[2024-10-13 17:27:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 251 -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/37 -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/category/oci/feed/ -[2024-10-13 17:27:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 251 -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f91acf0-DPwiGh.tmp -[2024-10-13 17:27:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/category/oci/feed/?simply_static_page=484 -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/category/oci/feed/?simply_static_page=484 -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:103] Filesize: 5749 bytes -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:233] New filename for static page: category/oci/feed/index.xml -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f91acf0-DPwiGh.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/feed/index.xml -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:159] Adding 14 URLs to the queue -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:21] [class-ss-page.php:119] Checking Content Identical:4f70da49cc6cf709ff9c4c5f3684fb0ea3beef8a===. Value: FALSE -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/categories/39 -[2024-10-13 17:27:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 251 -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/categories/39 -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/authentication/ -[2024-10-13 17:27:21] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 251 -[2024-10-13 17:27:21] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02f9ebab1-yyPxs4.tmp -[2024-10-13 17:27:21] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/authentication/?simply_static_page=486 -[2024-10-13 17:27:21] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/authentication/?simply_static_page=486 -[2024-10-13 17:27:22] [class-ss-url-fetcher.php:103] Filesize: 66327 bytes -[2024-10-13 17:27:22] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:22] [class-ss-url-fetcher.php:233] New filename for static page: tag/authentication/index.html -[2024-10-13 17:27:22] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02f9ebab1-yyPxs4.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/index.html -[2024-10-13 17:27:22] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:22] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:27:22] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:22] [class-ss-page.php:119] Checking Content Identical:98b69d793893adaa3e3214f0a6f517fcb4b0aa67===. Value: FALSE -[2024-10-13 17:27:22] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/react/ -[2024-10-13 17:27:23] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 251 -[2024-10-13 17:27:23] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02fb017f6-35KGYw.tmp -[2024-10-13 17:27:23] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/react/?simply_static_page=487 -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/react/?simply_static_page=487 -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:103] Filesize: 66282 bytes -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:233] New filename for static page: tag/react/index.html -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02fb017f6-35KGYw.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/index.html -[2024-10-13 17:27:23] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:23] [class-ss-fetch-urls-task.php:159] Adding 23 URLs to the queue -[2024-10-13 17:27:23] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:23] [class-ss-page.php:119] Checking Content Identical:cc891d7b0b80449adddf14e5f62893dd12b7de2e===. Value: FALSE -[2024-10-13 17:27:23] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/typescript/ -[2024-10-13 17:27:23] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 251 -[2024-10-13 17:27:23] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02fbebe7f-KTmiLL.tmp -[2024-10-13 17:27:23] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/typescript/?simply_static_page=488 -[2024-10-13 17:27:23] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/typescript/?simply_static_page=488 -[2024-10-13 17:27:24] [class-ss-url-fetcher.php:103] Filesize: 68239 bytes -[2024-10-13 17:27:24] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:24] [class-ss-url-fetcher.php:233] New filename for static page: tag/typescript/index.html -[2024-10-13 17:27:24] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02fbebe7f-KTmiLL.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/index.html -[2024-10-13 17:27:24] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:24] [class-ss-fetch-urls-task.php:159] Adding 25 URLs to the queue -[2024-10-13 17:27:24] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:24] [class-ss-page.php:119] Checking Content Identical:54fa328deb60af8a109f84d9f7d0dbe86d255514===. Value: FALSE -[2024-10-13 17:27:24] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4 -[2024-10-13 17:27:24] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 251 -[2024-10-13 17:27:24] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:24] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02fcdd556-R0tHkk.tmp -[2024-10-13 17:27:24] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4?simply_static_page=489 -[2024-10-13 17:27:24] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4?simply_static_page=489 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:103] Filesize: 29730 bytes -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: video/mp4 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/otp-countdown.mp4 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02fcdd556-R0tHkk.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/otp-countdown.mp4 -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:25] [class-ss-page.php:119] Checking Content Identical:d6e77f2d22a0d6338dbb57e2d56ad1188fe2a2a2===. Value: FALSE -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/ -[2024-10-13 17:27:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 251 -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02fd30415-slI8zr.tmp -[2024-10-13 17:27:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/?simply_static_page=490 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/?simply_static_page=490 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:103] Filesize: 943 bytes -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02fd30415-slI8zr.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:25] [class-ss-page.php:119] Checking Content Identical:a3c260c1e6a70f81a669e26f0c4681b7ae6863ab===. Value: FALSE -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/546 -[2024-10-13 17:27:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 251 -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/546 -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/portfolio/feed/ -[2024-10-13 17:27:25] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 251 -[2024-10-13 17:27:25] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02fdce6c0-6z67E3.tmp -[2024-10-13 17:27:25] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/portfolio/feed/?simply_static_page=492 -[2024-10-13 17:27:25] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/portfolio/feed/?simply_static_page=492 -[2024-10-13 17:27:26] [class-ss-url-fetcher.php:103] Filesize: 14743 bytes -[2024-10-13 17:27:26] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:26] [class-ss-url-fetcher.php:233] New filename for static page: tag/portfolio/feed/index.xml -[2024-10-13 17:27:26] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02fdce6c0-6z67E3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/feed/index.xml -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:159] Adding 50 URLs to the queue -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:26] [class-ss-page.php:119] Checking Content Identical:946b882f82cfee80ed8e1057d164387831ef308e===. Value: FALSE -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/47 -[2024-10-13 17:27:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 251 -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/47 -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/graphql/ -[2024-10-13 17:27:26] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 251 -[2024-10-13 17:27:26] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:26] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02fe985bb-PU653J.tmp -[2024-10-13 17:27:26] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/graphql/?simply_static_page=494 -[2024-10-13 17:27:26] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/graphql/?simply_static_page=494 -[2024-10-13 17:27:27] [class-ss-url-fetcher.php:103] Filesize: 67268 bytes -[2024-10-13 17:27:27] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:27] [class-ss-url-fetcher.php:233] New filename for static page: tag/graphql/index.html -[2024-10-13 17:27:27] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02fe985bb-PU653J.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/index.html -[2024-10-13 17:27:27] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:27] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:27:27] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:27] [class-ss-page.php:119] Checking Content Identical:620532b52e812d95458de0ca5aab59b24bd12613===. Value: FALSE -[2024-10-13 17:27:27] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/keystonejs/ -[2024-10-13 17:27:27] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 251 -[2024-10-13 17:27:27] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:27] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c02ff8d7a9-yRuRvc.tmp -[2024-10-13 17:27:27] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/keystonejs/?simply_static_page=495 -[2024-10-13 17:27:27] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/keystonejs/?simply_static_page=495 -[2024-10-13 17:27:28] [class-ss-url-fetcher.php:103] Filesize: 67283 bytes -[2024-10-13 17:27:28] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:28] [class-ss-url-fetcher.php:233] New filename for static page: tag/keystonejs/index.html -[2024-10-13 17:27:28] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c02ff8d7a9-yRuRvc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/index.html -[2024-10-13 17:27:28] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:28] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:27:28] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:28] [class-ss-page.php:119] Checking Content Identical:ece192b7ce8815937be44b91da9112ed2ecd4f4b===. Value: FALSE -[2024-10-13 17:27:28] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/nodejs/ -[2024-10-13 17:27:28] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 251 -[2024-10-13 17:27:28] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:28] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03009114b-DzcwOi.tmp -[2024-10-13 17:27:28] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/nodejs/?simply_static_page=496 -[2024-10-13 17:27:28] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/nodejs/?simply_static_page=496 -[2024-10-13 17:27:29] [class-ss-url-fetcher.php:103] Filesize: 67263 bytes -[2024-10-13 17:27:29] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:29] [class-ss-url-fetcher.php:233] New filename for static page: tag/nodejs/index.html -[2024-10-13 17:27:29] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03009114b-DzcwOi.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/index.html -[2024-10-13 17:27:29] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:29] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:27:29] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:29] [class-ss-page.php:119] Checking Content Identical:06d563665aa7a458a78b7edab77126dbe820c2b1===. Value: FALSE -[2024-10-13 17:27:29] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/prisma/ -[2024-10-13 17:27:29] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 251 -[2024-10-13 17:27:29] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:29] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03017f3bd-iC5ew6.tmp -[2024-10-13 17:27:29] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/prisma/?simply_static_page=497 -[2024-10-13 17:27:29] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/prisma/?simply_static_page=497 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:103] Filesize: 67263 bytes -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:233] New filename for static page: tag/prisma/index.html -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03017f3bd-iC5ew6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/index.html -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:159] Adding 24 URLs to the queue -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:30] [class-ss-page.php:119] Checking Content Identical:5e187c95805839d23bcc6dc2929c72a753c3885b===. Value: FALSE -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min.webp -[2024-10-13 17:27:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 251 -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030284a4d-stmWKm.tmp -[2024-10-13 17:27:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min.webp?simply_static_page=498 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min.webp?simply_static_page=498 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:103] Filesize: 8498 bytes -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-init-min.webp -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030284a4d-stmWKm.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min.webp -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:30] [class-ss-page.php:119] Checking Content Identical:0d6df3b8b294d5b48499cb59e9f022b71d5e3c39===. Value: FALSE -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-300x239.webp -[2024-10-13 17:27:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 251 -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0302c6a24-DeRxUm.tmp -[2024-10-13 17:27:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-300x239.webp?simply_static_page=499 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-300x239.webp?simply_static_page=499 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:103] Filesize: 4474 bytes -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-init-min-300x239.webp -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0302c6a24-DeRxUm.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-300x239.webp -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:30] [class-ss-page.php:119] Checking Content Identical:15b82df4062571ba1d5061984f42cc2c78365f9b===. Value: FALSE -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-768x612.webp -[2024-10-13 17:27:30] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 251 -[2024-10-13 17:27:30] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0302e9294-TUtyV3.tmp -[2024-10-13 17:27:30] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-768x612.webp?simply_static_page=500 -[2024-10-13 17:27:30] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-init-min-768x612.webp?simply_static_page=500 -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:103] Filesize: 15162 bytes -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-init-min-768x612.webp -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0302e9294-TUtyV3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-768x612.webp -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:31] [class-ss-page.php:119] Checking Content Identical:f2aefb9509977f4537a22fe150711f1ea6c9cfdd===. Value: FALSE -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp -[2024-10-13 17:27:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 251 -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03033b916-Z7nbFI.tmp -[2024-10-13 17:27:31] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp?simply_static_page=501 -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp?simply_static_page=501 -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:103] Filesize: 15766 bytes -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03033b916-Z7nbFI.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:31] [class-ss-page.php:119] Checking Content Identical:f3b7c807c36578329e7b71a9c35c3f290a6f0e06===. Value: FALSE -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp -[2024-10-13 17:27:31] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 251 -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0303802eb-iUtFv3.tmp -[2024-10-13 17:27:31] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp?simply_static_page=502 -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp?simply_static_page=502 -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:103] Filesize: 3046 bytes -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp -[2024-10-13 17:27:31] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0303802eb-iUtFv3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:31] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:31] [class-ss-page.php:119] Checking Content Identical:9c6d2a917d32b378ccd3de1c931affa38c13ee9c===. Value: FALSE -[2024-10-13 17:27:31] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 176 of 251 pages/files -[2024-10-13 17:27:31] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:27:32] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:27:32] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:69] Total pages: 276; Pages remaining: 50 -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp -[2024-10-13 17:27:32] [class-ss-task.php:58] [PAGES STATUS] Remaining:50; Total: 276 -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0304605b3-xvm38d.tmp -[2024-10-13 17:27:32] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp?simply_static_page=503 -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp?simply_static_page=503 -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:103] Filesize: 10888 bytes -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0304605b3-xvm38d.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:32] [class-ss-page.php:119] Checking Content Identical:2dc9eef4a5ab719d687551728bb0d3f1e7e56f4f===. Value: FALSE -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min.webp -[2024-10-13 17:27:32] [class-ss-task.php:58] [PAGES STATUS] Remaining:49; Total: 276 -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0304a8982-JvIP3H.tmp -[2024-10-13 17:27:32] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min.webp?simply_static_page=504 -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/keystone-dashboard-min.webp?simply_static_page=504 -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:103] Filesize: 7062 bytes -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/keystone-dashboard-min.webp -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0304a8982-JvIP3H.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min.webp -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:32] [class-ss-page.php:119] Checking Content Identical:f6c7b3cb0007fdb5f5cfd1a263d763944ef2153f===. Value: FALSE -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-1024x572.webp -[2024-10-13 17:27:32] [class-ss-task.php:58] [PAGES STATUS] Remaining:48; Total: 276 -[2024-10-13 17:27:32] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0304cd53b-e3memS.tmp -[2024-10-13 17:27:32] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-1024x572.webp?simply_static_page=505 -[2024-10-13 17:27:32] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-1024x572.webp?simply_static_page=505 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:103] Filesize: 24070 bytes -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min-1024x572.webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0304cd53b-e3memS.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-1024x572.webp -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:33] [class-ss-page.php:119] Checking Content Identical:0b6951bf7d654ba395aa7ee9270b6a5b18106539===. Value: FALSE -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-300x167.webp -[2024-10-13 17:27:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:47; Total: 276 -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0305210ef-g2jMZJ.tmp -[2024-10-13 17:27:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-300x167.webp?simply_static_page=506 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-300x167.webp?simply_static_page=506 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:103] Filesize: 4130 bytes -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min-300x167.webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0305210ef-g2jMZJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-300x167.webp -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:33] [class-ss-page.php:119] Checking Content Identical:c751f2aa3e5dab1ee1991c31128a79844ac5f077===. Value: FALSE -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-768x429.webp -[2024-10-13 17:27:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:46; Total: 276 -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030561bf1-6W5soA.tmp -[2024-10-13 17:27:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-768x429.webp?simply_static_page=507 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min-768x429.webp?simply_static_page=507 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:103] Filesize: 16250 bytes -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min-768x429.webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030561bf1-6W5soA.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-768x429.webp -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:33] [class-ss-page.php:119] Checking Content Identical:8f126cf07085d2c81cc9b3410a59286d9b19f741===. Value: FALSE -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min.webp -[2024-10-13 17:27:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:45; Total: 276 -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0305a9e02-oZP0cO.tmp -[2024-10-13 17:27:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/create-token-min.webp?simply_static_page=508 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/create-token-min.webp?simply_static_page=508 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:103] Filesize: 10490 bytes -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/create-token-min.webp -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0305a9e02-oZP0cO.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min.webp -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:33] [class-ss-page.php:119] Checking Content Identical:96e637a807982bd6423869c246b7c277551567cb===. Value: FALSE -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp -[2024-10-13 17:27:33] [class-ss-task.php:58] [PAGES STATUS] Remaining:44; Total: 276 -[2024-10-13 17:27:33] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0305f0d5a-H3y8y3.tmp -[2024-10-13 17:27:33] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp?simply_static_page=509 -[2024-10-13 17:27:33] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp?simply_static_page=509 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:103] Filesize: 14542 bytes -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0305f0d5a-H3y8y3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:34] [class-ss-page.php:119] Checking Content Identical:ef969460b8f4e586283c4c74843421e00c90effc===. Value: FALSE -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp -[2024-10-13 17:27:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:43; Total: 276 -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0306264fb-yCJaZH.tmp -[2024-10-13 17:27:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp?simply_static_page=510 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp?simply_static_page=510 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:103] Filesize: 2562 bytes -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0306264fb-yCJaZH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:34] [class-ss-page.php:119] Checking Content Identical:35d0b83cbeeda9c8b16edc3cd807a3d414e6e2c8===. Value: FALSE -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp -[2024-10-13 17:27:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:42; Total: 276 -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03066cb91-JaycDD.tmp -[2024-10-13 17:27:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp?simply_static_page=511 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp?simply_static_page=511 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:103] Filesize: 9512 bytes -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03066cb91-JaycDD.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:34] [class-ss-page.php:119] Checking Content Identical:9cd58c29f2df6b644965c75264fe5e0cc6ae4df9===. Value: FALSE -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp -[2024-10-13 17:27:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:41; Total: 276 -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0306b65ba-gZ6i3V.tmp -[2024-10-13 17:27:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp?simply_static_page=512 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp?simply_static_page=512 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:103] Filesize: 24188 bytes -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0306b65ba-gZ6i3V.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:34] [class-ss-page.php:119] Checking Content Identical:cc4a183bede73c1284a13c9bf5bfc6007abcfffd===. Value: FALSE -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min.webp -[2024-10-13 17:27:34] [class-ss-task.php:58] [PAGES STATUS] Remaining:40; Total: 276 -[2024-10-13 17:27:34] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0306dea34-DfaV7y.tmp -[2024-10-13 17:27:34] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min.webp?simply_static_page=513 -[2024-10-13 17:27:34] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/display-token-dashboard-min.webp?simply_static_page=513 -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:103] Filesize: 12200 bytes -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/display-token-dashboard-min.webp -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0306dea34-DfaV7y.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min.webp -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:35] [class-ss-page.php:119] Checking Content Identical:80ec1c0929e41ae677b8c9c81caef27c16130530===. Value: FALSE -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/ -[2024-10-13 17:27:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:39; Total: 276 -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0307325b4-c5NGy3.tmp -[2024-10-13 17:27:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/?simply_static_page=514 -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/?simply_static_page=514 -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:103] Filesize: 920 bytes -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0307325b4-c5NGy3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:35] [class-ss-page.php:119] Checking Content Identical:254e6e8aebb6953ce960e07fa7b34b19ebe951af===. Value: FALSE -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/533 -[2024-10-13 17:27:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:38; Total: 276 -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/533 -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/upwork-project/feed/ -[2024-10-13 17:27:35] [class-ss-task.php:58] [PAGES STATUS] Remaining:37; Total: 276 -[2024-10-13 17:27:35] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0307dc849-XneJqv.tmp -[2024-10-13 17:27:35] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/upwork-project/feed/?simply_static_page=516 -[2024-10-13 17:27:35] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/upwork-project/feed/?simply_static_page=516 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:103] Filesize: 4281 bytes -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:233] New filename for static page: tag/upwork-project/feed/index.xml -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0307dc849-XneJqv.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/feed/index.xml -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:159] Adding 4 URLs to the queue -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:36] [class-ss-page.php:119] Checking Content Identical:05ca14278f95976622c812b3db1b332283049dcb===. Value: FALSE -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/66 -[2024-10-13 17:27:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:36; Total: 276 -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/66 -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/icon-exclamation.png -[2024-10-13 17:27:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:35; Total: 276 -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030894bf5-ftHXHc.tmp -[2024-10-13 17:27:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/icon-exclamation.png?simply_static_page=518 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/icon-exclamation.png?simply_static_page=518 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:103] Filesize: 452 bytes -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/icon-exclamation.png -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030894bf5-ftHXHc.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/icon-exclamation.png -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:36] [class-ss-page.php:119] Checking Content Identical:b9f9d500f8814381451011d4dcf59cd2d90ad94f===. Value: FALSE -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-horizontal-arrow.png -[2024-10-13 17:27:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:34; Total: 276 -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0308ada3b-xvxGsT.tmp -[2024-10-13 17:27:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-horizontal-arrow.png?simply_static_page=519 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-horizontal-arrow.png?simply_static_page=519 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:103] Filesize: 537 bytes -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-horizontal-arrow.png -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0308ada3b-xvxGsT.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-horizontal-arrow.png -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:36] [class-ss-page.php:119] Checking Content Identical:8a2e5106528d7049f6add7851da80895faf31fd0===. Value: FALSE -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/browser-bar.png -[2024-10-13 17:27:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:33; Total: 276 -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0308c691c-lgFliz.tmp -[2024-10-13 17:27:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/browser-bar.png?simply_static_page=520 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/browser-bar.png?simply_static_page=520 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:103] Filesize: 715 bytes -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/browser-bar.png -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0308c691c-lgFliz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/browser-bar.png -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:36] [class-ss-page.php:119] Checking Content Identical:3785cc5b3bf52f8e398177b0ff1020b24aa86b8c===. Value: FALSE -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-warn.png -[2024-10-13 17:27:36] [class-ss-task.php:58] [PAGES STATUS] Remaining:32; Total: 276 -[2024-10-13 17:27:36] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0308df767-p3KVyU.tmp -[2024-10-13 17:27:36] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-warn.png?simply_static_page=521 -[2024-10-13 17:27:36] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-warn.png?simply_static_page=521 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 2592 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-no-screenshot-warn.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0308df767-p3KVyU.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-warn.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:5b925e54a66b1241bf1b61a38b9a2068173a50ea===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-error.png -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:31; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030904842-RhBeSK.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-error.png?simply_static_page=522 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-no-screenshot-error.png?simply_static_page=522 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 3213 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-no-screenshot-error.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030904842-RhBeSK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-error.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:aff136a4c761e1df1ada7e5d9a6ed0ebea74a4b7===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-ok.png -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:30; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03091df1e-uKl5V3.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-ok.png?simply_static_page=523 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-ok.png?simply_static_page=523 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 946 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-ok.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03091df1e-uKl5V3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-ok.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:8f2597eb7ba4c89892aac0559816db3f5280b23e===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-error.png -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:29; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030935ffd-MJhrXn.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-error.png?simply_static_page=524 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-error.png?simply_static_page=524 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 854 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-error.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030935ffd-MJhrXn.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-error.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:16946b2c99d98a57f83eac170ce94b012b7d1a7b===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-browser.png -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:28; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03094f1eb-m6V4dM.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-browser.png?simply_static_page=525 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-browser.png?simply_static_page=525 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 484 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-browser.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03094f1eb-m6V4dM.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-browser.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:8024e688e78e910ae1ea3bc25be7a7ab65444b02===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-cloud.png -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:27; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0309676cb-fel8am.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-cloud.png?simply_static_page=526 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-cloud.png?simply_static_page=526 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 1484 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-cloud.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0309676cb-fel8am.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-cloud.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:8f03b6857ab8d31feb65f97b1ae6b678efdc2ddd===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/cdn-cgi/images/cf-icon-server.png -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:26; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0309811b5-oNadDu.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/cdn-cgi/images/cf-icon-server.png?simply_static_page=527 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/cdn-cgi/images/cf-icon-server.png?simply_static_page=527 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 1384 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: cdn-cgi/images/cf-icon-server.png -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0309811b5-oNadDu.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-server.png -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:01dc915d4745f00632021c05d3eef634747a9c3d===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth.webp -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:25; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0309986db-ZdgFoz.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/ente-auth.webp?simply_static_page=528 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth.webp?simply_static_page=528 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 4990 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/ente-auth.webp -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0309986db-ZdgFoz.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth.webp -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:609ad80bc89f47256a5364c6e7f2210de6339775===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-300x103.webp -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:24; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0309cb23c-Ekijqs.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-300x103.webp?simply_static_page=529 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-300x103.webp?simply_static_page=529 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:103] Filesize: 1754 bytes -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/ente-auth-300x103.webp -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0309cb23c-Ekijqs.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-300x103.webp -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:37] [class-ss-page.php:119] Checking Content Identical:136a03b38fa125fd7ca043bb1334bd84c5e7ed6c===. Value: FALSE -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-768x265.webp -[2024-10-13 17:27:37] [class-ss-task.php:58] [PAGES STATUS] Remaining:23; Total: 276 -[2024-10-13 17:27:37] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0309eea89-j1q2Gq.tmp -[2024-10-13 17:27:37] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-768x265.webp?simply_static_page=530 -[2024-10-13 17:27:37] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/ente-auth-768x265.webp?simply_static_page=530 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:103] Filesize: 6900 bytes -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/ente-auth-768x265.webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0309eea89-j1q2Gq.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-768x265.webp -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:38] [class-ss-page.php:119] Checking Content Identical:50a9073b4580a9fc6debc6759c22d54bea0411ba===. Value: FALSE -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend.webp -[2024-10-13 17:27:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:22; Total: 276 -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030a211e2-htLYuH.tmp -[2024-10-13 17:27:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend.webp?simply_static_page=531 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend.webp?simply_static_page=531 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:103] Filesize: 3756 bytes -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/initial-token-frontend.webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030a211e2-htLYuH.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend.webp -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:38] [class-ss-page.php:119] Checking Content Identical:919eca1ff682e82f1140553c3957ee269bf16a89===. Value: FALSE -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp -[2024-10-13 17:27:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:21; Total: 276 -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030a4513b-zgR5dG.tmp -[2024-10-13 17:27:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp?simply_static_page=532 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp?simply_static_page=532 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:103] Filesize: 1262 bytes -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/initial-token-frontend-300x103.webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030a4513b-zgR5dG.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:38] [class-ss-page.php:119] Checking Content Identical:e019e96a4583b93e26b562f282b0a76f643e5560===. Value: FALSE -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp -[2024-10-13 17:27:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:20; Total: 276 -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030a86537-QY7N1I.tmp -[2024-10-13 17:27:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp?simply_static_page=533 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp?simply_static_page=533 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:103] Filesize: 4536 bytes -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/initial-token-frontend-768x265.webp -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030a86537-QY7N1I.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:38] [class-ss-page.php:119] Checking Content Identical:1eb89a872db2cd5da6be1595dfd0f5d09b231133===. Value: FALSE -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1.png -[2024-10-13 17:27:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:19; Total: 276 -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030aac578-V5OEC2.tmp -[2024-10-13 17:27:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/token-display-1.png?simply_static_page=534 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1.png?simply_static_page=534 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:103] Filesize: 4798 bytes -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/token-display-1.png -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030aac578-V5OEC2.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1.png -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:38] [class-ss-page.php:119] Checking Content Identical:34134a92feb5b096515e7e0ecf7d0d5db7cab710===. Value: FALSE -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-300x103.png -[2024-10-13 17:27:38] [class-ss-task.php:58] [PAGES STATUS] Remaining:18; Total: 276 -[2024-10-13 17:27:38] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030aecf97-dAuk9q.tmp -[2024-10-13 17:27:38] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-300x103.png?simply_static_page=535 -[2024-10-13 17:27:38] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-300x103.png?simply_static_page=535 -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:103] Filesize: 1494 bytes -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/token-display-1-300x103.png -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030aecf97-dAuk9q.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-300x103.png -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:39] [class-ss-page.php:119] Checking Content Identical:6196f971bd3c947274aac69dbf73a405bb7ef685===. Value: FALSE -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-768x265.png -[2024-10-13 17:27:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:17; Total: 276 -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030b1e42e-DTmQJ6.tmp -[2024-10-13 17:27:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-768x265.png?simply_static_page=536 -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/wp-content/uploads/2024/03/token-display-1-768x265.png?simply_static_page=536 -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:103] Filesize: 5050 bytes -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: image/png -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:233] New filename for static page: wp-content/uploads/2024/03/token-display-1-768x265.png -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030b1e42e-DTmQJ6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-768x265.png -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:159] Adding 0 URLs to the queue -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:39] [class-ss-page.php:119] Checking Content Identical:68865b91b15d5b8b58174ae783236afa60f48643===. Value: FALSE -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/ -[2024-10-13 17:27:39] [class-ss-task.php:58] [PAGES STATUS] Remaining:16; Total: 276 -[2024-10-13 17:27:39] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030b604b5-D6ctz6.tmp -[2024-10-13 17:27:39] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/?simply_static_page=537 -[2024-10-13 17:27:39] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/?simply_static_page=537 -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:103] Filesize: 943 bytes -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:233] New filename for static page: roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030b604b5-D6ctz6.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:159] Adding 2 URLs to the queue -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:40] [class-ss-page.php:119] Checking Content Identical:7e2b54d86296a16c73d0c9bd85d4138f2cb8a61a===. Value: FALSE -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/posts/539 -[2024-10-13 17:27:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:15; Total: 276 -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/posts/539 -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/authentication/feed/ -[2024-10-13 17:27:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:14; Total: 276 -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030c15727-b8ImO0.tmp -[2024-10-13 17:27:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/authentication/feed/?simply_static_page=539 -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/authentication/feed/?simply_static_page=539 -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:103] Filesize: 8610 bytes -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:233] New filename for static page: tag/authentication/feed/index.xml -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030c15727-b8ImO0.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/feed/index.xml -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:159] Adding 5 URLs to the queue -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:40] [class-ss-page.php:119] Checking Content Identical:767c69512ae1862a66331a094de18047f0bc156f===. Value: FALSE -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/61 -[2024-10-13 17:27:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:13; Total: 276 -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/61 -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/react/feed/ -[2024-10-13 17:27:40] [class-ss-task.php:58] [PAGES STATUS] Remaining:12; Total: 276 -[2024-10-13 17:27:40] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030cb22f3-uB2b83.tmp -[2024-10-13 17:27:40] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/react/feed/?simply_static_page=541 -[2024-10-13 17:27:40] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/react/feed/?simply_static_page=541 -[2024-10-13 17:27:41] [class-ss-url-fetcher.php:103] Filesize: 8583 bytes -[2024-10-13 17:27:41] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:41] [class-ss-url-fetcher.php:233] New filename for static page: tag/react/feed/index.xml -[2024-10-13 17:27:41] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030cb22f3-uB2b83.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/feed/index.xml -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:159] Adding 5 URLs to the queue -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:41] [class-ss-page.php:119] Checking Content Identical:7ee1ef92a96cf1f9657fb3d35e549a26a82f6da8===. Value: FALSE -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/60 -[2024-10-13 17:27:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:11; Total: 276 -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/60 -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/typescript/feed/ -[2024-10-13 17:27:41] [class-ss-task.php:58] [PAGES STATUS] Remaining:10; Total: 276 -[2024-10-13 17:27:41] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:41] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030d679ba-o8l3SJ.tmp -[2024-10-13 17:27:41] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/typescript/feed/?simply_static_page=543 -[2024-10-13 17:27:41] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/typescript/feed/?simply_static_page=543 -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:103] Filesize: 27059 bytes -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:233] New filename for static page: tag/typescript/feed/index.xml -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030d679ba-o8l3SJ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/feed/index.xml -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:159] Adding 32 URLs to the queue -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:42] [class-ss-page.php:119] Checking Content Identical:a3dcdde51b3bee6b504fce455760cb8ee80d4a16===. Value: FALSE -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/58 -[2024-10-13 17:27:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:9; Total: 276 -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/58 -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/graphql/feed/ -[2024-10-13 17:27:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:8; Total: 276 -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030e3c0d6-JrjCy7.tmp -[2024-10-13 17:27:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/graphql/feed/?simply_static_page=545 -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/graphql/feed/?simply_static_page=545 -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:103] Filesize: 19594 bytes -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:233] New filename for static page: tag/graphql/feed/index.xml -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030e3c0d6-JrjCy7.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/feed/index.xml -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:42] [class-ss-page.php:119] Checking Content Identical:14c34df7e62ad7943634eb86fd4b41db5c421006===. Value: FALSE -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/57 -[2024-10-13 17:27:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:7; Total: 276 -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/57 -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/keystonejs/feed/ -[2024-10-13 17:27:42] [class-ss-task.php:58] [PAGES STATUS] Remaining:6; Total: 276 -[2024-10-13 17:27:42] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030ef379b-OwL3fQ.tmp -[2024-10-13 17:27:42] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/keystonejs/feed/?simply_static_page=547 -[2024-10-13 17:27:42] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/keystonejs/feed/?simply_static_page=547 -[2024-10-13 17:27:43] [class-ss-url-fetcher.php:103] Filesize: 19603 bytes -[2024-10-13 17:27:43] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:43] [class-ss-url-fetcher.php:233] New filename for static page: tag/keystonejs/feed/index.xml -[2024-10-13 17:27:43] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030ef379b-OwL3fQ.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/feed/index.xml -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:43] [class-ss-page.php:119] Checking Content Identical:2f3f73ee662dfb43f4d6b4c11537fe9bba5ed1d7===. Value: FALSE -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/55 -[2024-10-13 17:27:43] [class-ss-task.php:58] [PAGES STATUS] Remaining:5; Total: 276 -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/55 -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/nodejs/feed/ -[2024-10-13 17:27:43] [class-ss-task.php:58] [PAGES STATUS] Remaining:4; Total: 276 -[2024-10-13 17:27:43] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:43] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c030fc00f1-cnM014.tmp -[2024-10-13 17:27:43] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/nodejs/feed/?simply_static_page=549 -[2024-10-13 17:27:43] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/nodejs/feed/?simply_static_page=549 -[2024-10-13 17:27:44] [class-ss-url-fetcher.php:103] Filesize: 19591 bytes -[2024-10-13 17:27:44] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:44] [class-ss-url-fetcher.php:233] New filename for static page: tag/nodejs/feed/index.xml -[2024-10-13 17:27:44] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c030fc00f1-cnM014.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/feed/index.xml -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:44] [class-ss-page.php:119] Checking Content Identical:43f8ae57162e44a50efb53e4b9319520538e9dbb===. Value: FALSE -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/56 -[2024-10-13 17:27:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:3; Total: 276 -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/56 -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/tag/prisma/feed/ -[2024-10-13 17:27:44] [class-ss-task.php:58] [PAGES STATUS] Remaining:2; Total: 276 -[2024-10-13 17:27:44] [class-ss-fetch-urls-task.php:83] URL is not being excluded -[2024-10-13 17:27:44] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c0310899c1-0WhPj3.tmp -[2024-10-13 17:27:44] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/tag/prisma/feed/?simply_static_page=551 -[2024-10-13 17:27:44] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/tag/prisma/feed/?simply_static_page=551 -[2024-10-13 17:27:45] [class-ss-url-fetcher.php:103] Filesize: 19591 bytes -[2024-10-13 17:27:45] [class-ss-url-fetcher.php:119] http_status_code: 200 | content_type: application/rss+xml; charset=UTF-8 -[2024-10-13 17:27:45] [class-ss-url-fetcher.php:233] New filename for static page: tag/prisma/feed/index.xml -[2024-10-13 17:27:45] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c0310899c1-0WhPj3.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/feed/index.xml -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:152] Extracting URLs and replacing URLs in the static file -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:159] Adding 30 URLs to the queue -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:170] We're saving this URL; keeping the static file -[2024-10-13 17:27:45] [class-ss-page.php:119] Checking Content Identical:b399ba73f57f40bdfdd22477907f133d15f7a5f4===. Value: FALSE -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:72] URL: https://hackanooga.com/wp-json/wp/v2/tags/59 -[2024-10-13 17:27:45] [class-ss-task.php:58] [PAGES STATUS] Remaining:1; Total: 276 -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:79] Excludable found: URL: https://hackanooga.com/wp-json/wp/v2/tags/59 -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:89] Skipping URL because it is no-save and no-follow -[2024-10-13 17:27:45] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 226 of 276 pages/files -[2024-10-13 17:27:45] [class-ss-archive-creation-job.php:181] We're not done with the fetch_urls task yet -[2024-10-13 17:27:45] [class-ss-archive-creation-job.php:136] Current task: fetch_urls -[2024-10-13 17:27:45] [class-ss-archive-creation-job.php:153] Performing task: fetch_urls -[2024-10-13 17:27:45] [class-ss-fetch-urls-task.php:69] Total pages: 276; Pages remaining: 0 -[2024-10-13 17:27:45] [class-ss-task.php:44] Status message: [fetch_urls] Fetched 276 of 276 pages/files -[2024-10-13 17:27:45] [class-ss-archive-creation-job.php:175] We've found our next task: generate_404 -[2024-10-13 17:27:45] [class-ss-archive-creation-job.php:136] Current task: generate_404 -[2024-10-13 17:27:45] [class-ss-archive-creation-job.php:153] Performing task: generate_404 -[2024-10-13 17:27:45] [class-ss-task.php:44] Status message: [generate_404] Generating 404 Page. -[2024-10-13 17:27:45] [class-ss-url-fetcher.php:94] Fetching URL and saving it to: /tmp/670c03115850b-0EIUaK.tmp -[2024-10-13 17:27:45] [class-ss-page-handler.php:38] URL Prepared:https://hackanooga.com/1728840466?simply_static_page=0 -[2024-10-13 17:27:45] [class-ss-url-fetcher.php:251] Fetching URL: https://hackanooga.com/1728840466?simply_static_page=0 -[2024-10-13 17:27:46] [class-ss-url-fetcher.php:103] Filesize: 62544 bytes -[2024-10-13 17:27:46] [class-ss-url-fetcher.php:119] http_status_code: 404 | content_type: text/html; charset=UTF-8 -[2024-10-13 17:27:46] [class-ss-url-fetcher.php:233] New filename for static page: 404/index.html -[2024-10-13 17:27:46] [class-ss-url-fetcher.php:143] Renaming temp file from /tmp/670c03115850b-0EIUaK.tmp to /var/www/html/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/404/index.html -[2024-10-13 17:27:46] [class-ss-generate-404-task.php:119] Replacing URLs in the static file -[2024-10-13 17:27:46] [class-ss-generate-404-task.php:125] We're saving this URL; keeping the static file -[2024-10-13 17:27:46] [class-ss-page.php:119] Checking Content Identical:3c3962e892088d0454582493dc6e71029ef73e64===. Value: FALSE -[2024-10-13 17:27:46] [class-ss-task.php:44] Status message: [generate_404] 404 Page generated -[2024-10-13 17:27:46] [class-ss-archive-creation-job.php:175] We've found our next task: create_zip_archive -[2024-10-13 17:27:46] [class-ss-archive-creation-job.php:136] Current task: create_zip_archive -[2024-10-13 17:27:46] [class-ss-archive-creation-job.php:153] Performing task: create_zip_archive -[2024-10-13 17:27:46] [class-ss-create-zip-archive.php:71] Fetching list of files to include in zip -[2024-10-13 17:27:46] [class-ss-create-zip-archive.php:80] Creating zip archive -[2024-10-13 17:27:47] [class-ss-task.php:44] Status message: [create_zip_archive] ZIP archive created: Click here to download -[2024-10-13 17:27:47] [class-ss-archive-creation-job.php:175] We've found our next task: wrapup -[2024-10-13 17:27:47] [class-ss-archive-creation-job.php:136] Current task: wrapup -[2024-10-13 17:27:47] [class-ss-archive-creation-job.php:153] Performing task: wrapup -[2024-10-13 17:27:47] [class-ss-wrapup-task.php:22] Deleting temporary files -[2024-10-13 17:27:47] [class-ss-task.php:44] Status message: [wrapup] Wrapping up -[2024-10-13 17:27:47] [class-ss-archive-creation-job.php:170] This task is done and there are no more tasks, time to complete the job -[2024-10-13 17:27:47] [class-ss-archive-creation-job.php:197] Completing the job -[2024-10-13 17:27:47] [class-ss-archive-creation-job.php:324] Status message: [done] Done! Finished in 00:04:41 diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186.zip b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186.zip deleted file mode 100644 index 3faef31..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186.zip and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/404/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/404/index.html deleted file mode 100644 index acfc8e8..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/404/index.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - -Page not found – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-

Error 404

- - - -

It seems like we couldn’t find the page you’re looking for. You can - search for it in the form below.

- - -
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/feed/index.xml deleted file mode 100644 index 13283e0..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Automating CI/CD with TeamCity and Ansible - - /automating-ci-cd-with-teamcity-ansible/ - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:24 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/index.html deleted file mode 100644 index 9d7d02f..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/automating-ci-cd-with-teamcity-ansible/index.html +++ /dev/null @@ -1,559 +0,0 @@ - - - - - - -Automating CI/CD with TeamCity and Ansible – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Automating CI/CD with TeamCity and Ansible

-
- - - - -
-

In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-
- - -
-
-
-

In

- - -
-, , , -
-
- - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/blog/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/blog/index.html deleted file mode 100644 index 4f344e3..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/blog/index.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - -Blog – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-

Blog

- - - - -
-

- - - -
    -
  • - -
    -

    Standing up a Wireguard VPN

    - -
    -

    VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Hardening your web server by only allowing traffic from Cloudflare

    - -
    -

    Harden your origin server by only allowing access from Cloudflare IP addresses.

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Debugging running Nginx config

    - -
    -

    I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Fun with bots – SSH tarpitting

    - -
    -

    For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this: A tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Traefik 3.0 service discovery in Docker Swarm mode

    - -
    -

    I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Stop all running containers with Docker

    - -
    -

    These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this: Let me break this down in case…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Automating CI/CD with TeamCity and Ansible

    - -
    -

    In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Self hosted package registries with Gitea

    - -
    -

    I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Traefik with Let’s Encrypt and Cloudflare (pt 2)

    - -
    -

    In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this…

    -

    Read More

    -
    - - -
    - -
  • -
  • - -
    -

    Traefik with Let’s Encrypt and Cloudflare (pt 1)

    - -
    -

    Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and…

    -

    Read More

    -
    - - -
    - -
  • -
-
- - -
-
-
- - - - - - -
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/feed/index.xml deleted file mode 100644 index e37b6ad..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/feed/index.xml +++ /dev/null @@ -1,475 +0,0 @@ - - - - Ansible – hackanooga - - / - Confessions of a homelab hacker - Sat, 11 May 2024 13:44:01 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Ansible – hackanooga - / - 32 - 32 - - - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Automating CI/CD with TeamCity and Ansible - /automating-ci-cd-with-teamcity-ansible/ - - - Mon, 11 Mar 2024 13:37:47 +0000 - - - - - - https://wordpress.hackanooga.com/?p=393 - - - In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/index.html deleted file mode 100644 index b67f9a5..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ansible/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -Ansible – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Ansible -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/feed/index.xml deleted file mode 100644 index 0eb84a9..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/feed/index.xml +++ /dev/null @@ -1,1196 +0,0 @@ - - - - Automation – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Automation – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Stop all running containers with Docker - /stop-all-running-containers-with-docker/ - - - Wed, 03 Apr 2024 13:12:41 +0000 - - - - - /?p=557 - - - These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this:

- - - -
docker container stop $(docker container ps -q)
- - - -

Let me break this down in case you are not familiar with the syntax. Basically we are passing the output of docker container ps -q into docker container stop. This works because the stop command can take a list of container ids which is what we get when passing the -q flag to docker container ps.

-]]>
- - - -
- - Automating CI/CD with TeamCity and Ansible - /automating-ci-cd-with-teamcity-ansible/ - - - Mon, 11 Mar 2024 13:37:47 +0000 - - - - - - https://wordpress.hackanooga.com/?p=393 - - - In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-]]>
- - - -
- - Self hosted package registries with Gitea - /self-hosted-package-registries-with-gitea/ - - - Thu, 07 Mar 2024 15:07:07 +0000 - - - - - - https://wordpress.hackanooga.com/?p=413 - - - I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 2) - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - - - Thu, 15 Feb 2024 20:19:12 +0000 - - - - - - https://wordpress.hackanooga.com/?p=425 - - - In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/index.html deleted file mode 100644 index 6f1f5c6..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/automation/index.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - -Automation – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Automation -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/feed/index.xml deleted file mode 100644 index fde3aa7..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/feed/index.xml +++ /dev/null @@ -1,285 +0,0 @@ - - - - CI/CD – hackanooga - - / - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:24 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - CI/CD – hackanooga - / - 32 - 32 - - - Automating CI/CD with TeamCity and Ansible - /automating-ci-cd-with-teamcity-ansible/ - - - Mon, 11 Mar 2024 13:37:47 +0000 - - - - - - https://wordpress.hackanooga.com/?p=393 - - - In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/index.html deleted file mode 100644 index 207d93e..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ci-cd/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -CI/CD – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: CI/CD -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/feed/index.xml deleted file mode 100644 index d4f5b16..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/feed/index.xml +++ /dev/null @@ -1,760 +0,0 @@ - - - - Cloudflare – hackanooga - - / - Confessions of a homelab hacker - Mon, 16 Sep 2024 13:07:16 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Cloudflare – hackanooga - / - 32 - 32 - - - Hardening your web server by only allowing traffic from Cloudflare - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - - - Thu, 01 Aug 2024 21:02:29 +0000 - - - - - - /?p=607 - - - TDLR: - - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-]]>
- - - -
- - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 2) - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - - - Thu, 15 Feb 2024 20:19:12 +0000 - - - - - - https://wordpress.hackanooga.com/?p=425 - - - In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 1) - /traefik-with-lets-encrypt-and-cloudflare-pt-1/ - - - Thu, 01 Feb 2024 19:35:00 +0000 - - - - - - https://wordpress.hackanooga.com/?p=422 - - - Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a docker-compose.yaml

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=user@example.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      # Redirect all http requests to https
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-    # Needed to request certs via lets encrypt
-    environment:
-      - CF_DNS_API_TOKEN=[redacted]
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      # Used for storing letsencrypt certificates
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      REDIS_URL: redis://redis:6379/0
-      SECRET_EXPIRY: "604800"
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
-
- - - -

In part one of this series I will be going over some of the basics of Traefik and how dynamic routing works. If you want to skip to the good stuff and get everything configured with Cloudflare, you can skip to part 2.

- - - -

This example set’s up the primary Traefik container which acts as the ingress controller as well as a handy One Time Secret sharing service I use. Traefik handles routing in Docker via labels. For this to work properly the services that Traefik is trying to route to all need to be on the same Docker network. For this example we created a network called traefik by running the following:

- - - -
docker network create traefik
-
- - - -

Let’s take a look at the labels we applied to the ots container a little closer:

- - - -
    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
- - - -

traefik.enable=true – This should be pretty self explanatory but it tells Traefik that we want it to know about this service.

- - - -

traefik.http.routers.ots.rule=Host('ots.example.com') - This is where some of the magic comes in. Here we are defining a router called ots. The name is arbitrary in that it doesn’t have to match the name of the service but for our example it does. There are many rules that you can specify but the easiest for this example is host. Basically we are saying that any request coming in for ots.example.com should be picked up by this router. You can find more options for routers in the Traefik docs.

- - - -

– traefik.http.routers.ots.entrypoints=websecure
– traefik.http.routers.ots.tls=true
– traefik.http.routers.ots.tls.certresolver=letsencrypt

We are using these three labels to tell our router that we want it to use the websecure entrypoint, and that it should use the letsencrypt certresolver to grab it’s certificates. websecure is an arbitrary name that we assigned to our :443 interface. There are multiple ways to configure this, I choose to use the cli format in my traefik config:

- - - -

“`

- - - -
    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      # Our entrypoint names are arbitrary but these are convention.
-      # The important part is the port binding that we associate.
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-
-
- - - -

These last label is optional depending on your setup but it is important to understand as the documentation is a little fuzzy.

- - - -

– traefik.http.services.ots.loadbalancer.server.port=3000

Here’s how it works. Suppose you have a container that exposes multiple ports. Maybe one of those is a web ui and another is something that you don’t want exposed. By default Traefik will try and guess which port to route requests to. My understanding is that it will try and use the first exposed port. However you can override this functionality by using the label above which will tell Traefik specifically which port you want to route to inside the container.

The service name is derived automatically from the definition in the docker compose file:

- - - -

ots: # This will become the service name
image: luzifer/ots
container_name: ots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/index.html deleted file mode 100644 index cb4e8cc..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/cloudflare/index.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - -Cloudflare – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Cloudflare -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/feed/index.xml deleted file mode 100644 index 2b7905b..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/feed/index.xml +++ /dev/null @@ -1,936 +0,0 @@ - - - - Docker – hackanooga - - / - Confessions of a homelab hacker - Wed, 17 Jul 2024 02:15:23 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Docker – hackanooga - / - 32 - 32 - - - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
- - Debugging running Nginx config - /debugging-running-nginx-config/ - - - Wed, 17 Jul 2024 01:42:43 +0000 - - - - - /?p=596 - - - I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running:

- - - -
nginx -t
- - - -

to test my configuration and ensure I don’t have any syntax errors. I was looking for an easy way to view the actual compiled config and found the -T flag which will test the configuration and dump it to standard out. This is pretty handy if you have a large number of includes in various locations. Here is an example from a fresh Nginx Docker container:

- - - -
root@2771f302dc98:/# nginx -T
-nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
-nginx: configuration file /etc/nginx/nginx.conf test is successful
-# configuration file /etc/nginx/nginx.conf:
-
-user  nginx;
-worker_processes  auto;
-
-error_log  /var/log/nginx/error.log notice;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-}
-
-# configuration file /etc/nginx/mime.types:
-
-types {
-    text/html                                        html htm shtml;
-    text/css                                         css;
-    text/xml                                         xml;
-    image/gif                                        gif;
-    image/jpeg                                       jpeg jpg;
-    application/javascript                           js;
-    application/atom+xml                             atom;
-    application/rss+xml                              rss;
-
-    text/mathml                                      mml;
-    text/plain                                       txt;
-    text/vnd.sun.j2me.app-descriptor                 jad;
-    text/vnd.wap.wml                                 wml;
-    text/x-component                                 htc;
-
-    image/avif                                       avif;
-    image/png                                        png;
-    image/svg+xml                                    svg svgz;
-    image/tiff                                       tif tiff;
-    image/vnd.wap.wbmp                               wbmp;
-    image/webp                                       webp;
-    image/x-icon                                     ico;
-    image/x-jng                                      jng;
-    image/x-ms-bmp                                   bmp;
-
-    font/woff                                        woff;
-    font/woff2                                       woff2;
-
-    application/java-archive                         jar war ear;
-    application/json                                 json;
-    application/mac-binhex40                         hqx;
-    application/msword                               doc;
-    application/pdf                                  pdf;
-    application/postscript                           ps eps ai;
-    application/rtf                                  rtf;
-    application/vnd.apple.mpegurl                    m3u8;
-    application/vnd.google-earth.kml+xml             kml;
-    application/vnd.google-earth.kmz                 kmz;
-    application/vnd.ms-excel                         xls;
-    application/vnd.ms-fontobject                    eot;
-    application/vnd.ms-powerpoint                    ppt;
-    application/vnd.oasis.opendocument.graphics      odg;
-    application/vnd.oasis.opendocument.presentation  odp;
-    application/vnd.oasis.opendocument.spreadsheet   ods;
-    application/vnd.oasis.opendocument.text          odt;
-    application/vnd.openxmlformats-officedocument.presentationml.presentation
-                                                     pptx;
-    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-                                                     xlsx;
-    application/vnd.openxmlformats-officedocument.wordprocessingml.document
-                                                     docx;
-    application/vnd.wap.wmlc                         wmlc;
-    application/wasm                                 wasm;
-    application/x-7z-compressed                      7z;
-    application/x-cocoa                              cco;
-    application/x-java-archive-diff                  jardiff;
-    application/x-java-jnlp-file                     jnlp;
-    application/x-makeself                           run;
-    application/x-perl                               pl pm;
-    application/x-pilot                              prc pdb;
-    application/x-rar-compressed                     rar;
-    application/x-redhat-package-manager             rpm;
-    application/x-sea                                sea;
-    application/x-shockwave-flash                    swf;
-    application/x-stuffit                            sit;
-    application/x-tcl                                tcl tk;
-    application/x-x509-ca-cert                       der pem crt;
-    application/x-xpinstall                          xpi;
-    application/xhtml+xml                            xhtml;
-    application/xspf+xml                             xspf;
-    application/zip                                  zip;
-
-    application/octet-stream                         bin exe dll;
-    application/octet-stream                         deb;
-    application/octet-stream                         dmg;
-    application/octet-stream                         iso img;
-    application/octet-stream                         msi msp msm;
-
-    audio/midi                                       mid midi kar;
-    audio/mpeg                                       mp3;
-    audio/ogg                                        ogg;
-    audio/x-m4a                                      m4a;
-    audio/x-realaudio                                ra;
-
-    video/3gpp                                       3gpp 3gp;
-    video/mp2t                                       ts;
-    video/mp4                                        mp4;
-    video/mpeg                                       mpeg mpg;
-    video/quicktime                                  mov;
-    video/webm                                       webm;
-    video/x-flv                                      flv;
-    video/x-m4v                                      m4v;
-    video/x-mng                                      mng;
-    video/x-ms-asf                                   asx asf;
-    video/x-ms-wmv                                   wmv;
-    video/x-msvideo                                  avi;
-}
-
-# configuration file /etc/nginx/conf.d/default.conf:
-server {
-    listen       80;
-    server_name  localhost;
-
-    #access_log  /var/log/nginx/host.access.log  main;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-    }
-
-    #error_page  404              /404.html;
-
-    # redirect server error pages to the static page /50x.html
-    #
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-
-    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-    #
-    #location ~ \.php$ {
-    #    proxy_pass   http://127.0.0.1;/
-    #}
-
-    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-    #
-    #location ~ \.php$ {
-    #    root           html;
-    #    fastcgi_pass   127.0.0.1:9000;
-    #    fastcgi_index  index.php;
-    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-    #    include        fastcgi_params;
-    #}
-
-    # deny access to .htaccess files, if Apache's document root
-    # concurs with nginx's one
-    #
-    #location ~ /\.ht {
-    #    deny  all;
-    #}
-}
-
- - - -

As you can see from the output above, we get all of the various Nginx config files in use printed to the console, perfect for grepping or searching/filtering with other tools.

-]]>
- - - -
- - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Stop all running containers with Docker - /stop-all-running-containers-with-docker/ - - - Wed, 03 Apr 2024 13:12:41 +0000 - - - - - /?p=557 - - - These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this:

- - - -
docker container stop $(docker container ps -q)
- - - -

Let me break this down in case you are not familiar with the syntax. Basically we are passing the output of docker container ps -q into docker container stop. This works because the stop command can take a list of container ids which is what we get when passing the -q flag to docker container ps.

-]]>
- - - -
- - Self hosted package registries with Gitea - /self-hosted-package-registries-with-gitea/ - - - Thu, 07 Mar 2024 15:07:07 +0000 - - - - - - https://wordpress.hackanooga.com/?p=413 - - - I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 2) - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - - - Thu, 15 Feb 2024 20:19:12 +0000 - - - - - - https://wordpress.hackanooga.com/?p=425 - - - In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 1) - /traefik-with-lets-encrypt-and-cloudflare-pt-1/ - - - Thu, 01 Feb 2024 19:35:00 +0000 - - - - - - https://wordpress.hackanooga.com/?p=422 - - - Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a docker-compose.yaml

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=user@example.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      # Redirect all http requests to https
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-    # Needed to request certs via lets encrypt
-    environment:
-      - CF_DNS_API_TOKEN=[redacted]
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      # Used for storing letsencrypt certificates
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      REDIS_URL: redis://redis:6379/0
-      SECRET_EXPIRY: "604800"
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
-
- - - -

In part one of this series I will be going over some of the basics of Traefik and how dynamic routing works. If you want to skip to the good stuff and get everything configured with Cloudflare, you can skip to part 2.

- - - -

This example set’s up the primary Traefik container which acts as the ingress controller as well as a handy One Time Secret sharing service I use. Traefik handles routing in Docker via labels. For this to work properly the services that Traefik is trying to route to all need to be on the same Docker network. For this example we created a network called traefik by running the following:

- - - -
docker network create traefik
-
- - - -

Let’s take a look at the labels we applied to the ots container a little closer:

- - - -
    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
- - - -

traefik.enable=true – This should be pretty self explanatory but it tells Traefik that we want it to know about this service.

- - - -

traefik.http.routers.ots.rule=Host('ots.example.com') - This is where some of the magic comes in. Here we are defining a router called ots. The name is arbitrary in that it doesn’t have to match the name of the service but for our example it does. There are many rules that you can specify but the easiest for this example is host. Basically we are saying that any request coming in for ots.example.com should be picked up by this router. You can find more options for routers in the Traefik docs.

- - - -

– traefik.http.routers.ots.entrypoints=websecure
– traefik.http.routers.ots.tls=true
– traefik.http.routers.ots.tls.certresolver=letsencrypt

We are using these three labels to tell our router that we want it to use the websecure entrypoint, and that it should use the letsencrypt certresolver to grab it’s certificates. websecure is an arbitrary name that we assigned to our :443 interface. There are multiple ways to configure this, I choose to use the cli format in my traefik config:

- - - -

“`

- - - -
    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      # Our entrypoint names are arbitrary but these are convention.
-      # The important part is the port binding that we associate.
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-
-
- - - -

These last label is optional depending on your setup but it is important to understand as the documentation is a little fuzzy.

- - - -

– traefik.http.services.ots.loadbalancer.server.port=3000

Here’s how it works. Suppose you have a container that exposes multiple ports. Maybe one of those is a web ui and another is something that you don’t want exposed. By default Traefik will try and guess which port to route requests to. My understanding is that it will try and use the first exposed port. However you can override this functionality by using the label above which will tell Traefik specifically which port you want to route to inside the container.

The service name is derived automatically from the definition in the docker compose file:

- - - -

ots: # This will become the service name
image: luzifer/ots
container_name: ots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/index.html deleted file mode 100644 index 37249e3..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/docker/index.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -Docker – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Docker -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/feed/index.xml deleted file mode 100644 index 5857a25..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/feed/index.xml +++ /dev/null @@ -1,492 +0,0 @@ - - - - IaC – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - IaC – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/index.html deleted file mode 100644 index 56862f5..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/iac/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -IaC – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: IaC -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/feed/index.xml deleted file mode 100644 index b259495..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/feed/index.xml +++ /dev/null @@ -1,596 +0,0 @@ - - - - Networking – hackanooga - - / - Confessions of a homelab hacker - Mon, 16 Sep 2024 13:07:16 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Networking – hackanooga - / - 32 - 32 - - - Hardening your web server by only allowing traffic from Cloudflare - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - - - Thu, 01 Aug 2024 21:02:29 +0000 - - - - - - /?p=607 - - - TDLR: - - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-]]>
- - - -
- - Debugging running Nginx config - /debugging-running-nginx-config/ - - - Wed, 17 Jul 2024 01:42:43 +0000 - - - - - /?p=596 - - - I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running:

- - - -
nginx -t
- - - -

to test my configuration and ensure I don’t have any syntax errors. I was looking for an easy way to view the actual compiled config and found the -T flag which will test the configuration and dump it to standard out. This is pretty handy if you have a large number of includes in various locations. Here is an example from a fresh Nginx Docker container:

- - - -
root@2771f302dc98:/# nginx -T
-nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
-nginx: configuration file /etc/nginx/nginx.conf test is successful
-# configuration file /etc/nginx/nginx.conf:
-
-user  nginx;
-worker_processes  auto;
-
-error_log  /var/log/nginx/error.log notice;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-}
-
-# configuration file /etc/nginx/mime.types:
-
-types {
-    text/html                                        html htm shtml;
-    text/css                                         css;
-    text/xml                                         xml;
-    image/gif                                        gif;
-    image/jpeg                                       jpeg jpg;
-    application/javascript                           js;
-    application/atom+xml                             atom;
-    application/rss+xml                              rss;
-
-    text/mathml                                      mml;
-    text/plain                                       txt;
-    text/vnd.sun.j2me.app-descriptor                 jad;
-    text/vnd.wap.wml                                 wml;
-    text/x-component                                 htc;
-
-    image/avif                                       avif;
-    image/png                                        png;
-    image/svg+xml                                    svg svgz;
-    image/tiff                                       tif tiff;
-    image/vnd.wap.wbmp                               wbmp;
-    image/webp                                       webp;
-    image/x-icon                                     ico;
-    image/x-jng                                      jng;
-    image/x-ms-bmp                                   bmp;
-
-    font/woff                                        woff;
-    font/woff2                                       woff2;
-
-    application/java-archive                         jar war ear;
-    application/json                                 json;
-    application/mac-binhex40                         hqx;
-    application/msword                               doc;
-    application/pdf                                  pdf;
-    application/postscript                           ps eps ai;
-    application/rtf                                  rtf;
-    application/vnd.apple.mpegurl                    m3u8;
-    application/vnd.google-earth.kml+xml             kml;
-    application/vnd.google-earth.kmz                 kmz;
-    application/vnd.ms-excel                         xls;
-    application/vnd.ms-fontobject                    eot;
-    application/vnd.ms-powerpoint                    ppt;
-    application/vnd.oasis.opendocument.graphics      odg;
-    application/vnd.oasis.opendocument.presentation  odp;
-    application/vnd.oasis.opendocument.spreadsheet   ods;
-    application/vnd.oasis.opendocument.text          odt;
-    application/vnd.openxmlformats-officedocument.presentationml.presentation
-                                                     pptx;
-    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-                                                     xlsx;
-    application/vnd.openxmlformats-officedocument.wordprocessingml.document
-                                                     docx;
-    application/vnd.wap.wmlc                         wmlc;
-    application/wasm                                 wasm;
-    application/x-7z-compressed                      7z;
-    application/x-cocoa                              cco;
-    application/x-java-archive-diff                  jardiff;
-    application/x-java-jnlp-file                     jnlp;
-    application/x-makeself                           run;
-    application/x-perl                               pl pm;
-    application/x-pilot                              prc pdb;
-    application/x-rar-compressed                     rar;
-    application/x-redhat-package-manager             rpm;
-    application/x-sea                                sea;
-    application/x-shockwave-flash                    swf;
-    application/x-stuffit                            sit;
-    application/x-tcl                                tcl tk;
-    application/x-x509-ca-cert                       der pem crt;
-    application/x-xpinstall                          xpi;
-    application/xhtml+xml                            xhtml;
-    application/xspf+xml                             xspf;
-    application/zip                                  zip;
-
-    application/octet-stream                         bin exe dll;
-    application/octet-stream                         deb;
-    application/octet-stream                         dmg;
-    application/octet-stream                         iso img;
-    application/octet-stream                         msi msp msm;
-
-    audio/midi                                       mid midi kar;
-    audio/mpeg                                       mp3;
-    audio/ogg                                        ogg;
-    audio/x-m4a                                      m4a;
-    audio/x-realaudio                                ra;
-
-    video/3gpp                                       3gpp 3gp;
-    video/mp2t                                       ts;
-    video/mp4                                        mp4;
-    video/mpeg                                       mpeg mpg;
-    video/quicktime                                  mov;
-    video/webm                                       webm;
-    video/x-flv                                      flv;
-    video/x-m4v                                      m4v;
-    video/x-mng                                      mng;
-    video/x-ms-asf                                   asx asf;
-    video/x-ms-wmv                                   wmv;
-    video/x-msvideo                                  avi;
-}
-
-# configuration file /etc/nginx/conf.d/default.conf:
-server {
-    listen       80;
-    server_name  localhost;
-
-    #access_log  /var/log/nginx/host.access.log  main;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-    }
-
-    #error_page  404              /404.html;
-
-    # redirect server error pages to the static page /50x.html
-    #
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-
-    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-    #
-    #location ~ \.php$ {
-    #    proxy_pass   http://127.0.0.1;/
-    #}
-
-    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-    #
-    #location ~ \.php$ {
-    #    root           html;
-    #    fastcgi_pass   127.0.0.1:9000;
-    #    fastcgi_index  index.php;
-    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-    #    include        fastcgi_params;
-    #}
-
-    # deny access to .htaccess files, if Apache's document root
-    # concurs with nginx's one
-    #
-    #location ~ /\.ht {
-    #    deny  all;
-    #}
-}
-
- - - -

As you can see from the output above, we get all of the various Nginx config files in use printed to the console, perfect for grepping or searching/filtering with other tools.

-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/index.html deleted file mode 100644 index 46f9633..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/networking/index.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - -Networking – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Networking -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/feed/index.xml deleted file mode 100644 index d6880d3..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/feed/index.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - OCI – hackanooga - - / - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:32 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - OCI – hackanooga - / - 32 - 32 - - - Self hosted package registries with Gitea - /self-hosted-package-registries-with-gitea/ - - - Thu, 07 Mar 2024 15:07:07 +0000 - - - - - - https://wordpress.hackanooga.com/?p=413 - - - I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/index.html deleted file mode 100644 index 82cdb7a..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/oci/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -OCI – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: OCI -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/feed/index.xml deleted file mode 100644 index 98a3838..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/feed/index.xml +++ /dev/null @@ -1,842 +0,0 @@ - - - - Open Source – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Open Source – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/index.html deleted file mode 100644 index 0fb2a0e..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/open-source/index.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - -Open Source – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Open Source -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/feed/index.xml deleted file mode 100644 index 4f2b1a5..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/feed/index.xml +++ /dev/null @@ -1,913 +0,0 @@ - - - - Security – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Security – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - Hardening your web server by only allowing traffic from Cloudflare - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - - - Thu, 01 Aug 2024 21:02:29 +0000 - - - - - - /?p=607 - - - TDLR: - - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-]]>
- - - -
- - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/index.html deleted file mode 100644 index c61316c..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/security/index.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - -Security – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Security -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/feed/index.xml deleted file mode 100644 index ff69563..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/feed/index.xml +++ /dev/null @@ -1,1034 +0,0 @@ - - - - Self Hosted – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Self Hosted – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
- - Debugging running Nginx config - /debugging-running-nginx-config/ - - - Wed, 17 Jul 2024 01:42:43 +0000 - - - - - /?p=596 - - - I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running:

- - - -
nginx -t
- - - -

to test my configuration and ensure I don’t have any syntax errors. I was looking for an easy way to view the actual compiled config and found the -T flag which will test the configuration and dump it to standard out. This is pretty handy if you have a large number of includes in various locations. Here is an example from a fresh Nginx Docker container:

- - - -
root@2771f302dc98:/# nginx -T
-nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
-nginx: configuration file /etc/nginx/nginx.conf test is successful
-# configuration file /etc/nginx/nginx.conf:
-
-user  nginx;
-worker_processes  auto;
-
-error_log  /var/log/nginx/error.log notice;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-}
-
-# configuration file /etc/nginx/mime.types:
-
-types {
-    text/html                                        html htm shtml;
-    text/css                                         css;
-    text/xml                                         xml;
-    image/gif                                        gif;
-    image/jpeg                                       jpeg jpg;
-    application/javascript                           js;
-    application/atom+xml                             atom;
-    application/rss+xml                              rss;
-
-    text/mathml                                      mml;
-    text/plain                                       txt;
-    text/vnd.sun.j2me.app-descriptor                 jad;
-    text/vnd.wap.wml                                 wml;
-    text/x-component                                 htc;
-
-    image/avif                                       avif;
-    image/png                                        png;
-    image/svg+xml                                    svg svgz;
-    image/tiff                                       tif tiff;
-    image/vnd.wap.wbmp                               wbmp;
-    image/webp                                       webp;
-    image/x-icon                                     ico;
-    image/x-jng                                      jng;
-    image/x-ms-bmp                                   bmp;
-
-    font/woff                                        woff;
-    font/woff2                                       woff2;
-
-    application/java-archive                         jar war ear;
-    application/json                                 json;
-    application/mac-binhex40                         hqx;
-    application/msword                               doc;
-    application/pdf                                  pdf;
-    application/postscript                           ps eps ai;
-    application/rtf                                  rtf;
-    application/vnd.apple.mpegurl                    m3u8;
-    application/vnd.google-earth.kml+xml             kml;
-    application/vnd.google-earth.kmz                 kmz;
-    application/vnd.ms-excel                         xls;
-    application/vnd.ms-fontobject                    eot;
-    application/vnd.ms-powerpoint                    ppt;
-    application/vnd.oasis.opendocument.graphics      odg;
-    application/vnd.oasis.opendocument.presentation  odp;
-    application/vnd.oasis.opendocument.spreadsheet   ods;
-    application/vnd.oasis.opendocument.text          odt;
-    application/vnd.openxmlformats-officedocument.presentationml.presentation
-                                                     pptx;
-    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-                                                     xlsx;
-    application/vnd.openxmlformats-officedocument.wordprocessingml.document
-                                                     docx;
-    application/vnd.wap.wmlc                         wmlc;
-    application/wasm                                 wasm;
-    application/x-7z-compressed                      7z;
-    application/x-cocoa                              cco;
-    application/x-java-archive-diff                  jardiff;
-    application/x-java-jnlp-file                     jnlp;
-    application/x-makeself                           run;
-    application/x-perl                               pl pm;
-    application/x-pilot                              prc pdb;
-    application/x-rar-compressed                     rar;
-    application/x-redhat-package-manager             rpm;
-    application/x-sea                                sea;
-    application/x-shockwave-flash                    swf;
-    application/x-stuffit                            sit;
-    application/x-tcl                                tcl tk;
-    application/x-x509-ca-cert                       der pem crt;
-    application/x-xpinstall                          xpi;
-    application/xhtml+xml                            xhtml;
-    application/xspf+xml                             xspf;
-    application/zip                                  zip;
-
-    application/octet-stream                         bin exe dll;
-    application/octet-stream                         deb;
-    application/octet-stream                         dmg;
-    application/octet-stream                         iso img;
-    application/octet-stream                         msi msp msm;
-
-    audio/midi                                       mid midi kar;
-    audio/mpeg                                       mp3;
-    audio/ogg                                        ogg;
-    audio/x-m4a                                      m4a;
-    audio/x-realaudio                                ra;
-
-    video/3gpp                                       3gpp 3gp;
-    video/mp2t                                       ts;
-    video/mp4                                        mp4;
-    video/mpeg                                       mpeg mpg;
-    video/quicktime                                  mov;
-    video/webm                                       webm;
-    video/x-flv                                      flv;
-    video/x-m4v                                      m4v;
-    video/x-mng                                      mng;
-    video/x-ms-asf                                   asx asf;
-    video/x-ms-wmv                                   wmv;
-    video/x-msvideo                                  avi;
-}
-
-# configuration file /etc/nginx/conf.d/default.conf:
-server {
-    listen       80;
-    server_name  localhost;
-
-    #access_log  /var/log/nginx/host.access.log  main;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-    }
-
-    #error_page  404              /404.html;
-
-    # redirect server error pages to the static page /50x.html
-    #
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-
-    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-    #
-    #location ~ \.php$ {
-    #    proxy_pass   http://127.0.0.1;/
-    #}
-
-    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-    #
-    #location ~ \.php$ {
-    #    root           html;
-    #    fastcgi_pass   127.0.0.1:9000;
-    #    fastcgi_index  index.php;
-    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-    #    include        fastcgi_params;
-    #}
-
-    # deny access to .htaccess files, if Apache's document root
-    # concurs with nginx's one
-    #
-    #location ~ /\.ht {
-    #    deny  all;
-    #}
-}
-
- - - -

As you can see from the output above, we get all of the various Nginx config files in use printed to the console, perfect for grepping or searching/filtering with other tools.

-]]>
- - - -
- - Self hosted package registries with Gitea - /self-hosted-package-registries-with-gitea/ - - - Thu, 07 Mar 2024 15:07:07 +0000 - - - - - - https://wordpress.hackanooga.com/?p=413 - - - I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 1) - /traefik-with-lets-encrypt-and-cloudflare-pt-1/ - - - Thu, 01 Feb 2024 19:35:00 +0000 - - - - - - https://wordpress.hackanooga.com/?p=422 - - - Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a docker-compose.yaml

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=user@example.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      # Redirect all http requests to https
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-    # Needed to request certs via lets encrypt
-    environment:
-      - CF_DNS_API_TOKEN=[redacted]
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      # Used for storing letsencrypt certificates
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      REDIS_URL: redis://redis:6379/0
-      SECRET_EXPIRY: "604800"
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
-
- - - -

In part one of this series I will be going over some of the basics of Traefik and how dynamic routing works. If you want to skip to the good stuff and get everything configured with Cloudflare, you can skip to part 2.

- - - -

This example set’s up the primary Traefik container which acts as the ingress controller as well as a handy One Time Secret sharing service I use. Traefik handles routing in Docker via labels. For this to work properly the services that Traefik is trying to route to all need to be on the same Docker network. For this example we created a network called traefik by running the following:

- - - -
docker network create traefik
-
- - - -

Let’s take a look at the labels we applied to the ots container a little closer:

- - - -
    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
- - - -

traefik.enable=true – This should be pretty self explanatory but it tells Traefik that we want it to know about this service.

- - - -

traefik.http.routers.ots.rule=Host('ots.example.com') - This is where some of the magic comes in. Here we are defining a router called ots. The name is arbitrary in that it doesn’t have to match the name of the service but for our example it does. There are many rules that you can specify but the easiest for this example is host. Basically we are saying that any request coming in for ots.example.com should be picked up by this router. You can find more options for routers in the Traefik docs.

- - - -

– traefik.http.routers.ots.entrypoints=websecure
– traefik.http.routers.ots.tls=true
– traefik.http.routers.ots.tls.certresolver=letsencrypt

We are using these three labels to tell our router that we want it to use the websecure entrypoint, and that it should use the letsencrypt certresolver to grab it’s certificates. websecure is an arbitrary name that we assigned to our :443 interface. There are multiple ways to configure this, I choose to use the cli format in my traefik config:

- - - -

“`

- - - -
    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      # Our entrypoint names are arbitrary but these are convention.
-      # The important part is the port binding that we associate.
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-
-
- - - -

These last label is optional depending on your setup but it is important to understand as the documentation is a little fuzzy.

- - - -

– traefik.http.services.ots.loadbalancer.server.port=3000

Here’s how it works. Suppose you have a container that exposes multiple ports. Maybe one of those is a web ui and another is something that you don’t want exposed. By default Traefik will try and guess which port to route requests to. My understanding is that it will try and use the first exposed port. However you can override this functionality by using the label above which will tell Traefik specifically which port you want to route to inside the container.

The service name is derived automatically from the definition in the docker compose file:

- - - -

ots: # This will become the service name
image: luzifer/ots
container_name: ots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/index.html deleted file mode 100644 index d37fa7f..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/self-hosted/index.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - -Self Hosted – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Self Hosted -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/feed/index.xml deleted file mode 100644 index 95865be..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/feed/index.xml +++ /dev/null @@ -1,1696 +0,0 @@ - - - - Software Engineering – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Software Engineering – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - Hardening your web server by only allowing traffic from Cloudflare - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - - - Thu, 01 Aug 2024 21:02:29 +0000 - - - - - - /?p=607 - - - TDLR: - - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-]]>
- - - -
- - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Stop all running containers with Docker - /stop-all-running-containers-with-docker/ - - - Wed, 03 Apr 2024 13:12:41 +0000 - - - - - /?p=557 - - - These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this:

- - - -
docker container stop $(docker container ps -q)
- - - -

Let me break this down in case you are not familiar with the syntax. Basically we are passing the output of docker container ps -q into docker container stop. This works because the stop command can take a list of container ids which is what we get when passing the -q flag to docker container ps.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React – pt 3 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ - - - Wed, 17 Jan 2024 17:11:00 +0000 - - - - - - /?p=546 - - - In our previous post we got to the point of displaying an OTP in our card component. Now it is time to refactor a bit and implement a countdown functionality to see when this token will expire. For now we will go ahead and add this logic into our Card component. In order to figure out how to build this countdown timer we first need to understand how the TOTP counter is calculated.

- - - -

In other words, we know that at TOTP token is derived from a secret key and the current time. If we dig into the spec some we can find that time is a reference to Linux epoch time or the number of seconds that have elapsed since January 1st 1970. For a little more clarification check out this Stackexchange article.

- - - -

So if we know that the time is based on epoch time, we also need to know that most TOTP tokens have a validity period of either 30 seconds or 60 seconds. 30 seconds is the most common standard so we will use that for our implementation. If we put all that together then basically all we need is 2 variables:

- - - -
    -
  1. Number of seconds since epoch
  2. - - - -
  3. How many seconds until this token expires
  4. -
- - - -

The first one is easy:

- - - -
let secondsSinceEpoch;
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-# This gives us a time like so: 1710338609
- - - -

For the second one we will need to do a little math but it’s pretty straightforward. We need to divide secondsSinceEpoch by 30 seconds and then subtract this number from 30. Here is what that looks like:

- - - -
let secondsSinceEpoch;
-let secondsRemaining;
-const period = 30;
-
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-secondsRemaining = period - (secondsSinceEpoch % period);
- - - -

Now let’s put all of that together into a function that we can test out to make sure we are getting the results we expect.

- - - -
const timer = setInterval(() => {
-  countdown()
-}, 1000)
-
-function countdown() {
-  let secondsSinceEpoch;
-  let secondsRemaining;
-
-  const period = 30;
-  secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-  secondsRemaining = period - (secondsSinceEpoch % period);
-  console.log(secondsSinceEpoch, secondsRemaining)
-  if (secondsRemaining == 1) {
-    console.log("timer done")
-    clearInterval(timer)
-  }
-}
-
- - - -

Running this function should give you output similar to the following. In this example we are stopping the timer once it hits 1 second just to show that everything is working as we expect. In our application we will want this time to keep going forever:

- - - -
1710339348, 12
-1710339349, 11
-1710339350, 10
-1710339351, 9
-1710339352, 8
-1710339353, 7
-1710339354, 6
-1710339355, 5
-1710339356, 4
-1710339357, 3
-1710339358, 2
-1710339359, 1
-"timer done"
- - - -

Here is a JSfiddle that shows it in action: https://jsfiddle.net/561vg3k7/

- - - -

We can go ahead and add this function to our Card component and get it wired up. I am going to skip ahead a bit and add a progress bar to our card that is synced with our countdown timer and changes colors as it drops below 10 seconds. For now we will be using a setInterval function to accomplish this.

- - - -

Here is what my updated src/Components/Card.tsx looks like:

- - - -
import { useState } from "react";
-import { IToken } from "../App"
-import { TOTP } from 'totp-generator';
-
-
-function Card({ token }: { token: IToken }) {
-  const { otp } = TOTP.generate(token.token);
-  const [timerStyle, setTimerStyle] = useState("");
-  const [timerWidth, setTimerWidth] = useState("");
-
-
-  function countdown() {
-    let secondsSinceEpoch: number;
-    let secondsRemaining: number = 30;
-    const period = 30;
-    secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-    secondsRemaining = period - (secondsSinceEpoch % period);
-    setTimerWidth(`${100 - (100 / 30 * (30 - secondsRemaining))}%`)
-    setTimerStyle(secondsRemaining < 10 ? "salmon" : "lightgreen")
-  }
-  setInterval(() => {
-    countdown();
-  }, 250);
-  return (
-    <>
-      <div className='card'>
-        <div className='progressBar'style={{ width: timerWidth, backgroundColor: timerStyle}}></div>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span >{otp}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -

Pretty straightforward. I also updated my src/index.css and added a style for our progress bar:

- - - -
.progressBar {
-  height: 10px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: inherit;
-}
-// Also be sure to add position:relative to .card which is the parent of this.
- - - -

Here is what it all looks like in action:

- - - -
- - - -

If you look closely you will notice a few interesting things. First is that the color of the progress bar changes from green to red. This is handled by our timerStyle variable. That part is pretty simple, if the timer is less than 10 seconds we set the background color as salmon otherwise we use light green. The width of the progress bar is controlled by `${100 – (100 / 30 * (30 – secondsRemaining))}%`

- - - -

The other interesting thing to note is that when the timer runs out it automatically restarts at 30 seconds with a new OTP. This is due to the fact that this component is re-rendering every 1/4 second and every time it re-renders it is running the entire function body including: const { otp } = TOTP.generate(token.token);.

- - - -

This is to be expected since we are using React and we are just using a setInterval. It may be a little unexpected though if you aren’t as familiar with React render cycles. For our purposes this will work just fine for now. Stay tuned for pt 4 of this series where we wire up the backend API.

-]]>
- - - - -
- - Roll your own authenticator app with KeystoneJS and React – pt 2 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - - - Thu, 11 Jan 2024 01:41:00 +0000 - - - - - - - - /?p=539 - - - In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-vite@5.2.2" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: 'enxoco@github.com',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: 'mikeconrad@example.com',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - - - Thu, 04 Jan 2024 00:59:49 +0000 - - - - - - - - /?p=533 - - - In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-keystone-app@9.0.1" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐ Server listening on :3000 (http://localhost:3000/)
-⭐ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-]]>
- - - -
- - Hoots Wings - /hoots-wings/ - - - Wed, 12 Jul 2023 15:32:44 +0000 - - - /?p=495 - - - While working for Morrison I had the pleasure of building a website for Hoots Wings. The CMS was Perch and it was mostly HTML, CSS, PHP and JavaScript on the frontend, however I built out a customer store locator using NodeJS and VueJS.

- - - -
- - - -

I was the sole frontend developer responsible for taking the designs from SketchUp and translating them to the site you see now. Most of the blocks and templates are built using a mix of PHP and HTML/SCSS. There was also some JavaScript for things like getting the users location and rendering popups/modals.

- - - -

The store locator was a separate piece that was built in Vue2.0 with a NodeJS backend. For the backend I used KeystoneJS to hold all of the store information. There was also some custom development that was done in order to sync the stores added via the CMS with Yext and vice versa.

- - - -
hootswings.com screenshot
- - - -

For that piece I ended up having to write a custom integration in Perch that would connect to the NodeJS backend and pull the stores but also make sure that those were in sync with Yext. This required diving into the Yext API some and examining a similar integration that we had for another client site.

- - - -

Unfortunately I don’t have any screen grabs of the admin side of things since that is proprietary but the system I built allowed a site admin to go in and add/edit store locations that would show up on the site and also show up in Yext with the appropriate information.

- - - -

Screenshots

- - - -

Here are some full screenshots of the site.

- - - -

Homepage

- - - -
hootswings.com homepage screenshot
- - - -

- - - -

Menu Page

- - - -
- - - -

- - - -

Locations Page

- - - -
-]]>
- - - -
- - Hilger Grading Portal - /hilger-grading-portal/ - - - Sun, 21 May 2023 20:07:50 +0000 - - - /?p=509 - - - Back around 2014 I took on my first freelance development project for a Homeschool Co-op here in Chattanooga called Hilger Higher Learning. The problem that they were trying to solve involved managing grades and report cards for their students. In the past, they had a developer build a rudimentary web application that would allow them to enter grades for students, however it lacked any sort of concurrency meaning that if two teachers were making changes to the same student at the same time, teacher b’s changes would overwrite teacher a’s changes. This was obviously a huge headache.

- - - -

I built out the first version of the app using PHP and HTML, CSS and Datatables with lots of jQuery sprinkled in. I built in custom functionality that allowed them to easily compile and print all the report cards for all students with the simple click of a button. It was a game changer or them and streamlined the process significantly.

- - - -

That system was in production for 5 years or so with minimal updates and maintance. I recently rebuilt it using React and ChakraUI on the frontend and KeystoneJS on the backend. I also modernized the deployment by building Docker images for the frontend/backend. I actually ended up keeping parts of it in PHP due to the fact that I couldn’t find a JavaScript library that would solve the challenges I had. Here are some screenshots of it in action:

- - - -

- - - -

This is the page listing all teachers in the system and whether or not they have admin privileges. Any admin user can grant other admin users this privilege. There is also a button to send the teacher a password reset email (via Postmark API integration) and an option that allows admin users to impersonate other users for troubleshooting and diagnostic purposes.

- - - -

- - - -
- - - -

The data is all coming from the KeystoneJS backend GraphQL API. I am using urql for fetching the data and handling mutations. This is the page that displays students. It is filterable and searchable. Teachers also have the ability to mark a student as active or inactive for the semester as well as delete them from the system.

- - - -
- - - -

Clicking on a student takes the teacher/admin to an edit course screen where they can add and remove courses for each student. A teacher can add as many courses as they need. If multiple teachers have added courses for this student, the user will only see the courses they have entered.

- - - -
- - - -

There is another page that allows admin users to view and manage all of the parents in the system. It allows them to easily send a password reset email to the parents as well as to view the parent portal.

- - - -
- - - -
- - - -

Technologies used

- - - -
    -
  • Digital Ocean Droplet (Server) – Ubuntu Server
  • - - - -
  • Docker (Frontend, Backend, PHP, Postgresql database)
  • - - - -
  • Git
  • - - - -
  • NodeJS
  • - - - -
  • PHP
  • - - - -
  • ChakraUI
  • - - - -
  • KeystoneJS
  • - - - -
  • Postmark
  • - - - -
  • GraphQL
  • - - - -
  • Typescript
  • - - - -
  • React
  • - - - -
  • urql
  • -
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/index.html deleted file mode 100644 index 3ba77d4..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/software-engineering/index.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - -Software Engineering – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Software Engineering -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/feed/index.xml deleted file mode 100644 index de6ee7a..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/feed/index.xml +++ /dev/null @@ -1,768 +0,0 @@ - - - - SSH – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - SSH – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/index.html deleted file mode 100644 index 6aae6f2..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/ssh/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -SSH – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: SSH -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/feed/index.xml deleted file mode 100644 index 66c3694..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/feed/index.xml +++ /dev/null @@ -1,285 +0,0 @@ - - - - TeamCity – hackanooga - - / - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:24 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - TeamCity – hackanooga - / - 32 - 32 - - - Automating CI/CD with TeamCity and Ansible - /automating-ci-cd-with-teamcity-ansible/ - - - Mon, 11 Mar 2024 13:37:47 +0000 - - - - - - https://wordpress.hackanooga.com/?p=393 - - - In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/index.html deleted file mode 100644 index 2af3ea8..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/teamcity/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -TeamCity – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: TeamCity -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/feed/index.xml deleted file mode 100644 index 3251953..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/feed/index.xml +++ /dev/null @@ -1,529 +0,0 @@ - - - - Traefik – hackanooga - - / - Confessions of a homelab hacker - Sat, 11 May 2024 13:44:01 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Traefik – hackanooga - / - 32 - 32 - - - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 2) - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - - - Thu, 15 Feb 2024 20:19:12 +0000 - - - - - - https://wordpress.hackanooga.com/?p=425 - - - In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 1) - /traefik-with-lets-encrypt-and-cloudflare-pt-1/ - - - Thu, 01 Feb 2024 19:35:00 +0000 - - - - - - https://wordpress.hackanooga.com/?p=422 - - - Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a docker-compose.yaml

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=user@example.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      # Redirect all http requests to https
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-    # Needed to request certs via lets encrypt
-    environment:
-      - CF_DNS_API_TOKEN=[redacted]
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      # Used for storing letsencrypt certificates
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      REDIS_URL: redis://redis:6379/0
-      SECRET_EXPIRY: "604800"
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
-
- - - -

In part one of this series I will be going over some of the basics of Traefik and how dynamic routing works. If you want to skip to the good stuff and get everything configured with Cloudflare, you can skip to part 2.

- - - -

This example set’s up the primary Traefik container which acts as the ingress controller as well as a handy One Time Secret sharing service I use. Traefik handles routing in Docker via labels. For this to work properly the services that Traefik is trying to route to all need to be on the same Docker network. For this example we created a network called traefik by running the following:

- - - -
docker network create traefik
-
- - - -

Let’s take a look at the labels we applied to the ots container a little closer:

- - - -
    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
- - - -

traefik.enable=true – This should be pretty self explanatory but it tells Traefik that we want it to know about this service.

- - - -

traefik.http.routers.ots.rule=Host('ots.example.com') - This is where some of the magic comes in. Here we are defining a router called ots. The name is arbitrary in that it doesn’t have to match the name of the service but for our example it does. There are many rules that you can specify but the easiest for this example is host. Basically we are saying that any request coming in for ots.example.com should be picked up by this router. You can find more options for routers in the Traefik docs.

- - - -

– traefik.http.routers.ots.entrypoints=websecure
– traefik.http.routers.ots.tls=true
– traefik.http.routers.ots.tls.certresolver=letsencrypt

We are using these three labels to tell our router that we want it to use the websecure entrypoint, and that it should use the letsencrypt certresolver to grab it’s certificates. websecure is an arbitrary name that we assigned to our :443 interface. There are multiple ways to configure this, I choose to use the cli format in my traefik config:

- - - -

“`

- - - -
    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      # Our entrypoint names are arbitrary but these are convention.
-      # The important part is the port binding that we associate.
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-
-
- - - -

These last label is optional depending on your setup but it is important to understand as the documentation is a little fuzzy.

- - - -

– traefik.http.services.ots.loadbalancer.server.port=3000

Here’s how it works. Suppose you have a container that exposes multiple ports. Maybe one of those is a web ui and another is something that you don’t want exposed. By default Traefik will try and guess which port to route requests to. My understanding is that it will try and use the first exposed port. However you can override this functionality by using the label above which will tell Traefik specifically which port you want to route to inside the container.

The service name is derived automatically from the definition in the docker compose file:

- - - -

ots: # This will become the service name
image: luzifer/ots
container_name: ots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/index.html deleted file mode 100644 index ad08e63..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/category/traefik/index.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - -Traefik – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Category: Traefik -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/browser-bar.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/browser-bar.png deleted file mode 100644 index 781cf16..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/browser-bar.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-browser.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-browser.png deleted file mode 100644 index de23104..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-browser.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-cloud.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-cloud.png deleted file mode 100644 index d8ed395..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-cloud.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-error.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-error.png deleted file mode 100644 index 3a7c8be..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-error.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-horizontal-arrow.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-horizontal-arrow.png deleted file mode 100644 index 16da67a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-horizontal-arrow.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-ok.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-ok.png deleted file mode 100644 index df246db..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-ok.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-server.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-server.png deleted file mode 100644 index 8b32fbc..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-icon-server.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-error.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-error.png deleted file mode 100644 index e3eeeeb..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-error.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-warn.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-warn.png deleted file mode 100644 index 0bc13a0..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/cf-no-screenshot-warn.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/icon-exclamation.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/icon-exclamation.png deleted file mode 100644 index 56c413c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/images/icon-exclamation.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/l/email-protection/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/l/email-protection/index.html deleted file mode 100644 index 7c895f6..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/l/email-protection/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - -Email Protection | Cloudflare - - - - - - - - - - - - - - - - - -
- -
-
-

Email Protection

-

You are unable to access this email address hackanooga.com

-
- -
-
-
-

The website from which you got to this page is protected by Cloudflare. Email addresses on that page have been hidden in order to keep them from being accessed by malicious bots. You must enable Javascript in your browser in order to decode the e-mail address.

-

If you have a website and are interested in protecting it in a similar way, you can sign up for Cloudflare.

-
- - -
-
- - - - -
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js deleted file mode 100644 index 725b7c6..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){"use strict";function e(e){try{if("undefined"==typeof console)return;"error"in console?console.error(e):console.log(e)}catch(e){}}function t(e){return d.innerHTML='',d.childNodes[0].getAttribute("href")||""}function r(e,t){var r=e.substr(t,2);return parseInt(r,16)}function n(n,c){for(var o="",a=r(n,c),i=c+2;i-1&&(o.href="mailto:"+n(o.href,a+l.length))}catch(i){e(i)}}function o(t){for(var r=t.querySelectorAll(u),c=0;c.cf-column{float:left;padding-bottom:45px;width:100%;box-sizing:border-box}@media screen and (min-width:49.2em){#cf-wrapper .cf-columns.cols-2>.cf-column:nth-child(n+3),#cf-wrapper .cf-columns.cols-3>.cf-column:nth-child(n+4),#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(n+3),#cf-wrapper .cf-columns.four>.cf-column:nth-child(n+3),#cf-wrapper .cf-columns.three>.cf-column:nth-child(n+4),#cf-wrapper .cf-columns.two>.cf-column:nth-child(n+3){padding-top:67.5px}#cf-wrapper .cf-columns>.cf-column{padding-bottom:0}#cf-wrapper .cf-columns.cols-2>.cf-column,#cf-wrapper .cf-columns.cols-4>.cf-column,#cf-wrapper .cf-columns.four>.cf-column,#cf-wrapper .cf-columns.two>.cf-column{padding-left:0;padding-right:22.5px;width:50%}#cf-wrapper .cf-columns.cols-2>.cf-column:nth-child(2n),#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(2n),#cf-wrapper .cf-columns.four>.cf-column:nth-child(2n),#cf-wrapper .cf-columns.two>.cf-column:nth-child(2n){padding-left:22.5px;padding-right:0}#cf-wrapper .cf-columns.cols-2>.cf-column:nth-child(odd),#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(odd),#cf-wrapper .cf-columns.four>.cf-column:nth-child(odd),#cf-wrapper .cf-columns.two>.cf-column:nth-child(odd){clear:left}#cf-wrapper .cf-columns.cols-3>.cf-column,#cf-wrapper .cf-columns.three>.cf-column{padding-left:30px;width:33.3333333333333%}#cf-wrapper .cf-columns.cols-3>.cf-column:first-child,#cf-wrapper .cf-columns.cols-3>.cf-column:nth-child(3n+1),#cf-wrapper .cf-columns.three>.cf-column:first-child,#cf-wrapper .cf-columns.three>.cf-column:nth-child(3n+1){clear:left;padding-left:0;padding-right:30px}#cf-wrapper .cf-columns.cols-3>.cf-column:nth-child(3n+2),#cf-wrapper .cf-columns.three>.cf-column:nth-child(3n+2){padding-left:15px;padding-right:15px}#cf-wrapper .cf-columns.cols-3>.cf-column:nth-child(-n+3),#cf-wrapper .cf-columns.three>.cf-column:nth-child(-n+3){padding-top:0}}@media screen and (min-width:66em){#cf-wrapper .cf-columns>.cf-column{padding-bottom:0}#cf-wrapper .cf-columns.cols-4>.cf-column,#cf-wrapper .cf-columns.four>.cf-column{padding-left:33.75px;width:25%}#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(odd),#cf-wrapper .cf-columns.four>.cf-column:nth-child(odd){clear:none}#cf-wrapper .cf-columns.cols-4>.cf-column:first-child,#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(4n+1),#cf-wrapper .cf-columns.four>.cf-column:first-child,#cf-wrapper .cf-columns.four>.cf-column:nth-child(4n+1){clear:left;padding-left:0;padding-right:33.75px}#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(4n+2),#cf-wrapper .cf-columns.four>.cf-column:nth-child(4n+2){padding-left:11.25px;padding-right:22.5px}#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(4n+3),#cf-wrapper .cf-columns.four>.cf-column:nth-child(4n+3){padding-left:22.5px;padding-right:11.25px}#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(n+5),#cf-wrapper .cf-columns.four>.cf-column:nth-child(n+5){padding-top:67.5px}#cf-wrapper .cf-columns.cols-4>.cf-column:nth-child(-n+4),#cf-wrapper .cf-columns.four>.cf-column:nth-child(-n+4){padding-top:0}}#cf-wrapper a{background:0 0;border:0;color:#0051c3;outline:0;text-decoration:none;-webkit-transition:all .15s ease;transition:all .15s ease}#cf-wrapper a:hover{background:0 0;border:0;color:#f68b1f}#cf-wrapper a:focus{background:0 0;border:0;color:#62a1d8;outline:0}#cf-wrapper a:active{background:0 0;border:0;color:#c16508;outline:0}#cf-wrapper h1,#cf-wrapper h2,#cf-wrapper h3,#cf-wrapper h4,#cf-wrapper h5,#cf-wrapper h6,#cf-wrapper p{color:#404040;margin:0;padding:0}#cf-wrapper h1,#cf-wrapper h2,#cf-wrapper h3{font-weight:400}#cf-wrapper h4,#cf-wrapper h5,#cf-wrapper h6,#cf-wrapper strong{font-weight:600}#cf-wrapper h1{font-size:36px;line-height:1.2}#cf-wrapper h2{font-size:30px;line-height:1.3}#cf-wrapper h3{font-size:25px;line-height:1.3}#cf-wrapper h4{font-size:20px;line-height:1.3}#cf-wrapper h5{font-size:15px}#cf-wrapper h6{font-size:13px}#cf-wrapper ol,#cf-wrapper ul{list-style:none;margin-left:3em}#cf-wrapper ul{list-style-type:disc}#cf-wrapper ol{list-style-type:decimal}#cf-wrapper em{font-style:italic}#cf-wrapper .cf-subheadline{color:#595959;font-weight:300}#cf-wrapper .cf-text-error{color:#bd2426}#cf-wrapper .cf-text-success{color:#9bca3e}#cf-wrapper ol+h2,#cf-wrapper ol+h3,#cf-wrapper ol+h4,#cf-wrapper ol+h5,#cf-wrapper ol+h6,#cf-wrapper ol+p,#cf-wrapper p+dl,#cf-wrapper p+ol,#cf-wrapper p+p,#cf-wrapper p+table,#cf-wrapper p+ul,#cf-wrapper ul+h2,#cf-wrapper ul+h3,#cf-wrapper ul+h4,#cf-wrapper ul+h5,#cf-wrapper ul+h6,#cf-wrapper ul+p{margin-top:1.5em}#cf-wrapper h1+p,#cf-wrapper p+h1,#cf-wrapper p+h2,#cf-wrapper p+h3,#cf-wrapper p+h4,#cf-wrapper p+h5,#cf-wrapper p+h6{margin-top:1.25em}#cf-wrapper h1+h2,#cf-wrapper h1+h3,#cf-wrapper h2+h3,#cf-wrapper h3+h4,#cf-wrapper h4+h5{margin-top:.25em}#cf-wrapper h2+p{margin-top:1em}#cf-wrapper h1+h4,#cf-wrapper h1+h5,#cf-wrapper h1+h6,#cf-wrapper h2+h4,#cf-wrapper h2+h5,#cf-wrapper h2+h6,#cf-wrapper h3+h5,#cf-wrapper h3+h6,#cf-wrapper h3+p,#cf-wrapper h4+p,#cf-wrapper h5+ol,#cf-wrapper h5+p,#cf-wrapper h5+ul{margin-top:.5em}#cf-wrapper .cf-btn{background-color:transparent;border:1px solid #999;color:#404040;font-size:14px;font-weight:400;line-height:1.2;margin:0;padding:.6em 1.33333em .53333em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1;border-radius:2px;box-sizing:border-box;-webkit-transition:all .2s ease;transition:all .2s ease}#cf-wrapper .cf-btn:hover{background-color:#bfbfbf;border:1px solid #737373;color:#fff}#cf-wrapper .cf-btn:focus{color:inherit;outline:0;box-shadow:inset 0 0 4px rgba(0,0,0,.3)}#cf-wrapper .cf-btn.active,#cf-wrapper .cf-btn:active{background-color:#bfbfbf;border:1px solid #404040;color:#272727}#cf-wrapper .cf-btn::-moz-focus-inner{padding:0;border:0}#cf-wrapper .cf-btn .cf-caret{border-top-color:currentColor;margin-left:.25em;margin-top:.18333em}#cf-wrapper .cf-btn-primary{background-color:#2f7bbf;border:1px solid transparent;color:#fff}#cf-wrapper .cf-btn-primary:hover{background-color:#62a1d8;border:1px solid #2f7bbf;color:#fff}#cf-wrapper .cf-btn-primary.active,#cf-wrapper .cf-btn-primary:active,#cf-wrapper .cf-btn-primary:focus{background-color:#62a1d8;border:1px solid #163959;color:#fff}#cf-wrapper .cf-btn-danger,#cf-wrapper .cf-btn-error,#cf-wrapper .cf-btn-important{background-color:#bd2426;border-color:transparent;color:#fff}#cf-wrapper .cf-btn-danger:hover,#cf-wrapper .cf-btn-error:hover,#cf-wrapper .cf-btn-important:hover{background-color:#de5052;border-color:#bd2426;color:#fff}#cf-wrapper .cf-btn-danger.active,#cf-wrapper .cf-btn-danger:active,#cf-wrapper .cf-btn-danger:focus,#cf-wrapper .cf-btn-error.active,#cf-wrapper .cf-btn-error:active,#cf-wrapper .cf-btn-error:focus,#cf-wrapper .cf-btn-important.active,#cf-wrapper .cf-btn-important:active,#cf-wrapper .cf-btn-important:focus{background-color:#de5052;border-color:#521010;color:#fff}#cf-wrapper .cf-btn-accept,#cf-wrapper .cf-btn-success{background-color:#9bca3e;border:1px solid transparent;color:#fff}#cf-wrapper .cf-btn-accept:hover,#cf-wrapper .cf-btn-success:hover{background-color:#bada7a;border:1px solid #9bca3e;color:#fff}#cf-wrapper .active.cf-btn-accept,#cf-wrapper .cf-btn-accept:active,#cf-wrapper .cf-btn-accept:focus,#cf-wrapper .cf-btn-success.active,#cf-wrapper .cf-btn-success:active,#cf-wrapper .cf-btn-success:focus{background-color:#bada7a;border:1px solid #516b1d;color:#fff}#cf-wrapper .cf-btn-accept{color:transparent;font-size:0;height:36.38px;overflow:hidden;position:relative;text-indent:0;width:36.38px;white-space:nowrap}#cf-wrapper input,#cf-wrapper select,#cf-wrapper textarea{background:#fff!important;border:1px solid #999!important;color:#404040!important;font-size:.86667em!important;line-height:1.24!important;margin:0 0 1em!important;max-width:100%!important;outline:0!important;padding:.45em .75em!important;vertical-align:middle!important;display:-moz-inline-stack;display:inline-block;zoom:1;box-sizing:border-box;-webkit-transition:all .2s ease;transition:all .2s ease;border-radius:2px}#cf-wrapper input:hover,#cf-wrapper select:hover,#cf-wrapper textarea:hover{border-color:gray}#cf-wrapper input:focus,#cf-wrapper select:focus,#cf-wrapper textarea:focus{border-color:#2f7bbf;outline:0;box-shadow:0 0 8px rgba(47,123,191,.5)}#cf-wrapper fieldset{width:100%}#cf-wrapper label{display:block;font-size:13px;margin-bottom:.38333em}#cf-wrapper .cf-form-stacked .select2-container,#cf-wrapper .cf-form-stacked input,#cf-wrapper .cf-form-stacked select,#cf-wrapper .cf-form-stacked textarea{display:block;width:100%}#cf-wrapper .cf-form-stacked input[type=button],#cf-wrapper .cf-form-stacked input[type=checkbox],#cf-wrapper .cf-form-stacked input[type=submit]{display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1;width:auto}#cf-wrapper .cf-form-actions{text-align:right}#cf-wrapper .cf-alert{background-color:#f9b169;border:1px solid #904b06;color:#404040;font-size:13px;padding:7.5px 15px;position:relative;vertical-align:middle;border-radius:2px}#cf-wrapper .cf-alert:empty{display:none}#cf-wrapper .cf-alert .cf-close{border:1px solid transparent;color:inherit;font-size:18.75px;line-height:1;padding:0;position:relative;right:-18.75px;top:0}#cf-wrapper .cf-alert .cf-close:hover{background-color:transparent;border-color:currentColor;color:inherit}#cf-wrapper .cf-alert-danger,#cf-wrapper .cf-alert-error{background-color:#de5052;border-color:#521010;color:#fff}#cf-wrapper .cf-alert-success{background-color:#bada7a;border-color:#516b1d;color:#516b1d}#cf-wrapper .cf-alert-warning{background-color:#f9b169;border-color:#904b06;color:#404040}#cf-wrapper .cf-alert-info{background-color:#62a1d8;border-color:#163959;color:#163959}#cf-wrapper .cf-alert-nonessential{background-color:#ebebeb;border-color:#999;color:#404040}#cf-wrapper .cf-icon-exclamation-sign{background:url(/cdn-cgi/images/icon-exclamation.png?1376755637) 50% no-repeat;height:54px;width:54px;display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1}#cf-wrapper h1 .cf-icon-exclamation-sign{margin-top:-10px}#cf-wrapper #cf-error-banner{background-color:#fff;border-bottom:3px solid #f68b1f;padding:15px 15px 20px;position:relative;z-index:999999999;box-shadow:0 2px 8px rgba(0,0,0,.2)}#cf-wrapper #cf-error-banner h4,#cf-wrapper #cf-error-banner p{display:-moz-inline-stack;display:inline-block;vertical-align:bottom;zoom:1}#cf-wrapper #cf-error-banner h4{color:#2f7bbf;font-weight:400;font-size:20px;line-height:1;vertical-align:baseline}#cf-wrapper #cf-error-banner .cf-error-actions{margin-bottom:10px;text-align:center;width:100%}#cf-wrapper #cf-error-banner .cf-error-actions a{display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1}#cf-wrapper #cf-error-banner .cf-error-actions a+a{margin-left:10px}#cf-wrapper #cf-error-banner .cf-error-actions .cf-btn-accept,#cf-wrapper #cf-error-banner .cf-error-actions .cf-btn-success{color:#fff}#cf-wrapper #cf-error-banner .error-header-desc{text-align:left}#cf-wrapper #cf-error-banner .cf-close{color:#999;cursor:pointer;display:inline-block;font-size:34.5px;float:none;font-weight:700;height:22.5px;line-height:.6;overflow:hidden;position:absolute;right:20px;top:25px;text-indent:200%;width:22.5px}#cf-wrapper #cf-error-banner .cf-close:hover{color:gray}#cf-wrapper #cf-error-banner .cf-close:before{content:"\00D7";left:0;height:100%;position:absolute;text-align:center;text-indent:0;top:0;width:100%}#cf-inline-error-wrapper{box-shadow:0 2px 10px rgba(0,0,0,.5)}#cf-wrapper #cf-error-details{background:#fff}#cf-wrapper #cf-error-details .cf-error-overview{padding:25px 0 0}#cf-wrapper #cf-error-details .cf-error-overview h1,#cf-wrapper #cf-error-details .cf-error-overview h2{font-weight:300}#cf-wrapper #cf-error-details .cf-error-overview h2{margin-top:0}#cf-wrapper #cf-error-details .cf-highlight{background:#ebebeb;overflow-x:hidden;padding:30px 0;background-image:-webkit-gradient(linear,left top, left bottom,from(#dedede),color-stop(3%, #ebebeb),color-stop(97%, #ebebeb),to(#dedede));background-image:linear-gradient(top,#dedede,#ebebeb 3%,#ebebeb 97%,#dedede)}#cf-wrapper #cf-error-details .cf-highlight h3{color:#999;font-weight:300}#cf-wrapper #cf-error-details .cf-highlight .cf-column:last-child{padding-bottom:0}#cf-wrapper #cf-error-details .cf-highlight .cf-highlight-inverse{background-color:#fff;padding:15px;border-radius:2px}#cf-wrapper #cf-error-details .cf-status-display h3{margin-top:.5em}#cf-wrapper #cf-error-details .cf-status-label{color:#9bca3e;font-size:1.46667em}#cf-wrapper #cf-error-details .cf-status-label,#cf-wrapper #cf-error-details .cf-status-name{display:inline}#cf-wrapper #cf-error-details .cf-status-item{display:block;position:relative;text-align:left}#cf-wrapper #cf-error-details .cf-status-item,#cf-wrapper #cf-error-details .cf-status-item.cf-column{padding-bottom:1.5em}#cf-wrapper #cf-error-details .cf-status-item.cf-error-source{display:block;text-align:center}#cf-wrapper #cf-error-details .cf-status-item.cf-error-source:after{bottom:-60px;content:"";display:none;border-bottom:18px solid #fff;border-left:20px solid transparent;border-right:20px solid transparent;height:0;left:50%;margin-left:-9px;position:absolute;right:50%;width:0}#cf-wrapper #cf-error-details .cf-status-item+.cf-status-item{border-top:1px solid #dedede;padding-top:1.5em}#cf-wrapper #cf-error-details .cf-status-item+.cf-status-item:before{background:url(/cdn-cgi/images/cf-icon-horizontal-arrow.png) no-repeat;content:"";display:block;left:0;position:absolute;top:25.67px}#cf-wrapper #cf-error-details .cf-error-source .cf-icon-error-container{height:85px;margin-bottom:2.5em}#cf-wrapper #cf-error-details .cf-error-source .cf-status-label{color:#bd2426}#cf-wrapper #cf-error-details .cf-error-source .cf-icon{display:block}#cf-wrapper #cf-error-details .cf-error-source .cf-icon-status{bottom:-10px;left:50%;top:auto;right:auto}#cf-wrapper #cf-error-details .cf-error-source .cf-status-label,#cf-wrapper #cf-error-details .cf-error-source .cf-status-name{display:block}#cf-wrapper #cf-error-details .cf-icon-error-container{height:auto;position:relative}#cf-wrapper #cf-error-details .cf-icon-status{display:block;margin-left:-24px;position:absolute;top:0;right:0}#cf-wrapper #cf-error-details .cf-icon{display:none;margin:0 auto}#cf-wrapper #cf-error-details .cf-status-desc{display:block;height:22.5px;overflow:hidden;text-overflow:ellipsis;width:100%;white-space:nowrap}#cf-wrapper #cf-error-details .cf-status-desc:empty{display:none}#cf-wrapper #cf-error-details .cf-error-footer{padding:1.33333em 0;border-top:1px solid #ebebeb;text-align:center}#cf-wrapper #cf-error-details .cf-error-footer p{font-size:13px}#cf-wrapper #cf-error-details .cf-error-footer select{margin:0!important}#cf-wrapper #cf-error-details .cf-footer-item{display:block;margin-bottom:5px;text-align:left}#cf-wrapper #cf-error-details .cf-footer-separator{display:none}#cf-wrapper #cf-error-details .cf-captcha-info{margin-bottom:10px;position:relative;text-align:center}#cf-wrapper #cf-error-details .cf-captcha-image{height:57px;width:300px}#cf-wrapper #cf-error-details .cf-captcha-actions{margin-top:15px}#cf-wrapper #cf-error-details .cf-captcha-actions a{font-size:0;height:36.38px;overflow:hidden;padding-left:1.2em;padding-right:1.2em;position:relative;text-indent:-9999px;width:36.38px;white-space:nowrap}#cf-wrapper #cf-error-details .cf-captcha-actions a.cf-icon-refresh span{background-position:0 -787px}#cf-wrapper #cf-error-details .cf-captcha-actions a.cf-icon-announce span{background-position:0 -767px}#cf-wrapper #cf-error-details .cf-captcha-actions a.cf-icon-question span{background-position:0 -827px}#cf-wrapper #cf-error-details .cf-screenshot-container{background:url(/cdn-cgi/images/browser-bar.png?1376755637) no-repeat #fff;max-height:400px;max-width:100%;overflow:hidden;padding-top:53px;width:960px;border-radius:5px 5px 0 0}#cf-wrapper #cf-error-details .cf-screenshot-container .cf-no-screenshot{background:url(/cdn-cgi/images/cf-no-screenshot-warn.png) no-repeat;display:block;height:158px;left:25%;margin-top:-79px;overflow:hidden;position:relative;top:50%;width:178px}#cf-wrapper #cf-error-details .cf-captcha-container .cf-screenshot-container,#cf-wrapper #cf-error-details .cf-captcha-container .cf-screenshot-container img,#recaptcha-widget .cf-alert,#recaptcha-widget .recaptcha_only_if_audio,.cf-cookie-error{display:none}#cf-wrapper #cf-error-details .cf-screenshot-container .cf-no-screenshot.error{background:url(/cdn-cgi/images/cf-no-screenshot-error.png) no-repeat;height:175px}#cf-wrapper #cf-error-details .cf-screenshot-container.cf-screenshot-full .cf-no-screenshot{left:50%;margin-left:-89px}.cf-captcha-info iframe{max-width:100%}#cf-wrapper .cf-icon-ok{background:url(/cdn-cgi/images/cf-icon-ok.png) no-repeat;height:48px;width:48px}#cf-wrapper .cf-icon-error{background:url(/cdn-cgi/images/cf-icon-error.png) no-repeat;height:48px;width:48px}#cf-wrapper .cf-icon-browser{background:url(/cdn-cgi/images/cf-icon-browser.png) no-repeat;height:80px;width:100px}#cf-wrapper .cf-icon-cloud{background:url(/cdn-cgi/images/cf-icon-cloud.png) no-repeat;height:77px;width:151px}#cf-wrapper .cf-icon-server{background:url(/cdn-cgi/images/cf-icon-server.png) no-repeat;height:75px;width:95px}#cf-wrapper .cf-caret{border:.33333em solid transparent;border-top-color:inherit;content:"";height:0;width:0;display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1}@media screen and (min-width:49.2em){#cf-wrapper #cf-error-details .cf-status-desc:empty,#cf-wrapper #cf-error-details .cf-status-item.cf-error-source:after,#cf-wrapper #cf-error-details .cf-status-item .cf-icon,#cf-wrapper #cf-error-details .cf-status-label,#cf-wrapper #cf-error-details .cf-status-name{display:block}#cf-wrapper .cf-wrapper{width:708px}#cf-wrapper #cf-error-banner{padding:20px 20px 25px}#cf-wrapper #cf-error-banner .cf-error-actions{margin-bottom:15px}#cf-wrapper #cf-error-banner .cf-error-header-desc h4{margin-right:.5em}#cf-wrapper #cf-error-details h1{font-size:4em}#cf-wrapper #cf-error-details .cf-error-overview{padding-top:2.33333em}#cf-wrapper #cf-error-details .cf-highlight{padding:4em 0}#cf-wrapper #cf-error-details .cf-status-item{text-align:center}#cf-wrapper #cf-error-details .cf-status-item,#cf-wrapper #cf-error-details .cf-status-item.cf-column{padding-bottom:0}#cf-wrapper #cf-error-details .cf-status-item+.cf-status-item{border:0;padding-top:0}#cf-wrapper #cf-error-details .cf-status-item+.cf-status-item:before{background-position:0 -544px;height:24.75px;margin-left:-37.5px;width:75px;background-size:131.25px auto}#cf-wrapper #cf-error-details .cf-icon-error-container{height:85px;margin-bottom:2.5em}#cf-wrapper #cf-error-details .cf-icon-status{bottom:-10px;left:50%;top:auto;right:auto}#cf-wrapper #cf-error-details .cf-error-footer{padding:2.66667em 0}#cf-wrapper #cf-error-details .cf-footer-item,#cf-wrapper #cf-error-details .cf-footer-separator{display:-moz-inline-stack;display:inline-block;vertical-align:baseline;zoom:1}#cf-wrapper #cf-error-details .cf-footer-separator{padding:0 .25em}#cf-wrapper #cf-error-details .cf-status-item.cloudflare-status:before{margin-left:-50px}#cf-wrapper #cf-error-details .cf-status-item.cloudflare-status+.status-item:before{margin-left:-25px}#cf-wrapper #cf-error-details .cf-screenshot-container{height:400px;margin-bottom:-4em;max-width:none}#cf-wrapper #cf-error-details .cf-captcha-container .cf-screenshot-container,#cf-wrapper #cf-error-details .cf-captcha-container .cf-screenshot-container img{display:block}}@media screen and (min-width:66em){#cf-wrapper .cf-wrapper{width:960px}#cf-wrapper #cf-error-banner .cf-close{position:relative;right:auto;top:auto}#cf-wrapper #cf-error-banner .cf-details{white-space:nowrap}#cf-wrapper #cf-error-banner .cf-details-link{padding-right:.5em}#cf-wrapper #cf-error-banner .cf-error-actions{float:right;margin-bottom:0;text-align:left;width:auto}#cf-wrapper #cf-error-details .cf-status-item+.cf-status-item:before{background-position:0 -734px;height:33px;margin-left:-50px;width:100px;background-size:auto}#cf-wrapper #cf-error-details .cf-status-item.cf-cloudflare-status:before{margin-left:-66.67px}#cf-wrapper #cf-error-details .cf-status-item.cf-cloudflare-status+.cf-status-item:before{margin-left:-37.5px}#cf-wrapper #cf-error-details .cf-captcha-image{float:left}#cf-wrapper #cf-error-details .cf-captcha-actions{position:absolute;top:0;right:0}}.no-js #cf-wrapper .js-only{display:none}#cf-wrapper #cf-error-details .heading-ray-id{font-family:monaco,courier,monospace;font-size:15px;white-space:nowrap} #cf-wrapper #cf-error-details .cf-footer-item.hidden,.cf-error-footer .hidden{display:none} .cf-error-footer .cf-footer-ip-reveal-btn{-webkit-appearance:button;-moz-appearance:button;appearance:button;text-decoration:none;background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;color:#0051c3;-webkit-transition:color .15s ease;transition:color .15s ease}.cf-error-footer .cf-footer-ip-reveal-btn:hover{color:#ee730a} diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/comments/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/comments/feed/index.xml deleted file mode 100644 index 05b0810..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/comments/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments for hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/feed/index.xml deleted file mode 100644 index 408c338..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Debugging running Nginx config - - /debugging-running-nginx-config/ - Confessions of a homelab hacker - Wed, 17 Jul 2024 01:42:43 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/index.html deleted file mode 100644 index 8cc5861..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/debugging-running-nginx-config/index.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - -Debugging running Nginx config – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Debugging running Nginx config

-
- - -
- -
-

I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running:

- - - -
nginx -t
- - - -

to test my configuration and ensure I don’t have any syntax errors. I was looking for an easy way to view the actual compiled config and found the -T flag which will test the configuration and dump it to standard out. This is pretty handy if you have a large number of includes in various locations. Here is an example from a fresh Nginx Docker container:

- - - -
root@2771f302dc98:/# nginx -T
-nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
-nginx: configuration file /etc/nginx/nginx.conf test is successful
-# configuration file /etc/nginx/nginx.conf:
-
-user  nginx;
-worker_processes  auto;
-
-error_log  /var/log/nginx/error.log notice;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-}
-
-# configuration file /etc/nginx/mime.types:
-
-types {
-    text/html                                        html htm shtml;
-    text/css                                         css;
-    text/xml                                         xml;
-    image/gif                                        gif;
-    image/jpeg                                       jpeg jpg;
-    application/javascript                           js;
-    application/atom+xml                             atom;
-    application/rss+xml                              rss;
-
-    text/mathml                                      mml;
-    text/plain                                       txt;
-    text/vnd.sun.j2me.app-descriptor                 jad;
-    text/vnd.wap.wml                                 wml;
-    text/x-component                                 htc;
-
-    image/avif                                       avif;
-    image/png                                        png;
-    image/svg+xml                                    svg svgz;
-    image/tiff                                       tif tiff;
-    image/vnd.wap.wbmp                               wbmp;
-    image/webp                                       webp;
-    image/x-icon                                     ico;
-    image/x-jng                                      jng;
-    image/x-ms-bmp                                   bmp;
-
-    font/woff                                        woff;
-    font/woff2                                       woff2;
-
-    application/java-archive                         jar war ear;
-    application/json                                 json;
-    application/mac-binhex40                         hqx;
-    application/msword                               doc;
-    application/pdf                                  pdf;
-    application/postscript                           ps eps ai;
-    application/rtf                                  rtf;
-    application/vnd.apple.mpegurl                    m3u8;
-    application/vnd.google-earth.kml+xml             kml;
-    application/vnd.google-earth.kmz                 kmz;
-    application/vnd.ms-excel                         xls;
-    application/vnd.ms-fontobject                    eot;
-    application/vnd.ms-powerpoint                    ppt;
-    application/vnd.oasis.opendocument.graphics      odg;
-    application/vnd.oasis.opendocument.presentation  odp;
-    application/vnd.oasis.opendocument.spreadsheet   ods;
-    application/vnd.oasis.opendocument.text          odt;
-    application/vnd.openxmlformats-officedocument.presentationml.presentation
-                                                     pptx;
-    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-                                                     xlsx;
-    application/vnd.openxmlformats-officedocument.wordprocessingml.document
-                                                     docx;
-    application/vnd.wap.wmlc                         wmlc;
-    application/wasm                                 wasm;
-    application/x-7z-compressed                      7z;
-    application/x-cocoa                              cco;
-    application/x-java-archive-diff                  jardiff;
-    application/x-java-jnlp-file                     jnlp;
-    application/x-makeself                           run;
-    application/x-perl                               pl pm;
-    application/x-pilot                              prc pdb;
-    application/x-rar-compressed                     rar;
-    application/x-redhat-package-manager             rpm;
-    application/x-sea                                sea;
-    application/x-shockwave-flash                    swf;
-    application/x-stuffit                            sit;
-    application/x-tcl                                tcl tk;
-    application/x-x509-ca-cert                       der pem crt;
-    application/x-xpinstall                          xpi;
-    application/xhtml+xml                            xhtml;
-    application/xspf+xml                             xspf;
-    application/zip                                  zip;
-
-    application/octet-stream                         bin exe dll;
-    application/octet-stream                         deb;
-    application/octet-stream                         dmg;
-    application/octet-stream                         iso img;
-    application/octet-stream                         msi msp msm;
-
-    audio/midi                                       mid midi kar;
-    audio/mpeg                                       mp3;
-    audio/ogg                                        ogg;
-    audio/x-m4a                                      m4a;
-    audio/x-realaudio                                ra;
-
-    video/3gpp                                       3gpp 3gp;
-    video/mp2t                                       ts;
-    video/mp4                                        mp4;
-    video/mpeg                                       mpeg mpg;
-    video/quicktime                                  mov;
-    video/webm                                       webm;
-    video/x-flv                                      flv;
-    video/x-m4v                                      m4v;
-    video/x-mng                                      mng;
-    video/x-ms-asf                                   asx asf;
-    video/x-ms-wmv                                   wmv;
-    video/x-msvideo                                  avi;
-}
-
-# configuration file /etc/nginx/conf.d/default.conf:
-server {
-    listen       80;
-    server_name  localhost;
-
-    #access_log  /var/log/nginx/host.access.log  main;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-    }
-
-    #error_page  404              /404.html;
-
-    # redirect server error pages to the static page /50x.html
-    #
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-
-    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-    #
-    #location ~ \.php$ {
-    #    proxy_pass   http://127.0.0.1;
-    #}
-
-    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-    #
-    #location ~ \.php$ {
-    #    root           html;
-    #    fastcgi_pass   127.0.0.1:9000;
-    #    fastcgi_index  index.php;
-    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-    #    include        fastcgi_params;
-    #}
-
-    # deny access to .htaccess files, if Apache's document root
-    # concurs with nginx's one
-    #
-    #location ~ /\.ht {
-    #    deny  all;
-    #}
-}
-
- - - -

As you can see from the output above, we get all of the various Nginx config files in use printed to the console, perfect for grepping or searching/filtering with other tools.

-
- - -
-
-
-

In

- - -
-, , -
-
- - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.html deleted file mode 100644 index 417f283..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - Redirecting... - - - - -

You are being redirected to index.xml

- - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.xml deleted file mode 100644 index 59b6f54..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/feed/index.xml +++ /dev/null @@ -1,1835 +0,0 @@ - - - - hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - Hardening your web server by only allowing traffic from Cloudflare - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - - - Thu, 01 Aug 2024 21:02:29 +0000 - - - - - - /?p=607 - - - TDLR: - - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-]]>
- - - -
- - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
- - Debugging running Nginx config - /debugging-running-nginx-config/ - - - Wed, 17 Jul 2024 01:42:43 +0000 - - - - - /?p=596 - - - I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running:

- - - -
nginx -t
- - - -

to test my configuration and ensure I don’t have any syntax errors. I was looking for an easy way to view the actual compiled config and found the -T flag which will test the configuration and dump it to standard out. This is pretty handy if you have a large number of includes in various locations. Here is an example from a fresh Nginx Docker container:

- - - -
root@2771f302dc98:/# nginx -T
-nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
-nginx: configuration file /etc/nginx/nginx.conf test is successful
-# configuration file /etc/nginx/nginx.conf:
-
-user  nginx;
-worker_processes  auto;
-
-error_log  /var/log/nginx/error.log notice;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-}
-
-# configuration file /etc/nginx/mime.types:
-
-types {
-    text/html                                        html htm shtml;
-    text/css                                         css;
-    text/xml                                         xml;
-    image/gif                                        gif;
-    image/jpeg                                       jpeg jpg;
-    application/javascript                           js;
-    application/atom+xml                             atom;
-    application/rss+xml                              rss;
-
-    text/mathml                                      mml;
-    text/plain                                       txt;
-    text/vnd.sun.j2me.app-descriptor                 jad;
-    text/vnd.wap.wml                                 wml;
-    text/x-component                                 htc;
-
-    image/avif                                       avif;
-    image/png                                        png;
-    image/svg+xml                                    svg svgz;
-    image/tiff                                       tif tiff;
-    image/vnd.wap.wbmp                               wbmp;
-    image/webp                                       webp;
-    image/x-icon                                     ico;
-    image/x-jng                                      jng;
-    image/x-ms-bmp                                   bmp;
-
-    font/woff                                        woff;
-    font/woff2                                       woff2;
-
-    application/java-archive                         jar war ear;
-    application/json                                 json;
-    application/mac-binhex40                         hqx;
-    application/msword                               doc;
-    application/pdf                                  pdf;
-    application/postscript                           ps eps ai;
-    application/rtf                                  rtf;
-    application/vnd.apple.mpegurl                    m3u8;
-    application/vnd.google-earth.kml+xml             kml;
-    application/vnd.google-earth.kmz                 kmz;
-    application/vnd.ms-excel                         xls;
-    application/vnd.ms-fontobject                    eot;
-    application/vnd.ms-powerpoint                    ppt;
-    application/vnd.oasis.opendocument.graphics      odg;
-    application/vnd.oasis.opendocument.presentation  odp;
-    application/vnd.oasis.opendocument.spreadsheet   ods;
-    application/vnd.oasis.opendocument.text          odt;
-    application/vnd.openxmlformats-officedocument.presentationml.presentation
-                                                     pptx;
-    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-                                                     xlsx;
-    application/vnd.openxmlformats-officedocument.wordprocessingml.document
-                                                     docx;
-    application/vnd.wap.wmlc                         wmlc;
-    application/wasm                                 wasm;
-    application/x-7z-compressed                      7z;
-    application/x-cocoa                              cco;
-    application/x-java-archive-diff                  jardiff;
-    application/x-java-jnlp-file                     jnlp;
-    application/x-makeself                           run;
-    application/x-perl                               pl pm;
-    application/x-pilot                              prc pdb;
-    application/x-rar-compressed                     rar;
-    application/x-redhat-package-manager             rpm;
-    application/x-sea                                sea;
-    application/x-shockwave-flash                    swf;
-    application/x-stuffit                            sit;
-    application/x-tcl                                tcl tk;
-    application/x-x509-ca-cert                       der pem crt;
-    application/x-xpinstall                          xpi;
-    application/xhtml+xml                            xhtml;
-    application/xspf+xml                             xspf;
-    application/zip                                  zip;
-
-    application/octet-stream                         bin exe dll;
-    application/octet-stream                         deb;
-    application/octet-stream                         dmg;
-    application/octet-stream                         iso img;
-    application/octet-stream                         msi msp msm;
-
-    audio/midi                                       mid midi kar;
-    audio/mpeg                                       mp3;
-    audio/ogg                                        ogg;
-    audio/x-m4a                                      m4a;
-    audio/x-realaudio                                ra;
-
-    video/3gpp                                       3gpp 3gp;
-    video/mp2t                                       ts;
-    video/mp4                                        mp4;
-    video/mpeg                                       mpeg mpg;
-    video/quicktime                                  mov;
-    video/webm                                       webm;
-    video/x-flv                                      flv;
-    video/x-m4v                                      m4v;
-    video/x-mng                                      mng;
-    video/x-ms-asf                                   asx asf;
-    video/x-ms-wmv                                   wmv;
-    video/x-msvideo                                  avi;
-}
-
-# configuration file /etc/nginx/conf.d/default.conf:
-server {
-    listen       80;
-    server_name  localhost;
-
-    #access_log  /var/log/nginx/host.access.log  main;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-    }
-
-    #error_page  404              /404.html;
-
-    # redirect server error pages to the static page /50x.html
-    #
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-
-    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-    #
-    #location ~ \.php$ {
-    #    proxy_pass   http://127.0.0.1;/
-    #}
-
-    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-    #
-    #location ~ \.php$ {
-    #    root           html;
-    #    fastcgi_pass   127.0.0.1:9000;
-    #    fastcgi_index  index.php;
-    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-    #    include        fastcgi_params;
-    #}
-
-    # deny access to .htaccess files, if Apache's document root
-    # concurs with nginx's one
-    #
-    #location ~ /\.ht {
-    #    deny  all;
-    #}
-}
-
- - - -

As you can see from the output above, we get all of the various Nginx config files in use printed to the console, perfect for grepping or searching/filtering with other tools.

-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
- - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Stop all running containers with Docker - /stop-all-running-containers-with-docker/ - - - Wed, 03 Apr 2024 13:12:41 +0000 - - - - - /?p=557 - - - These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this:

- - - -
docker container stop $(docker container ps -q)
- - - -

Let me break this down in case you are not familiar with the syntax. Basically we are passing the output of docker container ps -q into docker container stop. This works because the stop command can take a list of container ids which is what we get when passing the -q flag to docker container ps.

-]]>
- - - -
- - Automating CI/CD with TeamCity and Ansible - /automating-ci-cd-with-teamcity-ansible/ - - - Mon, 11 Mar 2024 13:37:47 +0000 - - - - - - https://wordpress.hackanooga.com/?p=393 - - - In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-]]>
- - - -
- - Self hosted package registries with Gitea - /self-hosted-package-registries-with-gitea/ - - - Thu, 07 Mar 2024 15:07:07 +0000 - - - - - - https://wordpress.hackanooga.com/?p=413 - - - I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 2) - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - - - Thu, 15 Feb 2024 20:19:12 +0000 - - - - - - https://wordpress.hackanooga.com/?p=425 - - - In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/feed/index.xml deleted file mode 100644 index f78de4b..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Fun with bots – SSH tarpitting - - /fun-with-bots-ssh-tarpitting/ - Confessions of a homelab hacker - Mon, 24 Jun 2024 13:40:41 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/index.html deleted file mode 100644 index be268d3..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/fun-with-bots-ssh-tarpitting/index.html +++ /dev/null @@ -1,585 +0,0 @@ - - - - - - -Fun with bots – SSH tarpitting – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Fun with bots – SSH tarpitting

-
- - - - -
-

For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking) -
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC -
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots -
-
- - -
-
- - - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml deleted file mode 100644 index bb6372c..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Hardening your web server by only allowing traffic from Cloudflare - - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - Confessions of a homelab hacker - Mon, 16 Sep 2024 13:07:16 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html deleted file mode 100644 index d2bb506..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/index.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - -Hardening your web server by only allowing traffic from Cloudflare – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Hardening your web server by only allowing traffic from Cloudflare

-
- - - - -
-

TDLR:

- - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/feed/index.xml deleted file mode 100644 index 35e13b0..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Hilger Grading Portal - - /hilger-grading-portal/ - Confessions of a homelab hacker - Tue, 12 Mar 2024 21:00:42 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/index.html deleted file mode 100644 index 9e1acd9..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hilger-grading-portal/index.html +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - -Hilger Grading Portal – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Hilger Grading Portal

-
- - -
- -
-

Back around 2014 I took on my first freelance development project for a Homeschool Co-op here in Chattanooga called Hilger Higher Learning. The problem that they were trying to solve involved managing grades and report cards for their students. In the past, they had a developer build a rudimentary web application that would allow them to enter grades for students, however it lacked any sort of concurrency meaning that if two teachers were making changes to the same student at the same time, teacher b’s changes would overwrite teacher a’s changes. This was obviously a huge headache.

- - - -

I built out the first version of the app using PHP and HTML, CSS and Datatables with lots of jQuery sprinkled in. I built in custom functionality that allowed them to easily compile and print all the report cards for all students with the simple click of a button. It was a game changer or them and streamlined the process significantly.

- - - -

That system was in production for 5 years or so with minimal updates and maintance. I recently rebuilt it using React and ChakraUI on the frontend and KeystoneJS on the backend. I also modernized the deployment by building Docker images for the frontend/backend. I actually ended up keeping parts of it in PHP due to the fact that I couldn’t find a JavaScript library that would solve the challenges I had. Here are some screenshots of it in action:

- - - -

- - - -

This is the page listing all teachers in the system and whether or not they have admin privileges. Any admin user can grant other admin users this privilege. There is also a button to send the teacher a password reset email (via Postmark API integration) and an option that allows admin users to impersonate other users for troubleshooting and diagnostic purposes.

- - - -

- - - -
- - - -

The data is all coming from the KeystoneJS backend GraphQL API. I am using urql for fetching the data and handling mutations. This is the page that displays students. It is filterable and searchable. Teachers also have the ability to mark a student as active or inactive for the semester as well as delete them from the system.

- - - -
- - - -

Clicking on a student takes the teacher/admin to an edit course screen where they can add and remove courses for each student. A teacher can add as many courses as they need. If multiple teachers have added courses for this student, the user will only see the courses they have entered.

- - - -
- - - -

There is another page that allows admin users to view and manage all of the parents in the system. It allows them to easily send a password reset email to the parents as well as to view the parent portal.

- - - -
- - - -
- - - -

Technologies used

- - - -
    -
  • Digital Ocean Droplet (Server) – Ubuntu Server
  • - - - -
  • Docker (Frontend, Backend, PHP, Postgresql database)
  • - - - -
  • Git
  • - - - -
  • NodeJS
  • - - - -
  • PHP
  • - - - -
  • ChakraUI
  • - - - -
  • KeystoneJS
  • - - - -
  • Postmark
  • - - - -
  • GraphQL
  • - - - -
  • Typescript
  • - - - -
  • React
  • - - - -
  • urql
  • -
-
- - -
-
- - - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - -
-
- - - - - -
-
- - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/feed/index.xml deleted file mode 100644 index 18aac9c..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Hoots Wings - - /hoots-wings/ - Confessions of a homelab hacker - Tue, 12 Mar 2024 21:00:26 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/index.html deleted file mode 100644 index 7091562..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/hoots-wings/index.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - -Hoots Wings – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Hoots Wings

-
- - -
hootswings.com screenshot
- -
-

While working for Morrison I had the pleasure of building a website for Hoots Wings. The CMS was Perch and it was mostly HTML, CSS, PHP and JavaScript on the frontend, however I built out a customer store locator using NodeJS and VueJS.

- - - -
- - - -

I was the sole frontend developer responsible for taking the designs from SketchUp and translating them to the site you see now. Most of the blocks and templates are built using a mix of PHP and HTML/SCSS. There was also some JavaScript for things like getting the users location and rendering popups/modals.

- - - -

The store locator was a separate piece that was built in Vue2.0 with a NodeJS backend. For the backend I used KeystoneJS to hold all of the store information. There was also some custom development that was done in order to sync the stores added via the CMS with Yext and vice versa.

- - - -
hootswings.com screenshot
- - - -

For that piece I ended up having to write a custom integration in Perch that would connect to the NodeJS backend and pull the stores but also make sure that those were in sync with Yext. This required diving into the Yext API some and examining a similar integration that we had for another client site.

- - - -

Unfortunately I don’t have any screen grabs of the admin side of things since that is proprietary but the system I built allowed a site admin to go in and add/edit store locations that would show up on the site and also show up in Yext with the appropriate information.

- - - -

Screenshots

- - - -

Here are some full screenshots of the site.

- - - -

Homepage

- - - -
hootswings.com homepage screenshot
- - - -

- - - -

Menu Page

- - - -
- - - -

- - - -

Locations Page

- - - -
-
- - -
-
- - - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/index.html deleted file mode 100644 index 69803d7..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/index.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - - - -hackanooga – Confessions of a homelab hacker - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-
-
-

Hi there! -

- - - -

My name is Mike, and I am a Software Engineer. This my little place to talk about what I am most passionate about.

- - - - -
-
-
- - - -
- - - -
-
-

Mike is a solutions driven professional with 10+ years of experience in the tech industry. He has filled various roles from technical support, frontend and backend development, system administration, networking, IT and DevOps.

-
- - - -
-

I am a problem solver and a change maker who has a unique ability to understand high level concepts and requirements and translate those into actionable, meaningful results.

-
-
- - - -

Things I care about

- - - -
-
-
- - - -
-
Chadev
- - - -

A community for developers by developers right here in Chattanooga TN.

- - - - -
-
- - - -
-
- - - -
-
Let’s Connect
- - - -

Connect and follow me on LinkedIn to keep up with my ramblings.

- - - - -
-
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/my-story/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/my-story/index.html deleted file mode 100644 index f1306fb..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/my-story/index.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - -My Story – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-

My Story

- - - - -
-

I am a software engineer with 10+ years in the industry. My journey into software development started out in a call center in Tampa Florida doing tech support for Dell Computers. The year was 2010. I was into technology and computers and had studied hard to ace my CompTIA Network+ certificate but I didn’t have much background in programming.

- - - -

I remember some co-workers of mine built some small web applications to help us automate some of the mundane tasks of data entry that we would have to do on support calls. I thought those guys were so cool that they could just make something out of nothing.

- - - -

In 2011 I decided it was time for a change in my life and I quit my job, packed my bags and headed to Chattanooga TN. I got a job working for Comcast as a field service technician since I already had 4 years of experience doing that back in Florida.

- - - -

I continued to mess around with tech and home servers, trying to hone my skills and get my foot in the door in IT. In 2014 I got the opportunity to work full time at my local church in the IT department. At the time we had a staff of around 50 people not including volunteers. My day to day responsibilities included everything from installing/configuring routers and switches to running cabling and setting up servers.

- - - -

It was in that position that my passing for software really started to ignite. As I was involved in managing so many different systems on a daily basis, I began to see the need for automation and software that could make things easier. I was also working part time in a restaurant attached to the church. One of my first software projects was creating a digital menu board with a Raspberry PI and a TV mounted on a wall outside the restaurant.

- - - -

I remember I struggled to get a WordPress site up and running. I had never touched PHP or JavaScript up to that point but I was pretty comfortable with BASH and some basic scripting. I also have a knack for diving in and trying to figure things out. I finally got that menu board up and running and maintained it for a year or so. It was my first “production” system and sparked something in me that has never left.

- - - -

While in that role, I also designed and built a Kitchen display system that synced with the restaurants POS and pulled in tickets every 30 seconds or so. It was my first full stack development project. HTML, CSS and JavaScript on the frontend and PHP with a MySQL database on the backend. I was pretty proud of that project even though it never really got use in “production”.

- - - -

From there I started learning web proxies and device filtering technologies. I left that role in 2017 and started my own venture. Enxo LLC. My goal was to create parental control software that actually worked. That was effective and not trivial to get around. I bought a small Poweredge server, installed Ubuntu Server on it and started playing around with LXC containers.

- - - -

I found an option source proxy solution that was written in Go that I deployed to my server and also set up VPN connections and firewalls. I was using an MDM solution to manage my customers devices and I put a web portal with NodeJS and PHP to help manage everything as well as to generate weekly reports to send out to my customers.

- - - -

I even built an iOS app in Swift but unfortunately was never able to get it into the app store. I learned a lot from that venture but ultimately I felt like I would never be able to take on big tech by myself and I just wouldn’t be able to build it the way that I wanted.

- - - -

Professional Career

- - - -

Fast forward to 2019 the start of my “professional” career. I was doing the freelance thing for awhile and also working in a restaurant part time. It was cool and all but then my wife got pregnant with our first child and I knew that it was time for me to get a “real” job.

- - - -

I faced the same challenge that a lot of people face in that I had some practical hands on experience but I didn’t have any real world or professional experience. I applied to a number of jobs and eventually got a call back from a company out of Massachusetts called Virtual Inc. They were hiring for a junior and senior web developer position.

- - - -

I applied for the junior position knowing that I didn’t have enough background to get the senior role. The job was OK and the company was pretty cool. I was doing mostly WordPress, a little bit of Salesforce and some other one off CRM’s thrown in the mix as well. It was great to put on my resume and pay the bills but it wasn’t necessarily what I wanted to do long term.

- - - -

…TO BE CONTINUED…

-
- - -
-
-
- - - - - - -
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/portfolio/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/portfolio/index.html deleted file mode 100644 index cc925ca..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/portfolio/index.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - -Portfolio – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-

Portfolio

- - - - -
-
    -
  • - -
    -
    Hoots Wings
    - - - -
    -

    Hoots Wings

    - -
    -

    While working for Morrison I had the pleasure of building a website for Hoots Wings. The CMS was Perch and it was mostly HTML, CSS, PHP and JavaScript on the frontend, however I built out a customer store locator using NodeJS and VueJS. I was the sole frontend developer responsible for taking the designs from…

    -

    read more

    -
    -
    -
    - -
  • -
  • - -
    -
    Hilger Grading Portal
    - - - -
    -

    Hilger Grading Portal

    - -
    -

    Back around 2014 I took on my first freelance development project for a Homeschool Co-op here in Chattanooga called Hilger Higher Learning. The problem that they were trying to solve involved managing grades and report cards for their students. In the past, they had a developer build a rudimentary web application that would allow them…

    -

    read more

    -
    -
    -
    - -
  • -
-
- - -
-
-
- - - - - - -
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml deleted file mode 100644 index ba75f72..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Roll your own authenticator app with KeystoneJS and React – pt 2 - - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - Confessions of a homelab hacker - Wed, 13 Mar 2024 12:54:04 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html deleted file mode 100644 index 04035c8..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/index.html +++ /dev/null @@ -1,589 +0,0 @@ - - - - - - -Roll your own authenticator app with KeystoneJS and React – pt 2 – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Roll your own authenticator app with KeystoneJS and React – pt 2

-
- - - - -
-

In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "[email protected]" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: '[email protected]',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: '[email protected]',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml deleted file mode 100644 index 2c78369..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Roll your own authenticator app with KeystoneJS and React – pt 3 - - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ - Confessions of a homelab hacker - Wed, 13 Mar 2024 16:14:24 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html deleted file mode 100644 index a9372c0..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/index.html +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - -Roll your own authenticator app with KeystoneJS and React – pt 3 – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Roll your own authenticator app with KeystoneJS and React – pt 3

-
- - - - -
-

In our previous post we got to the point of displaying an OTP in our card component. Now it is time to refactor a bit and implement a countdown functionality to see when this token will expire. For now we will go ahead and add this logic into our Card component. In order to figure out how to build this countdown timer we first need to understand how the TOTP counter is calculated.

- - - -

In other words, we know that at TOTP token is derived from a secret key and the current time. If we dig into the spec some we can find that time is a reference to Linux epoch time or the number of seconds that have elapsed since January 1st 1970. For a little more clarification check out this Stackexchange article.

- - - -

So if we know that the time is based on epoch time, we also need to know that most TOTP tokens have a validity period of either 30 seconds or 60 seconds. 30 seconds is the most common standard so we will use that for our implementation. If we put all that together then basically all we need is 2 variables:

- - - -
    -
  1. Number of seconds since epoch
  2. - - - -
  3. How many seconds until this token expires
  4. -
- - - -

The first one is easy:

- - - -
let secondsSinceEpoch;
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-# This gives us a time like so: 1710338609
- - - -

For the second one we will need to do a little math but it’s pretty straightforward. We need to divide secondsSinceEpoch by 30 seconds and then subtract this number from 30. Here is what that looks like:

- - - -
let secondsSinceEpoch;
-let secondsRemaining;
-const period = 30;
-
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-secondsRemaining = period - (secondsSinceEpoch % period);
- - - -

Now let’s put all of that together into a function that we can test out to make sure we are getting the results we expect.

- - - -
const timer = setInterval(() => {
-  countdown()
-}, 1000)
-
-function countdown() {
-  let secondsSinceEpoch;
-  let secondsRemaining;
-
-  const period = 30;
-  secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-  secondsRemaining = period - (secondsSinceEpoch % period);
-  console.log(secondsSinceEpoch, secondsRemaining)
-  if (secondsRemaining == 1) {
-    console.log("timer done")
-    clearInterval(timer)
-  }
-}
-
- - - -

Running this function should give you output similar to the following. In this example we are stopping the timer once it hits 1 second just to show that everything is working as we expect. In our application we will want this time to keep going forever:

- - - -
1710339348, 12
-1710339349, 11
-1710339350, 10
-1710339351, 9
-1710339352, 8
-1710339353, 7
-1710339354, 6
-1710339355, 5
-1710339356, 4
-1710339357, 3
-1710339358, 2
-1710339359, 1
-"timer done"
- - - -

Here is a JSfiddle that shows it in action: https://jsfiddle.net/561vg3k7/

- - - -

We can go ahead and add this function to our Card component and get it wired up. I am going to skip ahead a bit and add a progress bar to our card that is synced with our countdown timer and changes colors as it drops below 10 seconds. For now we will be using a setInterval function to accomplish this.

- - - -

Here is what my updated src/Components/Card.tsx looks like:

- - - -
import { useState } from "react";
-import { IToken } from "../App"
-import { TOTP } from 'totp-generator';
-
-
-function Card({ token }: { token: IToken }) {
-  const { otp } = TOTP.generate(token.token);
-  const [timerStyle, setTimerStyle] = useState("");
-  const [timerWidth, setTimerWidth] = useState("");
-
-
-  function countdown() {
-    let secondsSinceEpoch: number;
-    let secondsRemaining: number = 30;
-    const period = 30;
-    secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-    secondsRemaining = period - (secondsSinceEpoch % period);
-    setTimerWidth(`${100 - (100 / 30 * (30 - secondsRemaining))}%`)
-    setTimerStyle(secondsRemaining < 10 ? "salmon" : "lightgreen")
-  }
-  setInterval(() => {
-    countdown();
-  }, 250);
-  return (
-    <>
-      <div className='card'>
-        <div className='progressBar'style={{ width: timerWidth, backgroundColor: timerStyle}}></div>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span >{otp}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -

Pretty straightforward. I also updated my src/index.css and added a style for our progress bar:

- - - -
.progressBar {
-  height: 10px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: inherit;
-}
-// Also be sure to add position:relative to .card which is the parent of this.
- - - -

Here is what it all looks like in action:

- - - -
- - - -

If you look closely you will notice a few interesting things. First is that the color of the progress bar changes from green to red. This is handled by our timerStyle variable. That part is pretty simple, if the timer is less than 10 seconds we set the background color as salmon otherwise we use light green. The width of the progress bar is controlled by `${100 – (100 / 30 * (30 – secondsRemaining))}%`

- - - -

The other interesting thing to note is that when the timer runs out it automatically restarts at 30 seconds with a new OTP. This is due to the fact that this component is re-rendering every 1/4 second and every time it re-renders it is running the entire function body including: const { otp } = TOTP.generate(token.token);.

- - - -

This is to be expected since we are using React and we are just using a setInterval. It may be a little unexpected though if you aren’t as familiar with React render cycles. For our purposes this will work just fine for now. Stay tuned for pt 4 of this series where we wire up the backend API.

-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml deleted file mode 100644 index 4753e91..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Roll your own authenticator app with KeystoneJS and React - - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - Confessions of a homelab hacker - Wed, 13 Mar 2024 01:29:55 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/index.html deleted file mode 100644 index 8565f01..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/roll-your-own-authenticator-app-with-keystonejs-and-react/index.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - - - -Roll your own authenticator app with KeystoneJS and React – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Roll your own authenticator app with KeystoneJS and React

-
- - - - -
-

In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "[email protected]" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐️ Server listening on :3000 (http://localhost:3000/)
-⭐️ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/feed/index.xml deleted file mode 100644 index e98fbdf..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Self hosted package registries with Gitea - - /self-hosted-package-registries-with-gitea/ - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:32 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/index.html deleted file mode 100644 index 35c449d..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/self-hosted-package-registries-with-gitea/index.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - -Self hosted package registries with Gitea – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Self hosted package registries with Gitea

-
- - - - -
-

I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-
- - -
-
-
-

In

- - -
-, , , -
-
- - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml deleted file mode 100644 index cb33dea..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: SFTP Server Setup for Daily Inventory File Transfers - - /sftp-server-setup-for-daily-inventory-file-transfers/ - Confessions of a homelab hacker - Wed, 17 Jul 2024 02:15:23 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/index.html deleted file mode 100644 index 5772a40..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/sftp-server-setup-for-daily-inventory-file-transfers/index.html +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - -SFTP Server Setup for Daily Inventory File Transfers – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

SFTP Server Setup for Daily Inventory File Transfers

-
- - - - -
-

Job Description

- - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/feed/index.xml deleted file mode 100644 index 92c4186..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Standing up a Wireguard VPN - - /standing-up-a-wireguard-vpn/ - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/index.html deleted file mode 100644 index 820ca2a..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/standing-up-a-wireguard-vpn/index.html +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - -Standing up a Wireguard VPN – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Standing up a Wireguard VPN

-
- - - - -
-

VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean [email protected] -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean [email protected]
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com
- * Management:     https://landscape.canonical.com
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean [email protected]
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com
- * Management:     https://landscape.canonical.com
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/feed/index.xml deleted file mode 100644 index 9089536..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Stop all running containers with Docker - - /stop-all-running-containers-with-docker/ - Confessions of a homelab hacker - Wed, 03 Apr 2024 13:12:41 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/index.html deleted file mode 100644 index 024ee35..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/stop-all-running-containers-with-docker/index.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -Stop all running containers with Docker – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Stop all running containers with Docker

-
- - -
- -
-

These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this:

- - - -
docker container stop $(docker container ps -q)
- - - -

Let me break this down in case you are not familiar with the syntax. Basically we are passing the output of docker container ps -q into docker container stop. This works because the stop command can take a list of container ids which is what we get when passing the -q flag to docker container ps.

-
- - -
-
- - - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/feed/index.xml deleted file mode 100644 index dee58ac..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/feed/index.xml +++ /dev/null @@ -1,227 +0,0 @@ - - - - Authentication – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 16:14:24 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Authentication – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 3 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ - - - Wed, 17 Jan 2024 17:11:00 +0000 - - - - - - /?p=546 - - - In our previous post we got to the point of displaying an OTP in our card component. Now it is time to refactor a bit and implement a countdown functionality to see when this token will expire. For now we will go ahead and add this logic into our Card component. In order to figure out how to build this countdown timer we first need to understand how the TOTP counter is calculated.

- - - -

In other words, we know that at TOTP token is derived from a secret key and the current time. If we dig into the spec some we can find that time is a reference to Linux epoch time or the number of seconds that have elapsed since January 1st 1970. For a little more clarification check out this Stackexchange article.

- - - -

So if we know that the time is based on epoch time, we also need to know that most TOTP tokens have a validity period of either 30 seconds or 60 seconds. 30 seconds is the most common standard so we will use that for our implementation. If we put all that together then basically all we need is 2 variables:

- - - -
    -
  1. Number of seconds since epoch
  2. - - - -
  3. How many seconds until this token expires
  4. -
- - - -

The first one is easy:

- - - -
let secondsSinceEpoch;
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-# This gives us a time like so: 1710338609
- - - -

For the second one we will need to do a little math but it’s pretty straightforward. We need to divide secondsSinceEpoch by 30 seconds and then subtract this number from 30. Here is what that looks like:

- - - -
let secondsSinceEpoch;
-let secondsRemaining;
-const period = 30;
-
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-secondsRemaining = period - (secondsSinceEpoch % period);
- - - -

Now let’s put all of that together into a function that we can test out to make sure we are getting the results we expect.

- - - -
const timer = setInterval(() => {
-  countdown()
-}, 1000)
-
-function countdown() {
-  let secondsSinceEpoch;
-  let secondsRemaining;
-
-  const period = 30;
-  secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-  secondsRemaining = period - (secondsSinceEpoch % period);
-  console.log(secondsSinceEpoch, secondsRemaining)
-  if (secondsRemaining == 1) {
-    console.log("timer done")
-    clearInterval(timer)
-  }
-}
-
- - - -

Running this function should give you output similar to the following. In this example we are stopping the timer once it hits 1 second just to show that everything is working as we expect. In our application we will want this time to keep going forever:

- - - -
1710339348, 12
-1710339349, 11
-1710339350, 10
-1710339351, 9
-1710339352, 8
-1710339353, 7
-1710339354, 6
-1710339355, 5
-1710339356, 4
-1710339357, 3
-1710339358, 2
-1710339359, 1
-"timer done"
- - - -

Here is a JSfiddle that shows it in action: https://jsfiddle.net/561vg3k7/

- - - -

We can go ahead and add this function to our Card component and get it wired up. I am going to skip ahead a bit and add a progress bar to our card that is synced with our countdown timer and changes colors as it drops below 10 seconds. For now we will be using a setInterval function to accomplish this.

- - - -

Here is what my updated src/Components/Card.tsx looks like:

- - - -
import { useState } from "react";
-import { IToken } from "../App"
-import { TOTP } from 'totp-generator';
-
-
-function Card({ token }: { token: IToken }) {
-  const { otp } = TOTP.generate(token.token);
-  const [timerStyle, setTimerStyle] = useState("");
-  const [timerWidth, setTimerWidth] = useState("");
-
-
-  function countdown() {
-    let secondsSinceEpoch: number;
-    let secondsRemaining: number = 30;
-    const period = 30;
-    secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-    secondsRemaining = period - (secondsSinceEpoch % period);
-    setTimerWidth(`${100 - (100 / 30 * (30 - secondsRemaining))}%`)
-    setTimerStyle(secondsRemaining < 10 ? "salmon" : "lightgreen")
-  }
-  setInterval(() => {
-    countdown();
-  }, 250);
-  return (
-    <>
-      <div className='card'>
-        <div className='progressBar'style={{ width: timerWidth, backgroundColor: timerStyle}}></div>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span >{otp}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -

Pretty straightforward. I also updated my src/index.css and added a style for our progress bar:

- - - -
.progressBar {
-  height: 10px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: inherit;
-}
-// Also be sure to add position:relative to .card which is the parent of this.
- - - -

Here is what it all looks like in action:

- - - -
- - - -

If you look closely you will notice a few interesting things. First is that the color of the progress bar changes from green to red. This is handled by our timerStyle variable. That part is pretty simple, if the timer is less than 10 seconds we set the background color as salmon otherwise we use light green. The width of the progress bar is controlled by `${100 – (100 / 30 * (30 – secondsRemaining))}%`

- - - -

The other interesting thing to note is that when the timer runs out it automatically restarts at 30 seconds with a new OTP. This is due to the fact that this component is re-rendering every 1/4 second and every time it re-renders it is running the entire function body including: const { otp } = TOTP.generate(token.token);.

- - - -

This is to be expected since we are using React and we are just using a setInterval. It may be a little unexpected though if you aren’t as familiar with React render cycles. For our purposes this will work just fine for now. Stay tuned for pt 4 of this series where we wire up the backend API.

-]]>
- - - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/index.html deleted file mode 100644 index 08888bb..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/authentication/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -Authentication – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: Authentication -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/feed/index.xml deleted file mode 100644 index f7f8610..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/feed/index.xml +++ /dev/null @@ -1,1924 +0,0 @@ - - - - Blog Post – hackanooga - - / - Confessions of a homelab hacker - Wed, 25 Sep 2024 13:56:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Blog Post – hackanooga - / - 32 - 32 - - - Standing up a Wireguard VPN - /standing-up-a-wireguard-vpn/ - - - Wed, 25 Sep 2024 13:56:04 +0000 - - - - - - - - - /?p=619 - - - VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure.

- - - -

For this tutorial we will be using Terraform to stand up a Digital Ocean droplet and then install Wireguard onto that. The Digital Ocean droplet will be acting as our “server” in this example and we will be using our own computer as the “client”. Of course, you don’t have to use Terraform, you just need a Linux box to install Wireguard on. You can find the code for this tutorial on my personal Git server here.

- - - -

Create Droplet with Terraform

- - - -

I have written some very basic Terraform to get us started. The Terraform is very basic and just creates a droplet with a predefined ssh key and a setup script passed as user data. When the droplet gets created, the script will get copied to the instance and automatically executed. After a few minutes everything should be ready to go. If you want to clone the repo above, feel free to, or if you would rather do everything by hand that’s great too. I will assume that you are doing everything by hand. The process of deploying from the repo should be pretty self explainitory. My reasoning for doing it this way is because I wanted to better understand the process.

- - - -

First create our main.tf with the following contents:

- - - -
# main.tf
-# Attach an SSH key to our droplet
-resource "digitalocean_ssh_key" "default" {
-  name       = "Terraform Example"
-  public_key = file("./tf-digitalocean.pub")
-}
-
-# Create a new Web Droplet in the nyc1 region
-resource "digitalocean_droplet" "web" {
-  image    = "ubuntu-22-04-x64"
-  name     = "wireguard"
-  region   = "nyc1"
-  size     = "s-2vcpu-4gb"
-  ssh_keys = [digitalocean_ssh_key.default.fingerprint]
-  user_data = file("setup.sh")
-}
-
-output "droplet_output" {
-  value = digitalocean_droplet.web.ipv4_address
-}
- - - -

Next create a terraform.tf file in the same directory with the following contents:

- - - -
terraform {
-  required_providers {
-    digitalocean = {
-      source  = "digitalocean/digitalocean"
-      version = "2.41.0"
-    }
-  }
-}
-
-provider "digitalocean" {
-}
-
- - - -

Now we will need to create the ssh key that we defined in our Terraform code.

- - - -
$ ssh-keygen -t rsa -C "WireguardVPN" -f ./tf-digitalocean -q -N ""
- - - -

Next we need to set an environment variable for our DigitalOcean access token.

- - - -
$ export DIGITALOCEAN_ACCESS_TOKEN=dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - -

Now we are ready to initialize our Terraform and apply it:

- - - -
$ terraform init
-$ terraform apply
-
-Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-  + create
-
-Terraform will perform the following actions:
-
-  # digitalocean_droplet.web will be created
-  + resource "digitalocean_droplet" "web" {
-      + backups              = false
-      + created_at           = (known after apply)
-      + disk                 = (known after apply)
-      + graceful_shutdown    = false
-      + id                   = (known after apply)
-      + image                = "ubuntu-22-04-x64"
-      + ipv4_address         = (known after apply)
-      + ipv4_address_private = (known after apply)
-      + ipv6                 = false
-      + ipv6_address         = (known after apply)
-      + locked               = (known after apply)
-      + memory               = (known after apply)
-      + monitoring           = false
-      + name                 = "wireguard"
-      + price_hourly         = (known after apply)
-      + price_monthly        = (known after apply)
-      + private_networking   = (known after apply)
-      + region               = "nyc1"
-      + resize_disk          = true
-      + size                 = "s-2vcpu-4gb"
-      + ssh_keys             = (known after apply)
-      + status               = (known after apply)
-      + urn                  = (known after apply)
-      + user_data            = "69d130f386b262b136863be5fcffc32bff055ac0"
-      + vcpus                = (known after apply)
-      + volume_ids           = (known after apply)
-      + vpc_uuid             = (known after apply)
-    }
-
-  # digitalocean_ssh_key.default will be created
-  + resource "digitalocean_ssh_key" "default" {
-      + fingerprint = (known after apply)
-      + id          = (known after apply)
-      + name        = "Terraform Example"
-      + public_key  = <<-EOT
-            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXOBlFdNqV48oxWobrn2rPt4y1FTqrqscA5bSu2f3CogwbDKDyNglXu8RL4opjfdBHQES+pEqvt21niqes8z2QsBTF3TRQ39SaHM8wnOTeC8d0uSgyrp9b7higHd0SDJVJZT0Bz5AlpYfCO/gpEW51XrKKeud7vImj8nGPDHnENN0Ie0UVYZ5+V1zlr0BBI7LX01MtzUOgSldDX0lif7IZWW4XEv40ojWyYJNQwO/gwyDrdAq+kl+xZu7LmBhngcqd02+X6w4SbdgYg2flu25Td0MME0DEsXKiZYf7kniTrKgCs4kJAmidCDYlYRt43dlM69pB5jVD/u4r3O+erTapH/O1EDhsdA9y0aYpKOv26ssYU+ZXK/nax+Heu0giflm7ENTCblKTPCtpG1DBthhX6Ml0AYjZF1cUaaAvpN8UjElxQ9r+PSwXloSnf25/r9UOBs1uco8VDwbx5cM0SpdYm6ERtLqGRYrG2SDJ8yLgiCE9EK9n3uQExyrTMKWzVAc= WireguardVPN
-        EOT
-    }
-
-Plan: 2 to add, 0 to change, 0 to destroy.
-
-Changes to Outputs:
-  + droplet_output = (known after apply)
-
-Do you want to perform these actions?
-  Terraform will perform the actions described above.
-  Only 'yes' will be accepted to approve.
-
-  Enter a value: yes
-
-digitalocean_ssh_key.default: Creating...
-digitalocean_ssh_key.default: Creation complete after 1s [id=43499750]
-digitalocean_droplet.web: Creating...
-digitalocean_droplet.web: Still creating... [10s elapsed]
-digitalocean_droplet.web: Still creating... [20s elapsed]
-digitalocean_droplet.web: Still creating... [30s elapsed]
-digitalocean_droplet.web: Creation complete after 31s [id=447469336]
-
-Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-
-Outputs:
-
-droplet_output = "159.223.113.207"
-
- - - -

All pretty standard stuff. Nice! It only took about 30 seconds or so on my machine to spin up a droplet and start provisioning it. It is worth noting that the setup script will take a few minutes to run. Before we log into our new droplet, let’s take a quick look at the setup script that we are running.

- - - -
#!/usr/bin/env sh
-set -e
-set -u
-# Set the listen port used by Wireguard, this is the default so feel free to change it.
-LISTENPORT=51820
-CONFIG_DIR=/root/wireguard-conf
-umask 077
-mkdir -p $CONFIG_DIR/client
-
-# Install wireguard
-apt update && apt install -y wireguard
-
-# Generate public/private key for the "server".
-wg genkey > $CONFIG_DIR/privatekey
-wg pubkey < $CONFIG_DIR/privatekey > $CONFIG_DIR/publickey
-
-# Generate public/private key for the "client"
-wg genkey > $CONFIG_DIR/client/privatekey
-wg pubkey < $CONFIG_DIR/client/privatekey > $CONFIG_DIR/client/publickey
-
-
-# Generate server config
-echo "[Interface]
-Address = 10.66.66.1/24,fd42:42:42::1/64
-ListenPort = $LISTENPORT
-PrivateKey = $(cat $CONFIG_DIR/privatekey)
-
-### Client config
-[Peer]
-PublicKey = $(cat $CONFIG_DIR/client/publickey)
-AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
-" > /etc/wireguard/do.conf
-
-
-# Generate client config.  This will need to be copied to your machine.
-echo "[Interface]
-PrivateKey = $(cat $CONFIG_DIR/client/privatekey)
-Address = 10.66.66.2/32,fd42:42:42::2/128
-DNS = 1.1.1.1,1.0.0.1
-
-[Peer]
-PublicKey = $(cat publickey)
-Endpoint = $(curl icanhazip.com):$LISTENPORT
-AllowedIPs = 0.0.0.0/0,::/0
-" > client-config.conf
-
-wg-quick up do
-
-# Add iptables rules to forward internet traffic through this box
-# We are assuming our Wireguard interface is called do and our
-# primary public facing interface is called eth0.
-
-iptables -I INPUT -p udp --dport 51820 -j ACCEPT
-iptables -I FORWARD -i eth0 -o do -j ACCEPT
-iptables -I FORWARD -i do -j ACCEPT
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-ip6tables -I FORWARD -i do -j ACCEPT
-ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
-# Enable routing on the server
-echo "net.ipv4.ip_forward = 1
-      net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
-sysctl --system
- - - -

As you can see, it is pretty straightforward. All you really need to do is:

- - - -

On the “server” side:

- - - -
    -
  1. Generate a private key and derive a public key from it for both the “server” and the “client”.
  2. - - - -
  3. Create a “server” config that tells the droplet what address to bind to for the wireguard interface, which private key to use to secure that interface and what port to listen on.
  4. - - - -
  5. The “server” config also needs to know what peers or “clients” to accept connections from in the AllowedIPs block. In this case we are just specifying one. The “server” also needs to know the public key of the “client” that will be connecting.
  6. -
- - - -

On the “client” side:

- - - -
    -
  1. Create a “client” config that tells our machine what address to assign to the wireguard interface (obviously needs to be on the same subnet as the interface on the server side).
  2. - - - -
  3. The client needs to know which private key to use to secure the interface.
  4. - - - -
  5. It also needs to know the public key of the server as well as the public IP address/hostname of the “server” it is connecting to as well as the port it is listening on.
  6. - - - -
  7. Finally it needs to know what traffic to route over the wireguard interface. In this example we are simply routing all traffic but you could restrict this as you see fit.
  8. -
- - - -

Now that we have our configs in place, we need to copy the client config to our local machine. The following command should work as long as you make sure to replace the IP address with the IP address of your newly created droplet:

- - - -
## Make sure you have Wireguard installed on your local machine as well.
-## https://wireguard.com/install
-
-## Copy the client config to our local machine and move it to our wireguard directory.
-$ ssh -i tf-digitalocean root@157.230.177.54 -- cat /root/wireguard-conf/client-config.conf| sudo tee /etc/wireguard/do.conf
- - - -

Before we try to connect, let’s log into the server and make sure everything is set up correctly:

- - - -
$ ssh -i tf-digitalocean root@159.223.113.207
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:19:02 UTC 2024
-
-  System load:  0.03              Processes:             113
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.221.196
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-70 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-Last login: Wed Sep 25 13:16:25 2024 from 74.221.191.214
-root@wireguard:~#
-
-
- - - -

Awesome! We are connected. Now let’s check the wireguard interface using the wg command. If our config was correct, we should see an interface line and 1 peer line like so. If the peer line is missing then something is wrong with the configuration. Most likely a mismatch between public/private key.:

- - - -
root@wireguard:~# wg
-interface: do
-  public key: fTvqo/cZVofJ9IZgWHwU6XKcIwM/EcxUsMw4voeS/Hg=
-  private key: (hidden)
-  listening port: 51820
-
-peer: 5RxMenh1L+rNJobROkUrub4DBUj+nEUPKiNe4DFR8iY=
-  allowed ips: 10.66.66.2/32, fd42:42:42::2/128
-root@wireguard:~# 
- - - -

So now we should be ready to go! On your local machine go ahead and try it out:

- - - -
## Start the interface with wg-quick up [interface_name]
-$ sudo wg-quick up do
-[sudo] password for mikeconrad: 
-[#] ip link add do type wireguard
-[#] wg setconf do /dev/fd/63
-[#] ip -4 address add 10.66.66.2/32 dev do
-[#] ip -6 address add fd42:42:42::2/128 dev do
-[#] ip link set mtu 1420 up dev do
-[#] resolvconf -a do -m 0 -x
-[#] wg set do fwmark 51820
-[#] ip -6 route add ::/0 dev do table 51820
-[#] ip -6 rule add not fwmark 51820 table 51820
-[#] ip -6 rule add table main suppress_prefixlength 0
-[#] ip6tables-restore -n
-[#] ip -4 route add 0.0.0.0/0 dev do table 51820
-[#] ip -4 rule add not fwmark 51820 table 51820
-[#] ip -4 rule add table main suppress_prefixlength 0
-[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
-[#] iptables-restore -n
-
-## Check our config
-$ sudo wg
-interface: do
-  public key: fJ8mptCR/utCR4K2LmJTKTjn3xc4RDmZ3NNEQGwI7iI=
-  private key: (hidden)
-  listening port: 34596
-  fwmark: 0xca6c
-
-peer: duTHwMhzSZxnRJ2GFCUCHE4HgY5tSeRn9EzQt9XVDx4=
-  endpoint: 157.230.177.54:51820
-  allowed ips: 0.0.0.0/0, ::/0
-  latest handshake: 1 second ago
-  transfer: 1.82 KiB received, 2.89 KiB sent
-
-## Make sure we can ping the outside world
-mikeconrad@pop-os:~/projects/wireguard-terraform-digitalocean$ ping 1.1.1.1
-PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
-64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.0 ms
-^C
---- 1.1.1.1 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 27.991/27.991/27.991/0.000 ms
-
-## Verify our traffic is actually going over the tunnel.
-$ curl icanhazip.com
-157.230.177.54
-
-
-
- - - -

We should also be able to ssh into our instance over the VPN using the 10.66.66.1 address:

- - - -
$ ssh -i tf-digitalocean root@10.66.66.1
-The authenticity of host '10.66.66.1 (10.66.66.1)' can't be established.
-ED25519 key fingerprint is SHA256:E7BKSO3qP+iVVXfb/tLaUfKIc4RvtZ0k248epdE04m8.
-This host key is known by the following other names/addresses:
-    ~/.ssh/known_hosts:130: [hashed name]
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '10.66.66.1' (ED25519) to the list of known hosts.
-Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
-
- * Documentation:  https://help.ubuntu.com/
- * Management:     https://landscape.canonical.com/
- * Support:        https://ubuntu.com/pro
-
- System information as of Wed Sep 25 13:32:12 UTC 2024
-
-  System load:  0.02              Processes:             109
-  Usage of /:   2.1% of 77.35GB   Users logged in:       0
-  Memory usage: 6%                IPv4 address for eth0: 157.230.177.54
-  Swap usage:   0%                IPv4 address for eth0: 10.10.0.5
-
-Expanded Security Maintenance for Applications is not enabled.
-
-73 updates can be applied immediately.
-40 of these updates are standard security updates.
-To see these additional updates run: apt list --upgradable
-
-Enable ESM Apps to receive additional future security updates.
-See https://ubuntu.com/esm or run: sudo pro status
-
-New release '24.04.1 LTS' available.
-Run 'do-release-upgrade' to upgrade to it.
-
-
-root@wireguard:~# 
-
- - - -

Looks like everything is working! If you run the script from the repo you will have a fully functioning Wireguard VPN in less than 5 minutes! Pretty cool stuff! This article was not meant to be exhaustive but instead a simple primer to get your feet wet. The setup script I used is heavily inspired by angristan/wireguard-install. Another great resource is the Unofficial docs repo.

-]]>
- - - -
- - Hardening your web server by only allowing traffic from Cloudflare - /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ - - - Thu, 01 Aug 2024 21:02:29 +0000 - - - - - - /?p=607 - - - TDLR: - - - -

If you just want the code you can find a convenient script on my Gitea server here. This version has been slightly modified so that it will work on more systems.

- - - -

- - - -

I have been using Cloudflare for several years for both personal and professional projects. The free plan has some various gracious limits and it’s a great way to clear out some low hanging fruit and improve the security of your application. If you’re not familiar with how it works, basically Cloudflare has two modes for DNS records. DNS Only and Proxied. The only way to get the advantages of Cloudflare is to use Proxied mode. Cloudflare has some great documentation on how all of their services work but basically what happens is that you are pointing your domain to Cloudflare and Cloudflare provisions their network of Proxy servers to handle requests for your domain.

- - - -

These proxy servers allow you to secure your domain by implementing things like WAF and Rate limiting. You can also enforce HTTPS only mode and modify/add custom request/response headers. You will notice that once you turn this mode on, your webserver will log requests as coming from Cloudflare IP addresses. They have great documentation on how to configure your webserver to restore these IP addresses in your log files.

- - - -

This is a very easy step to start securing your origin server but it still allows attackers to access your servers directly if they know the IP address. We can take our security one step forward by only allowing requests from IP addresses originating within Cloudflare meaning that we will only allow requests if they are coming from a Cloudflare proxy server. The setup is fairly straightforward. In this example I will be using a Linux server.

- - - -

We can achieve this pretty easily because Cloudflare provides a sort of API where they regular publish their network blocks. Here is the basic script we will use:

- - - -
for ip in $(curl https://www.cloudflare.com/ips-v4/); do iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-for ip in $(curl https://www.cloudflare.com/ips-v6/); do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT; done
-
-iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
-
- - - -

This will pull down the latest network addresses from Cloudflare and create iptables rules for us. These IP addresses do change from time to time so you may want to put this in a script and run it via a cronjob to have it update on a regular basis.

- - - -

Now with this in place, here is the results:

- - - -
- - - -

This should cut down on some of the noise from attackers and script kiddies trying to find holes in your security.

-]]>
- - - -
- - Debugging running Nginx config - /debugging-running-nginx-config/ - - - Wed, 17 Jul 2024 01:42:43 +0000 - - - - - /?p=596 - - - I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running:

- - - -
nginx -t
- - - -

to test my configuration and ensure I don’t have any syntax errors. I was looking for an easy way to view the actual compiled config and found the -T flag which will test the configuration and dump it to standard out. This is pretty handy if you have a large number of includes in various locations. Here is an example from a fresh Nginx Docker container:

- - - -
root@2771f302dc98:/# nginx -T
-nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
-nginx: configuration file /etc/nginx/nginx.conf test is successful
-# configuration file /etc/nginx/nginx.conf:
-
-user  nginx;
-worker_processes  auto;
-
-error_log  /var/log/nginx/error.log notice;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-}
-
-# configuration file /etc/nginx/mime.types:
-
-types {
-    text/html                                        html htm shtml;
-    text/css                                         css;
-    text/xml                                         xml;
-    image/gif                                        gif;
-    image/jpeg                                       jpeg jpg;
-    application/javascript                           js;
-    application/atom+xml                             atom;
-    application/rss+xml                              rss;
-
-    text/mathml                                      mml;
-    text/plain                                       txt;
-    text/vnd.sun.j2me.app-descriptor                 jad;
-    text/vnd.wap.wml                                 wml;
-    text/x-component                                 htc;
-
-    image/avif                                       avif;
-    image/png                                        png;
-    image/svg+xml                                    svg svgz;
-    image/tiff                                       tif tiff;
-    image/vnd.wap.wbmp                               wbmp;
-    image/webp                                       webp;
-    image/x-icon                                     ico;
-    image/x-jng                                      jng;
-    image/x-ms-bmp                                   bmp;
-
-    font/woff                                        woff;
-    font/woff2                                       woff2;
-
-    application/java-archive                         jar war ear;
-    application/json                                 json;
-    application/mac-binhex40                         hqx;
-    application/msword                               doc;
-    application/pdf                                  pdf;
-    application/postscript                           ps eps ai;
-    application/rtf                                  rtf;
-    application/vnd.apple.mpegurl                    m3u8;
-    application/vnd.google-earth.kml+xml             kml;
-    application/vnd.google-earth.kmz                 kmz;
-    application/vnd.ms-excel                         xls;
-    application/vnd.ms-fontobject                    eot;
-    application/vnd.ms-powerpoint                    ppt;
-    application/vnd.oasis.opendocument.graphics      odg;
-    application/vnd.oasis.opendocument.presentation  odp;
-    application/vnd.oasis.opendocument.spreadsheet   ods;
-    application/vnd.oasis.opendocument.text          odt;
-    application/vnd.openxmlformats-officedocument.presentationml.presentation
-                                                     pptx;
-    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-                                                     xlsx;
-    application/vnd.openxmlformats-officedocument.wordprocessingml.document
-                                                     docx;
-    application/vnd.wap.wmlc                         wmlc;
-    application/wasm                                 wasm;
-    application/x-7z-compressed                      7z;
-    application/x-cocoa                              cco;
-    application/x-java-archive-diff                  jardiff;
-    application/x-java-jnlp-file                     jnlp;
-    application/x-makeself                           run;
-    application/x-perl                               pl pm;
-    application/x-pilot                              prc pdb;
-    application/x-rar-compressed                     rar;
-    application/x-redhat-package-manager             rpm;
-    application/x-sea                                sea;
-    application/x-shockwave-flash                    swf;
-    application/x-stuffit                            sit;
-    application/x-tcl                                tcl tk;
-    application/x-x509-ca-cert                       der pem crt;
-    application/x-xpinstall                          xpi;
-    application/xhtml+xml                            xhtml;
-    application/xspf+xml                             xspf;
-    application/zip                                  zip;
-
-    application/octet-stream                         bin exe dll;
-    application/octet-stream                         deb;
-    application/octet-stream                         dmg;
-    application/octet-stream                         iso img;
-    application/octet-stream                         msi msp msm;
-
-    audio/midi                                       mid midi kar;
-    audio/mpeg                                       mp3;
-    audio/ogg                                        ogg;
-    audio/x-m4a                                      m4a;
-    audio/x-realaudio                                ra;
-
-    video/3gpp                                       3gpp 3gp;
-    video/mp2t                                       ts;
-    video/mp4                                        mp4;
-    video/mpeg                                       mpeg mpg;
-    video/quicktime                                  mov;
-    video/webm                                       webm;
-    video/x-flv                                      flv;
-    video/x-m4v                                      m4v;
-    video/x-mng                                      mng;
-    video/x-ms-asf                                   asx asf;
-    video/x-ms-wmv                                   wmv;
-    video/x-msvideo                                  avi;
-}
-
-# configuration file /etc/nginx/conf.d/default.conf:
-server {
-    listen       80;
-    server_name  localhost;
-
-    #access_log  /var/log/nginx/host.access.log  main;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-    }
-
-    #error_page  404              /404.html;
-
-    # redirect server error pages to the static page /50x.html
-    #
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-
-    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-    #
-    #location ~ \.php$ {
-    #    proxy_pass   http://127.0.0.1;/
-    #}
-
-    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-    #
-    #location ~ \.php$ {
-    #    root           html;
-    #    fastcgi_pass   127.0.0.1:9000;
-    #    fastcgi_index  index.php;
-    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-    #    include        fastcgi_params;
-    #}
-
-    # deny access to .htaccess files, if Apache's document root
-    # concurs with nginx's one
-    #
-    #location ~ /\.ht {
-    #    deny  all;
-    #}
-}
-
- - - -

As you can see from the output above, we get all of the various Nginx config files in use printed to the console, perfect for grepping or searching/filtering with other tools.

-]]>
- - - -
- - Fun with bots – SSH tarpitting - /fun-with-bots-ssh-tarpitting/ - - - Mon, 24 Jun 2024 13:37:43 +0000 - - - - - - - /?p=576 - - - For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this:

- - - -
-

tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad scanning are less effective, and therefore less attractive, if they take too long. The concept is analogous with a tar pit, in which animals can get bogged down and slowly sink under the surface, like in a swamp.

-https://en.wikipedia.org/wiki/Tarpit_(networking)
- - - -

If you run any sort of service on the internet then you know as soon as your server has a public IP address and open ports, there are scanners and bots trying to get in constantly. If you take decent steps towards security then it is little more than an annoyance, but annoying all the less. One day when I had some extra time on my hands I started researching ways to mess with the bots trying to scan/attack my site.

- - - -

It turns out that this problem has been solved multiple times in multiple ways. One of the most popular tools for tarpitting ssh connections is endlessh. The way it works is actually pretty simple. The SSH RFC states that when an SSH connection is established, both sides MUST send an identification string. Further down the spec is the line that allows this behavior:

- - - -
-
   The server MAY send other lines of data before sending the version
-   string.  Each line SHOULD be terminated by a Carriage Return and Line
-   Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-   in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-   MUST be able to process such lines.  Such lines MAY be silently
-   ignored, or MAY be displayed to the client user.  If they are
-   displayed, control character filtering, as discussed in [SSH-ARCH],
-   SHOULD be used.  The primary use of this feature is to allow TCP-
-   wrappers to display an error message before disconnecting.
-SSH RFC
- - - -

Essentially this means that their is no limit to the amount of data that a server can send back to the client and the client must be able to wait and process all of this data. Now let’s see it in action.

- - - -
git clone https://github.com/skeeto/endlessh.git
-cd endlessh
-make
-./endlessh &
- - - -

By default this fake server listens on port 2222. I have a port forward set up that forwards all ssh traffic from port 22 to 2222. Now try to connect via ssh:

- - - -
ssh -vvv localhost -p 2222
- - - -

If you wait a few seconds you will see the server send back the version string and then start sending a random banner:

- - - -
$:/tmp/endlessh$ 2024-06-24T13:05:59.488Z Port 2222
-2024-06-24T13:05:59.488Z Delay 10000
-2024-06-24T13:05:59.488Z MaxLineLength 32
-2024-06-24T13:05:59.488Z MaxClients 4096
-2024-06-24T13:05:59.488Z BindFamily IPv4 Mapped IPv6
-2024-06-24T13:05:59.488Z socket() = 3
-2024-06-24T13:05:59.488Z setsockopt(3, SO_REUSEADDR, true) = 0
-2024-06-24T13:05:59.488Z setsockopt(3, IPV6_V6ONLY, true) = 0
-2024-06-24T13:05:59.488Z bind(3, port=2222) = 0
-2024-06-24T13:05:59.488Z listen(3) = 0
-2024-06-24T13:05:59.488Z poll(1, -1)
-ssh -vvv localhost -p 2222
-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7, OpenSSL 3.0.2 15 Mar 2022
-debug1: Reading configuration data /home/mikeconrad/.ssh/config
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
-debug1: /etc/ssh/ssh_config line 21: Applying options for *
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/mikeconrad/.ssh/known_hosts'
-debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/mikeconrad/.ssh/known_hosts2'
-debug2: resolving "localhost" port 2222
-debug3: resolve_host: lookup localhost:2222
-debug3: ssh_connect_direct: entering
-debug1: Connecting to localhost [::1] port 2222.
-debug3: set_sock_tos: set socket 3 IPV6_TCLASS 0x10
-debug1: Connection established.
-2024-06-24T13:06:08.635Z = 1
-2024-06-24T13:06:08.635Z accept() = 4
-2024-06-24T13:06:08.635Z setsockopt(4, SO_RCVBUF, 1) = 0
-2024-06-24T13:06:08.635Z ACCEPT host=::1 port=43696 fd=4 n=1/4096
-2024-06-24T13:06:08.635Z poll(1, 10000)
-debug1: identity file /home/mikeconrad/.ssh/id_rsa type 0
-debug1: identity file /home/mikeconrad/.ssh/id_rsa-cert type 4
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ecdsa_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519 type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk type -1
-debug1: identity file /home/mikeconrad/.ssh/id_ed25519_sk-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss type -1
-debug1: identity file /home/mikeconrad/.ssh/id_xmss-cert type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa type -1
-debug1: identity file /home/mikeconrad/.ssh/id_dsa-cert type -1
-debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
-2024-06-24T13:06:18.684Z = 0
-2024-06-24T13:06:18.684Z write(4) = 3
-2024-06-24T13:06:18.684Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 0: V
-2024-06-24T13:06:28.734Z = 0
-2024-06-24T13:06:28.734Z write(4) = 25
-2024-06-24T13:06:28.734Z poll(1, 10000)
-debug1: kex_exchange_identification: banner line 1: 2I=ED}PZ,z T_Y|Yc]$b{R]
-
-
- - - -

This is a great way to give back to those bots and script kiddies. In my research into other methods I also stumbled across this brilliant program fakessh. While fakessh isn’t technically a tarpit, it’s more of a honeypot but very interesting nonetheless. It creates a fake SSH server and logs the ip address, connection string and any commands executed by the attacker. Essentially it allows any username/password combination to connect and gives them a fake shell prompt. There is no actual access to any file system and all of their commands basically return gibberish.

- - - -

Here are some logs from an actual server of mine running fakessh

- - - -
2024/06/24 06:51:20 [conn] ip=183.81.169.238:40430
-2024/06/24 06:51:22 [auth] ip=183.81.169.238:40430 version="SSH-2.0-Go" user="root" password="0"
-2024/06/24 06:51:23 [conn] ip=183.81.169.238:40444
-2024/06/24 06:51:25 [auth] ip=183.81.169.238:40444 version="SSH-2.0-Go" user="root" password="eve"
-2024/06/24 06:51:26 [conn] ip=183.81.169.238:48408
-2024/06/24 06:51:27 [auth] ip=183.81.169.238:48408 version="SSH-2.0-Go" user="root" password="root"
-2024/06/24 06:51:28 [conn] ip=183.81.169.238:48434
-2024/06/24 06:51:30 [auth] ip=183.81.169.238:48434 version="SSH-2.0-Go" user="root" password="1"
-2024/06/24 06:51:30 [conn] ip=183.81.169.238:48448
-2024/06/24 06:51:32 [auth] ip=183.81.169.238:48448 version="SSH-2.0-Go" user="root" password="123"
-2024/06/24 06:51:32 [conn] ip=183.81.169.238:48476
-2024/06/24 06:51:35 [auth] ip=183.81.169.238:48476 version="SSH-2.0-Go" user="root" password="admin"
-2024/06/24 06:51:35 [conn] ip=183.81.169.238:39250
-2024/06/24 06:51:37 [auth] ip=183.81.169.238:39250 version="SSH-2.0-Go" user="root" password="123456"
-2024/06/24 06:51:38 [conn] ip=183.81.169.238:39276
-2024/06/24 06:51:40 [auth] ip=183.81.169.238:39276 version="SSH-2.0-Go" user="root" password="123123"
-2024/06/24 06:51:40 [conn] ip=183.81.169.238:39294
-2024/06/24 06:51:42 [auth] ip=183.81.169.238:39294 version="SSH-2.0-Go" user="root" password="test"
-2024/06/24 06:51:43 [conn] ip=183.81.169.238:39316
-2024/06/24 06:51:45 [auth] ip=183.81.169.238:39316 version="SSH-2.0-Go" user="root" password="123456789"
-2024/06/24 06:51:45 [conn] ip=183.81.169.238:35108
-2024/06/24 06:51:47 [auth] ip=183.81.169.238:35108 version="SSH-2.0-Go" user="root" password="12345"
-2024/06/24 06:51:48 [conn] ip=183.81.169.238:35114
-2024/06/24 06:51:50 [auth] ip=183.81.169.238:35114 version="SSH-2.0-Go" user="root" password="password"
-2024/06/24 06:51:50 [conn] ip=183.81.169.238:35130
-2024/06/24 06:51:52 [auth] ip=183.81.169.238:35130 version="SSH-2.0-Go" user="root" password="12345678"
-2024/06/24 06:51:52 [conn] ip=183.81.169.238:35146
-2024/06/24 06:51:54 [auth] ip=183.81.169.238:35146 version="SSH-2.0-Go" user="root" password="111111"
-2024/06/24 06:51:55 [conn] ip=183.81.169.238:58490
-2024/06/24 06:51:57 [auth] ip=183.81.169.238:58490 version="SSH-2.0-Go" user="root" password="1234567890"
-2024/06/24 06:51:57 [conn] ip=183.81.169.238:58528
-2024/06/24 06:51:59 [auth] ip=183.81.169.238:58528 version="SSH-2.0-Go" user="root" password="1234"
-2024/06/24 06:52:00 [conn] ip=183.81.169.238:58572
-2024/06/24 06:52:02 [auth] ip=183.81.169.238:58572 version="SSH-2.0-Go" user="root" password="password123"
-2024/06/24 06:52:02 [conn] ip=183.81.169.238:58588
-2024/06/24 06:52:04 [auth] ip=183.81.169.238:58588 version="SSH-2.0-Go" user="root" password="ubuntu"
-2024/06/24 06:52:05 [conn] ip=183.81.169.238:37198
-2024/06/24 06:52:07 [auth] ip=183.81.169.238:37198 version="SSH-2.0-Go" user="Antminer" password="root"
-2024/06/24 06:52:07 [conn] ip=183.81.169.238:37214
-2024/06/24 06:52:09 [auth] ip=183.81.169.238:37214 version="SSH-2.0-Go" user="Antminer" password="admin"
-2024/06/24 06:52:10 [conn] ip=183.81.169.238:37238
-2024/06/24 06:52:11 [auth] ip=183.81.169.238:37238 version="SSH-2.0-Go" user="root" password="innot1t2"
-2024/06/24 06:52:12 [conn] ip=183.81.169.238:37258
-2024/06/24 06:52:14 [auth] ip=183.81.169.238:37258 version="SSH-2.0-Go" user="root" password="t1t2t3a5"
-2024/06/24 06:52:14 [conn] ip=183.81.169.238:55658
-2024/06/24 06:52:16 [auth] ip=183.81.169.238:55658 version="SSH-2.0-Go" user="root" password="blacksheepwall"
-2024/06/24 06:52:17 [conn] ip=183.81.169.238:55670
-2024/06/24 06:52:19 [auth] ip=183.81.169.238:55670 version="SSH-2.0-Go" user="root" password="envision"
-2024/06/24 06:52:19 [conn] ip=183.81.169.238:55708
-2024/06/24 06:52:21 [auth] ip=183.81.169.238:55708 version="SSH-2.0-Go" user="root" password="bwcon"
-2024/06/24 06:52:22 [conn] ip=183.81.169.238:55776
-2024/06/24 06:52:23 [auth] ip=183.81.169.238:55776 version="SSH-2.0-Go" user="admin" password="root"
-2024/06/24 06:52:24 [conn] ip=183.81.169.238:46646
-2024/06/24 06:52:26 [auth] ip=183.81.169.238:46646 version="SSH-2.0-Go" user="baikal" password="baikal"
-2024/06/24 06:52:26 [conn] ip=180.101.88.197:44620
-2024/06/24 06:52:27 [conn] ip=180.101.88.197:44620 err="ssh: disconnect, reason 11: "
-2024/06/24 06:53:35 [conn] ip=218.92.0.76:50610
-2024/06/24 06:53:36 [conn] ip=218.92.0.76:50610 err="ssh: disconnect, reason 11: "
-2024/06/24 07:02:28 [conn] ip=218.92.0.27:64676
-2024/06/24 07:02:30 [conn] ip=218.92.0.27:64676 err="ssh: disconnect, reason 11: "
-2024/06/24 07:10:05 [conn] ip=218.92.0.76:57601
-2024/06/24 07:10:07 [conn] ip=218.92.0.76:57601 err="ssh: disconnect, reason 11: "
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056
-2024/06/24 07:14:05 [auth] ip=193.201.9.156:63056 version="SSH-2.0-Go" user="ubnt" password="ubnt"
-2024/06/24 07:14:05 [conn] ip=193.201.9.156:63056 err="read tcp 10.10.10.107:2222->193.201.9.156:63056: read: connection reset by peer"
-2024/06/24 07:24:53 [conn] ip=218.92.0.31:25485
-2024/06/24 07:24:54 [conn] ip=218.92.0.31:25485 err="ssh: disconnect, reason 11: "
-2024/06/24 07:24:54 [conn] ip=218.92.0.112:39270
-2024/06/24 07:24:56 [conn] ip=218.92.0.112:39270 err="ssh: disconnect, reason 11: "
-2024/06/24 07:26:42 [conn] ip=218.92.0.34:59993
-2024/06/24 07:35:46 [conn] ip=218.92.0.34:59993 err="read tcp 10.10.10.107:2222->218.92.0.34:59993: read: connection reset by peer"
-2024/06/24 07:41:28 [conn] ip=218.92.0.107:62285
-2024/06/24 07:41:31 [conn] ip=218.92.0.107:62285 err="ssh: disconnect, reason 11: "
-2024/06/24 07:43:27 [conn] ip=218.92.0.29:34556
-2024/06/24 07:43:28 [conn] ip=218.92.0.29:34556 err="ssh: disconnect, reason 11: "
-2024/06/24 07:44:15 [conn] ip=218.92.0.118:37047
-2024/06/24 07:44:22 [conn] ip=218.92.0.118:37047 err="ssh: disconnect, reason 11: "
-2024/06/24 07:56:10 [conn] ip=157.245.98.245:6116
-2024/06/24 07:56:11 [conn] ip=157.245.98.245:6116 err="ssh: unexpected message type 20 (expected 21)"
-2024/06/24 07:57:57 [conn] ip=218.92.0.112:28326
-2024/06/24 07:57:58 [conn] ip=218.92.0.112:28326 err="ssh: disconnect, reason 11: "
-2024/06/24 08:00:01 [conn] ip=218.92.0.24:24948
-2024/06/24 08:00:02 [conn] ip=218.92.0.24:24948 err="ssh: disconnect, reason 11: "
-2024/06/24 08:06:19 [conn] ip=193.201.9.156:46865
-2024/06/24 08:06:20 [auth] ip=193.201.9.156:46865 version="SSH-2.0-Go" user="root" password="xc3511"
-2024/06/24 08:06:20 [conn] ip=193.201.9.156:46865 err="read tcp 10.10.10.107:2222->193.201.9.156:46865: read: connection reset by peer"
-2024/06/24 08:14:26 [conn] ip=180.101.88.197:48347
-2024/06/24 08:14:28 [conn] ip=180.101.88.197:48347 err="ssh: disconnect, reason 11: "
-2024/06/24 08:16:28 [conn] ip=218.92.0.56:18064
-2024/06/24 08:16:32 [conn] ip=218.92.0.56:18064 err="ssh: disconnect, reason 11: "
-2024/06/24 08:30:55 [conn] ip=180.101.88.196:40495
-2024/06/24 08:30:57 [conn] ip=180.101.88.196:40495 err="ssh: disconnect, reason 11: "
-2024/06/24 08:32:20 [conn] ip=85.209.11.227:15493
-2024/06/24 08:32:21 [auth] ip=85.209.11.227:15493 version="SSH-2.0-Go" user="telecomadmin" password="admintelecom"
-2024/06/24 08:32:21 [conn] ip=85.209.11.227:15493 err="read tcp 10.10.10.107:2222->85.209.11.227:15493: read: connection reset by peer"
-2024/06/24 08:33:19 [conn] ip=218.92.0.34:59804
-2024/06/24 08:33:21 [conn] ip=218.92.0.34:59804 err="ssh: disconnect, reason 11: "
-2024/06/24 08:41:00 [conn] ip=218.92.0.27:45567
-2024/06/24 08:41:02 [conn] ip=218.92.0.27:45567 err="ssh: disconnect, reason 11: "
-2024/06/24 08:47:15 [conn] ip=180.101.88.196:17032
-2024/06/24 08:47:16 [conn] ip=180.101.88.196:17032 err="ssh: disconnect, reason 11: "
-2024/06/24 08:49:51 [conn] ip=218.92.0.29:26360
-2024/06/24 08:49:57 [conn] ip=218.92.0.29:26360 err="ssh: disconnect, reason 11: "
-2024/06/24 08:58:27 [conn] ip=193.201.9.156:49525
-2024/06/24 08:58:28 [auth] ip=193.201.9.156:49525 version="SSH-2.0-Go" user="admin" password="1234"
-2024/06/24 08:58:28 [conn] ip=193.201.9.156:49525 err="read tcp 10.10.10.107:2222->193.201.9.156:49525: read: connection reset by peer"
-2024/06/24 08:58:44 [conn] ip=218.92.0.31:11835
-2024/06/24 08:58:46 [conn] ip=218.92.0.31:11835 err="ssh: disconnect, reason 11: "
-2024/06/24 09:03:38 [conn] ip=218.92.0.107:57758
-2024/06/24 09:03:40 [conn] ip=218.92.0.107:57758 err="ssh: disconnect, reason 11: "
-2024/06/24 09:07:36 [conn] ip=218.92.0.56:21354
-2024/06/24 09:07:39 [conn] ip=218.92.0.56:21354 err="ssh: disconnect, reason 11: "
-
- - - -

Those are mostly connections and disconnections. They probably connected, realized it was fake and disconnected. There are a couple that tried to execute some commands though:

- - - -
:~$ sudo grep head /var/log/fakessh/fakessh.log 
-2024/06/23 15:48:02 [shell] ip=184.160.233.163:45735 duration=0s bytes=15 head="ls 2>/dev/null\n"
-2024/06/24 03:55:11 [shell] ip=14.46.116.243:43656 duration=20s bytes=0 head=""
-
- - - -

Fun fact: Cloudflare’s Bot Fight Mode uses a form of tarpitting:

- - - -
-

Once enabled, when we detect a bad bot, we will do three things: (1) we’re going to disincentivize the bot maker economically by tarpitting them, including requiring them to solve a computationally intensive challenge that will require more of their bot’s CPU; (2) for Bandwidth Alliance partners, we’re going to hand the IP of the bot to the partner and get the bot kicked offline; and (3) we’re going to plant trees to make up for the bot’s carbon cost.

-https://blog.cloudflare.com/cleaning-up-bad-bots
-]]>
- - - -
- - Traefik 3.0 service discovery in Docker Swarm mode - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - - - Sat, 11 May 2024 13:44:01 +0000 - - - - - - - /?p=564 - - - I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-]]>
- - - -
- - Stop all running containers with Docker - /stop-all-running-containers-with-docker/ - - - Wed, 03 Apr 2024 13:12:41 +0000 - - - - - /?p=557 - - - These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this:

- - - -
docker container stop $(docker container ps -q)
- - - -

Let me break this down in case you are not familiar with the syntax. Basically we are passing the output of docker container ps -q into docker container stop. This works because the stop command can take a list of container ids which is what we get when passing the -q flag to docker container ps.

-]]>
- - - -
- - Automating CI/CD with TeamCity and Ansible - /automating-ci-cd-with-teamcity-ansible/ - - - Mon, 11 Mar 2024 13:37:47 +0000 - - - - - - https://wordpress.hackanooga.com/?p=393 - - - In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are:

- - - -
    -
  • Ability to declare global variables and have them be passed down to all projects
  • - - - -
  • Ability to declare variables that are made up of other variables
  • -
- - - -

I like to use private or self hosted Docker registries for a lot of my projects and one of the pain points I have had with some other solutions (well mostly Bitbucket) is that they don’t integrate well with these private registries and when I run into a situation where I am pushing an image to or pulling an image from a private registry it get’s a little messy. TeamCity is nice in that I can add a connection to my private registry in my root project and them simply add that as a build feature to any projects that may need it. Essentially, now I only have one place where I have to keep those credentials and manage that connection.

- - - -

- - - -

Another reason I love it is the fact that you can create really powerful build templates that you can reuse. This became very powerful when we were trying to standardize our build processes. For example, most of the apps we build are .NET backends and React frontends. We built docker images for every project and pushed them to our private registry. TeamCity gave us the ability to standardize the naming convention and really streamline the build process. Enough about that though, the rest of this series will assume that you are using TeamCity. This post will focus on getting up and running using Ansible.

- - - -
- - - -

Installation and Setup

- - - -

For this I will assume that you already have Ansible on your machine and that you will be installing TeamCity locally. You can simply follow along with the installation guide here. We will be creating an Ansible playbook based on the following steps. If you just want the finished code, you can find it on my Gitea instance here:

- - - -

Step 1 : Create project and initial playbook

- - - -

To get started go ahead and create a new directory to hold our configuration:

- - - -
mkdir ~/projects/teamcity-configuration-ansible 
-touch install-teamcity-server.yml
- - - -

Now open up install-teamcity-server.yml and add a task to install Java 17 as it is a prerequisite. You will need sudo for this task. ***As of this writing TeamCity does not support Java 18 or 19. If you try to install one of these you will get an error when trying to start TeamCity.

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_user: sudo
-
- # Add some variables to make our lives easier
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-  
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jre-headless
-      update_cache: yes
-      state: latest
-      install_recommends: no
- - - -

- - - -

The next step is to create a dedicated user account. Add the following task to install-teamcity-server.yml

- - - -
  - name: Add Teamcity User
-    ansible.builtin.user:
-      name: teamcity
- - - -

Next we will need to download the latest version of TeamCity. 2023.11.4 is the latest as of this writing. Add the following task to your install-teamcity-server.yml

- - - -
  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
- - - -

Now to install TeamCity Server add the following:

- - - -
  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
- - - -

Now that we have everything set up and installed we want to make sure that our new teamcity user has access to everything they need to get up and running. We will add the following lines:

- - - -
  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
- - - -

This gives us a pretty nice setup. We have TeamCity server installed with a dedicated user account. The last thing we will do is create a systemd service so that we can easily start/stop the server. For this we will need to add a few things.

- - - -
    -
  1. A service file that tells our system how to manage TeamCity
  2. - - - -
  3. A j2 template file that is used to create this service file
  4. - - - -
  5. A handler that tells the system to run systemctl daemon-reload once the service has been installed.
  6. -
- - - -

Go ahead and create a new templates folder with the following teamcity.service.j2 file

- - - -
[Unit]
-Description=JetBrains TeamCity
-Requires=network.target
-After=syslog.target network.target
-[Service]
-Type=forking
-ExecStart={{teamcity.installation_path}}/bin/runAll.sh start
-ExecStop={{teamcity.installation_path}}/bin/runAll.sh stop
-User=teamcity
-PIDFile={{teamcity.installation_path}}/teamcity.pid
-Environment="TEAMCITY_PID_FILE_PATH={{teamcity.installation_path}}/teamcity.pid"
-[Install]
-WantedBy=multi-user.target
- - - -

Your project should now look like the following:

- - - -
$: ~/projects/teamcity-ansible-terraform
- .
-├── install-teamcity-server.yml
-└── templates
-    └── teamcity.service.j2
-
-1 directory, 2 files
- - - -

That’s it! Now you should have a fully automated installed of TeamCity Server ready to be deployed wherever you need it. Here is the final playbook file, also you can find the most up to date version in my repo:

- - - -
---
-- name: Install Teamcity
-  hosts: localhost
-  become: true
-  become_method: sudo
-
-  vars:
-    java_version: "17"
-    teamcity:
-      installation_path: /opt/TeamCity
-      version: "2023.11.4"
-
-  tasks:
-  - name: Install Java
-    ansible.builtin.apt:
-      name: openjdk-{{ java_version }}-jdk # This is important because TeamCity will fail to start if we try to use 18 or 19
-      update_cache: yes
-      state: latest
-      install_recommends: no
-
-  - name: Add TeamCity User
-    ansible.builtin.user:
-      name: teamcity
-
-  - name: Download TeamCity Server
-    ansible.builtin.get_url:
-      url: https://download.jetbrains.com/teamcity/TeamCity-{{teamcity.version}}.tar.gz
-      dest: /opt/TeamCity-{{teamcity.version}}.tar.gz
-      mode: '0770'
-
-  - name: Install TeamCity Server
-    ansible.builtin.shell: |
-      tar xfz /opt/TeamCity-{{teamcity.version}}.tar.gz
-      rm -rf /opt/TeamCity-{{teamcity.version}}.tar.gz
-    args:
-      chdir: /opt
-
-  - name: Update permissions
-    ansible.builtin.shell: chown -R teamcity:teamcity /opt/TeamCity
-
-  - name: TeamCity | Create environment file
-    template: src=teamcity.service.j2 dest=/etc/systemd/system/teamcityserver.service
-    notify:
-      - reload systemctl
-  - name: TeamCity | Start teamcity
-    service: name=teamcityserver.service state=started enabled=yes
-
-  # Trigger a reload of systemctl after the service file has been created.
-  handlers:
-    - name: reload systemctl
-      command: systemctl daemon-reload
-]]>
- - - -
- - Self hosted package registries with Gitea - /self-hosted-package-registries-with-gitea/ - - - Thu, 07 Mar 2024 15:07:07 +0000 - - - - - - https://wordpress.hackanooga.com/?p=413 - - - I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: Package Registry. You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis:

- - - -
    -
  • npm
  • - - - -
  • cargo
  • - - - -
  • docker
  • - - - -
  • composer
  • - - - -
  • nuget
  • - - - -
  • helm
  • -
- - - -

There are a number of reasons why you would want to self host a registry. For example, in my home lab I have some Docker images that are specific to my use cases and I don’t necessarily want them on a public registry. I’m also not concerned about losing the artifacts as I can easily recreate them from code. Gitea makes this really easy to setup, in fact it comes baked in with the installation. For the sake of this post I will just assume that you already have Gitea installed and setup.

- - - -

Since the package registry is baked in and enabled by default, I will demonstrate how easy it is to push a docker image. We will pull the default alpine image, re-tag it and push it to our internal registry:

- - - -
# Pull the official Alpine image
-docker pull alpine:latest
-
-# Re tag the image with our local registry information
-docker tag alpine:latest git.hackanooga.com/mikeconrad/alpine:latest
-
-# Login using your gitea user account
-docker login git.hackanooga.com
-
-# Push the image to our registry
-docker push git.hackanooga.com/mikeconrad/alpine:latest
-
-
- - - -

Now log into your Gitea instance, navigate to your user account and look for packages. You should see the newly uploaded alpine image.

- - - -
- - - -

You can see that the package type is container. Clicking on it will give you more information:

- - - -
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 2) - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - - - Thu, 15 Feb 2024 20:19:12 +0000 - - - - - - https://wordpress.hackanooga.com/?p=425 - - - In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-]]>
- - - -
- - Traefik with Let’s Encrypt and Cloudflare (pt 1) - /traefik-with-lets-encrypt-and-cloudflare-pt-1/ - - - Thu, 01 Feb 2024 19:35:00 +0000 - - - - - - https://wordpress.hackanooga.com/?p=422 - - - Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a docker-compose.yaml

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=user@example.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      # Redirect all http requests to https
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-    # Needed to request certs via lets encrypt
-    environment:
-      - CF_DNS_API_TOKEN=[redacted]
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      # Used for storing letsencrypt certificates
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      REDIS_URL: redis://redis:6379/0
-      SECRET_EXPIRY: "604800"
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
-
- - - -

In part one of this series I will be going over some of the basics of Traefik and how dynamic routing works. If you want to skip to the good stuff and get everything configured with Cloudflare, you can skip to part 2.

- - - -

This example set’s up the primary Traefik container which acts as the ingress controller as well as a handy One Time Secret sharing service I use. Traefik handles routing in Docker via labels. For this to work properly the services that Traefik is trying to route to all need to be on the same Docker network. For this example we created a network called traefik by running the following:

- - - -
docker network create traefik
-
- - - -

Let’s take a look at the labels we applied to the ots container a little closer:

- - - -
    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
- - - -

traefik.enable=true – This should be pretty self explanatory but it tells Traefik that we want it to know about this service.

- - - -

traefik.http.routers.ots.rule=Host('ots.example.com') - This is where some of the magic comes in. Here we are defining a router called ots. The name is arbitrary in that it doesn’t have to match the name of the service but for our example it does. There are many rules that you can specify but the easiest for this example is host. Basically we are saying that any request coming in for ots.example.com should be picked up by this router. You can find more options for routers in the Traefik docs.

- - - -

– traefik.http.routers.ots.entrypoints=websecure
– traefik.http.routers.ots.tls=true
– traefik.http.routers.ots.tls.certresolver=letsencrypt

We are using these three labels to tell our router that we want it to use the websecure entrypoint, and that it should use the letsencrypt certresolver to grab it’s certificates. websecure is an arbitrary name that we assigned to our :443 interface. There are multiple ways to configure this, I choose to use the cli format in my traefik config:

- - - -

“`

- - - -
    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      # Our entrypoint names are arbitrary but these are convention.
-      # The important part is the port binding that we associate.
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-
-
- - - -

These last label is optional depending on your setup but it is important to understand as the documentation is a little fuzzy.

- - - -

– traefik.http.services.ots.loadbalancer.server.port=3000

Here’s how it works. Suppose you have a container that exposes multiple ports. Maybe one of those is a web ui and another is something that you don’t want exposed. By default Traefik will try and guess which port to route requests to. My understanding is that it will try and use the first exposed port. However you can override this functionality by using the label above which will tell Traefik specifically which port you want to route to inside the container.

The service name is derived automatically from the definition in the docker compose file:

- - - -

ots: # This will become the service name
image: luzifer/ots
container_name: ots
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/index.html deleted file mode 100644 index 680605b..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/index.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - -Blog Post – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: Blog Post -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/page/2/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/page/2/index.html deleted file mode 100644 index e3d9fe8..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/blog-post/page/2/index.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - -Blog Post – Page 2 – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: Blog Post -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/feed/index.xml deleted file mode 100644 index b71980a..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/feed/index.xml +++ /dev/null @@ -1,544 +0,0 @@ - - - - GraphQL – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 12:54:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - GraphQL – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 2 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - - - Thu, 11 Jan 2024 01:41:00 +0000 - - - - - - - - /?p=539 - - - In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-vite@5.2.2" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: 'enxoco@github.com',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: 'mikeconrad@example.com',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - - - Thu, 04 Jan 2024 00:59:49 +0000 - - - - - - - - /?p=533 - - - In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-keystone-app@9.0.1" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐ Server listening on :3000 (http://localhost:3000/)
-⭐ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/index.html deleted file mode 100644 index 3e6f52c..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/graphql/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -GraphQL – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: GraphQL -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/feed/index.xml deleted file mode 100644 index f0acb04..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/feed/index.xml +++ /dev/null @@ -1,544 +0,0 @@ - - - - KeystoneJS – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 12:54:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - KeystoneJS – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 2 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - - - Thu, 11 Jan 2024 01:41:00 +0000 - - - - - - - - /?p=539 - - - In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-vite@5.2.2" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: 'enxoco@github.com',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: 'mikeconrad@example.com',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - - - Thu, 04 Jan 2024 00:59:49 +0000 - - - - - - - - /?p=533 - - - In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-keystone-app@9.0.1" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐ Server listening on :3000 (http://localhost:3000/)
-⭐ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/index.html deleted file mode 100644 index d2981fb..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/keystonejs/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -KeystoneJS – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: KeystoneJS -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/feed/index.xml deleted file mode 100644 index ff24d40..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/feed/index.xml +++ /dev/null @@ -1,544 +0,0 @@ - - - - NodeJS – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 12:54:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - NodeJS – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 2 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - - - Thu, 11 Jan 2024 01:41:00 +0000 - - - - - - - - /?p=539 - - - In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-vite@5.2.2" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: 'enxoco@github.com',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: 'mikeconrad@example.com',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - - - Thu, 04 Jan 2024 00:59:49 +0000 - - - - - - - - /?p=533 - - - In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-keystone-app@9.0.1" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐ Server listening on :3000 (http://localhost:3000/)
-⭐ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/index.html deleted file mode 100644 index 36b27f7..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/nodejs/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -NodeJS – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: NodeJS -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/feed/index.xml deleted file mode 100644 index d5d7f47..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/feed/index.xml +++ /dev/null @@ -1,237 +0,0 @@ - - - - Portfolio – hackanooga - - / - Confessions of a homelab hacker - Tue, 12 Mar 2024 21:00:42 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Portfolio – hackanooga - / - 32 - 32 - - - Hoots Wings - /hoots-wings/ - - - Wed, 12 Jul 2023 15:32:44 +0000 - - - /?p=495 - - - While working for Morrison I had the pleasure of building a website for Hoots Wings. The CMS was Perch and it was mostly HTML, CSS, PHP and JavaScript on the frontend, however I built out a customer store locator using NodeJS and VueJS.

- - - -
- - - -

I was the sole frontend developer responsible for taking the designs from SketchUp and translating them to the site you see now. Most of the blocks and templates are built using a mix of PHP and HTML/SCSS. There was also some JavaScript for things like getting the users location and rendering popups/modals.

- - - -

The store locator was a separate piece that was built in Vue2.0 with a NodeJS backend. For the backend I used KeystoneJS to hold all of the store information. There was also some custom development that was done in order to sync the stores added via the CMS with Yext and vice versa.

- - - -
hootswings.com screenshot
- - - -

For that piece I ended up having to write a custom integration in Perch that would connect to the NodeJS backend and pull the stores but also make sure that those were in sync with Yext. This required diving into the Yext API some and examining a similar integration that we had for another client site.

- - - -

Unfortunately I don’t have any screen grabs of the admin side of things since that is proprietary but the system I built allowed a site admin to go in and add/edit store locations that would show up on the site and also show up in Yext with the appropriate information.

- - - -

Screenshots

- - - -

Here are some full screenshots of the site.

- - - -

Homepage

- - - -
hootswings.com homepage screenshot
- - - -

- - - -

Menu Page

- - - -
- - - -

- - - -

Locations Page

- - - -
-]]>
- - - -
- - Hilger Grading Portal - /hilger-grading-portal/ - - - Sun, 21 May 2023 20:07:50 +0000 - - - /?p=509 - - - Back around 2014 I took on my first freelance development project for a Homeschool Co-op here in Chattanooga called Hilger Higher Learning. The problem that they were trying to solve involved managing grades and report cards for their students. In the past, they had a developer build a rudimentary web application that would allow them to enter grades for students, however it lacked any sort of concurrency meaning that if two teachers were making changes to the same student at the same time, teacher b’s changes would overwrite teacher a’s changes. This was obviously a huge headache.

- - - -

I built out the first version of the app using PHP and HTML, CSS and Datatables with lots of jQuery sprinkled in. I built in custom functionality that allowed them to easily compile and print all the report cards for all students with the simple click of a button. It was a game changer or them and streamlined the process significantly.

- - - -

That system was in production for 5 years or so with minimal updates and maintance. I recently rebuilt it using React and ChakraUI on the frontend and KeystoneJS on the backend. I also modernized the deployment by building Docker images for the frontend/backend. I actually ended up keeping parts of it in PHP due to the fact that I couldn’t find a JavaScript library that would solve the challenges I had. Here are some screenshots of it in action:

- - - -

- - - -

This is the page listing all teachers in the system and whether or not they have admin privileges. Any admin user can grant other admin users this privilege. There is also a button to send the teacher a password reset email (via Postmark API integration) and an option that allows admin users to impersonate other users for troubleshooting and diagnostic purposes.

- - - -

- - - -
- - - -

The data is all coming from the KeystoneJS backend GraphQL API. I am using urql for fetching the data and handling mutations. This is the page that displays students. It is filterable and searchable. Teachers also have the ability to mark a student as active or inactive for the semester as well as delete them from the system.

- - - -
- - - -

Clicking on a student takes the teacher/admin to an edit course screen where they can add and remove courses for each student. A teacher can add as many courses as they need. If multiple teachers have added courses for this student, the user will only see the courses they have entered.

- - - -
- - - -

There is another page that allows admin users to view and manage all of the parents in the system. It allows them to easily send a password reset email to the parents as well as to view the parent portal.

- - - -
- - - -
- - - -

Technologies used

- - - -
    -
  • Digital Ocean Droplet (Server) – Ubuntu Server
  • - - - -
  • Docker (Frontend, Backend, PHP, Postgresql database)
  • - - - -
  • Git
  • - - - -
  • NodeJS
  • - - - -
  • PHP
  • - - - -
  • ChakraUI
  • - - - -
  • KeystoneJS
  • - - - -
  • Postmark
  • - - - -
  • GraphQL
  • - - - -
  • Typescript
  • - - - -
  • React
  • - - - -
  • urql
  • -
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/index.html deleted file mode 100644 index 11e08fb..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/portfolio/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -Portfolio – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: Portfolio -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/feed/index.xml deleted file mode 100644 index 23a4255..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/feed/index.xml +++ /dev/null @@ -1,544 +0,0 @@ - - - - Prisma – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 12:54:04 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Prisma – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 2 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - - - Thu, 11 Jan 2024 01:41:00 +0000 - - - - - - - - /?p=539 - - - In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-vite@5.2.2" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: 'enxoco@github.com',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: 'mikeconrad@example.com',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - - - Thu, 04 Jan 2024 00:59:49 +0000 - - - - - - - - /?p=533 - - - In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-keystone-app@9.0.1" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐ Server listening on :3000 (http://localhost:3000/)
-⭐ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/index.html deleted file mode 100644 index 39dc30b..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/prisma/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -Prisma – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: Prisma -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/feed/index.xml deleted file mode 100644 index 48bc7d3..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/feed/index.xml +++ /dev/null @@ -1,227 +0,0 @@ - - - - React – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 16:14:24 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - React – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 3 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ - - - Wed, 17 Jan 2024 17:11:00 +0000 - - - - - - /?p=546 - - - In our previous post we got to the point of displaying an OTP in our card component. Now it is time to refactor a bit and implement a countdown functionality to see when this token will expire. For now we will go ahead and add this logic into our Card component. In order to figure out how to build this countdown timer we first need to understand how the TOTP counter is calculated.

- - - -

In other words, we know that at TOTP token is derived from a secret key and the current time. If we dig into the spec some we can find that time is a reference to Linux epoch time or the number of seconds that have elapsed since January 1st 1970. For a little more clarification check out this Stackexchange article.

- - - -

So if we know that the time is based on epoch time, we also need to know that most TOTP tokens have a validity period of either 30 seconds or 60 seconds. 30 seconds is the most common standard so we will use that for our implementation. If we put all that together then basically all we need is 2 variables:

- - - -
    -
  1. Number of seconds since epoch
  2. - - - -
  3. How many seconds until this token expires
  4. -
- - - -

The first one is easy:

- - - -
let secondsSinceEpoch;
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-# This gives us a time like so: 1710338609
- - - -

For the second one we will need to do a little math but it’s pretty straightforward. We need to divide secondsSinceEpoch by 30 seconds and then subtract this number from 30. Here is what that looks like:

- - - -
let secondsSinceEpoch;
-let secondsRemaining;
-const period = 30;
-
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-secondsRemaining = period - (secondsSinceEpoch % period);
- - - -

Now let’s put all of that together into a function that we can test out to make sure we are getting the results we expect.

- - - -
const timer = setInterval(() => {
-  countdown()
-}, 1000)
-
-function countdown() {
-  let secondsSinceEpoch;
-  let secondsRemaining;
-
-  const period = 30;
-  secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-  secondsRemaining = period - (secondsSinceEpoch % period);
-  console.log(secondsSinceEpoch, secondsRemaining)
-  if (secondsRemaining == 1) {
-    console.log("timer done")
-    clearInterval(timer)
-  }
-}
-
- - - -

Running this function should give you output similar to the following. In this example we are stopping the timer once it hits 1 second just to show that everything is working as we expect. In our application we will want this time to keep going forever:

- - - -
1710339348, 12
-1710339349, 11
-1710339350, 10
-1710339351, 9
-1710339352, 8
-1710339353, 7
-1710339354, 6
-1710339355, 5
-1710339356, 4
-1710339357, 3
-1710339358, 2
-1710339359, 1
-"timer done"
- - - -

Here is a JSfiddle that shows it in action: https://jsfiddle.net/561vg3k7/

- - - -

We can go ahead and add this function to our Card component and get it wired up. I am going to skip ahead a bit and add a progress bar to our card that is synced with our countdown timer and changes colors as it drops below 10 seconds. For now we will be using a setInterval function to accomplish this.

- - - -

Here is what my updated src/Components/Card.tsx looks like:

- - - -
import { useState } from "react";
-import { IToken } from "../App"
-import { TOTP } from 'totp-generator';
-
-
-function Card({ token }: { token: IToken }) {
-  const { otp } = TOTP.generate(token.token);
-  const [timerStyle, setTimerStyle] = useState("");
-  const [timerWidth, setTimerWidth] = useState("");
-
-
-  function countdown() {
-    let secondsSinceEpoch: number;
-    let secondsRemaining: number = 30;
-    const period = 30;
-    secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-    secondsRemaining = period - (secondsSinceEpoch % period);
-    setTimerWidth(`${100 - (100 / 30 * (30 - secondsRemaining))}%`)
-    setTimerStyle(secondsRemaining < 10 ? "salmon" : "lightgreen")
-  }
-  setInterval(() => {
-    countdown();
-  }, 250);
-  return (
-    <>
-      <div className='card'>
-        <div className='progressBar'style={{ width: timerWidth, backgroundColor: timerStyle}}></div>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span >{otp}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -

Pretty straightforward. I also updated my src/index.css and added a style for our progress bar:

- - - -
.progressBar {
-  height: 10px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: inherit;
-}
-// Also be sure to add position:relative to .card which is the parent of this.
- - - -

Here is what it all looks like in action:

- - - -
- - - -

If you look closely you will notice a few interesting things. First is that the color of the progress bar changes from green to red. This is handled by our timerStyle variable. That part is pretty simple, if the timer is less than 10 seconds we set the background color as salmon otherwise we use light green. The width of the progress bar is controlled by `${100 – (100 / 30 * (30 – secondsRemaining))}%`

- - - -

The other interesting thing to note is that when the timer runs out it automatically restarts at 30 seconds with a new OTP. This is due to the fact that this component is re-rendering every 1/4 second and every time it re-renders it is running the entire function body including: const { otp } = TOTP.generate(token.token);.

- - - -

This is to be expected since we are using React and we are just using a setInterval. It may be a little unexpected though if you aren’t as familiar with React render cycles. For our purposes this will work just fine for now. Stay tuned for pt 4 of this series where we wire up the backend API.

-]]>
- - - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/index.html deleted file mode 100644 index 8c8351b..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/react/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -React – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: React -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/feed/index.xml deleted file mode 100644 index 6aa135f..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/feed/index.xml +++ /dev/null @@ -1,740 +0,0 @@ - - - - TypeScript – hackanooga - - / - Confessions of a homelab hacker - Wed, 13 Mar 2024 16:14:24 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - TypeScript – hackanooga - / - 32 - 32 - - - Roll your own authenticator app with KeystoneJS and React – pt 3 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ - - - Wed, 17 Jan 2024 17:11:00 +0000 - - - - - - /?p=546 - - - In our previous post we got to the point of displaying an OTP in our card component. Now it is time to refactor a bit and implement a countdown functionality to see when this token will expire. For now we will go ahead and add this logic into our Card component. In order to figure out how to build this countdown timer we first need to understand how the TOTP counter is calculated.

- - - -

In other words, we know that at TOTP token is derived from a secret key and the current time. If we dig into the spec some we can find that time is a reference to Linux epoch time or the number of seconds that have elapsed since January 1st 1970. For a little more clarification check out this Stackexchange article.

- - - -

So if we know that the time is based on epoch time, we also need to know that most TOTP tokens have a validity period of either 30 seconds or 60 seconds. 30 seconds is the most common standard so we will use that for our implementation. If we put all that together then basically all we need is 2 variables:

- - - -
    -
  1. Number of seconds since epoch
  2. - - - -
  3. How many seconds until this token expires
  4. -
- - - -

The first one is easy:

- - - -
let secondsSinceEpoch;
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-# This gives us a time like so: 1710338609
- - - -

For the second one we will need to do a little math but it’s pretty straightforward. We need to divide secondsSinceEpoch by 30 seconds and then subtract this number from 30. Here is what that looks like:

- - - -
let secondsSinceEpoch;
-let secondsRemaining;
-const period = 30;
-
-secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-secondsRemaining = period - (secondsSinceEpoch % period);
- - - -

Now let’s put all of that together into a function that we can test out to make sure we are getting the results we expect.

- - - -
const timer = setInterval(() => {
-  countdown()
-}, 1000)
-
-function countdown() {
-  let secondsSinceEpoch;
-  let secondsRemaining;
-
-  const period = 30;
-  secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-
-  secondsRemaining = period - (secondsSinceEpoch % period);
-  console.log(secondsSinceEpoch, secondsRemaining)
-  if (secondsRemaining == 1) {
-    console.log("timer done")
-    clearInterval(timer)
-  }
-}
-
- - - -

Running this function should give you output similar to the following. In this example we are stopping the timer once it hits 1 second just to show that everything is working as we expect. In our application we will want this time to keep going forever:

- - - -
1710339348, 12
-1710339349, 11
-1710339350, 10
-1710339351, 9
-1710339352, 8
-1710339353, 7
-1710339354, 6
-1710339355, 5
-1710339356, 4
-1710339357, 3
-1710339358, 2
-1710339359, 1
-"timer done"
- - - -

Here is a JSfiddle that shows it in action: https://jsfiddle.net/561vg3k7/

- - - -

We can go ahead and add this function to our Card component and get it wired up. I am going to skip ahead a bit and add a progress bar to our card that is synced with our countdown timer and changes colors as it drops below 10 seconds. For now we will be using a setInterval function to accomplish this.

- - - -

Here is what my updated src/Components/Card.tsx looks like:

- - - -
import { useState } from "react";
-import { IToken } from "../App"
-import { TOTP } from 'totp-generator';
-
-
-function Card({ token }: { token: IToken }) {
-  const { otp } = TOTP.generate(token.token);
-  const [timerStyle, setTimerStyle] = useState("");
-  const [timerWidth, setTimerWidth] = useState("");
-
-
-  function countdown() {
-    let secondsSinceEpoch: number;
-    let secondsRemaining: number = 30;
-    const period = 30;
-    secondsSinceEpoch = Math.ceil(Date.now() / 1000) - 1;
-    secondsRemaining = period - (secondsSinceEpoch % period);
-    setTimerWidth(`${100 - (100 / 30 * (30 - secondsRemaining))}%`)
-    setTimerStyle(secondsRemaining < 10 ? "salmon" : "lightgreen")
-  }
-  setInterval(() => {
-    countdown();
-  }, 250);
-  return (
-    <>
-      <div className='card'>
-        <div className='progressBar'style={{ width: timerWidth, backgroundColor: timerStyle}}></div>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span >{otp}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -

Pretty straightforward. I also updated my src/index.css and added a style for our progress bar:

- - - -
.progressBar {
-  height: 10px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: inherit;
-}
-// Also be sure to add position:relative to .card which is the parent of this.
- - - -

Here is what it all looks like in action:

- - - -
- - - -

If you look closely you will notice a few interesting things. First is that the color of the progress bar changes from green to red. This is handled by our timerStyle variable. That part is pretty simple, if the timer is less than 10 seconds we set the background color as salmon otherwise we use light green. The width of the progress bar is controlled by `${100 – (100 / 30 * (30 – secondsRemaining))}%`

- - - -

The other interesting thing to note is that when the timer runs out it automatically restarts at 30 seconds with a new OTP. This is due to the fact that this component is re-rendering every 1/4 second and every time it re-renders it is running the entire function body including: const { otp } = TOTP.generate(token.token);.

- - - -

This is to be expected since we are using React and we are just using a setInterval. It may be a little unexpected though if you aren’t as familiar with React render cycles. For our purposes this will work just fine for now. Stay tuned for pt 4 of this series where we wire up the backend API.

-]]>
- - - - -
- - Roll your own authenticator app with KeystoneJS and React – pt 2 - /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ - - - Thu, 11 Jan 2024 01:41:00 +0000 - - - - - - - - /?p=539 - - - In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the authenticator folder and run the following:

- - - -
$ yarn create vite@latest
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-vite@5.2.2" with binaries:
-      - create-vite
-      - cva
-✔ Project name: … frontend
-✔ Select a framework: › React
-✔ Select a variant: › TypeScript
-
-Scaffolding project in /home/mikeconrad/projects/authenticator/frontend...
-
-Done. Now run:
-
-  cd frontend
-  yarn
-  yarn dev
-
-Done in 10.20s.
- - - -

Let’s go ahead and go into our frontend directory and get started:

- - - -
$ cd frontend
-$ yarn
-yarn install v1.22.21
-info No lockfile found.
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-success Saved lockfile.
-Done in 10.21s.
-
-$ yarn dev
-yarn run v1.22.21
-$ vite
-Port 5173 is in use, trying another one...
-
-  VITE v5.1.6  ready in 218 ms
-
-  ➜  Local:   http://localhost:5174/
-  ➜  Network: use --host to expose
-  ➜  press h + enter to show help
-
- - - -

Next go ahead and open the project up in your IDE of choice. I prefer VSCodium:

- - - -
codium frontend
- - - -

Go ahead and open up src/App.tsx and remove all the boilerplate so it looks like this:

- - - -
import './App.css'
-
-function App() {
-
-  return (
-    <>
-    </>
-  )
-}
-
-export default App
- - - -

Let’s start by building a card component that will display an individual token. Our goal is something that looks like this:

- - - -
- - - -

We will start by creating a Components folder with a Card component:

- - - -
$ mkdir src/Components
-$ touch src/Components/Card.tsx
- - - -

Let’s go ahead and make a couple updates, we will create this simple card component, add some dummy tokens and some basic styling.

- - - -
# src/App.tsx
-
-import './App.css'
-import Card from './Components/Card';
-export interface IToken {
-  account: string;
-  issuer: string;
-  token: string;
-}
-function App() {
-
-  const tokens: IToken[] = [
-    {
-      account: 'enxoco@github.com',
-      issuer: 'Github',
-      token: 'AJFDLDAJKFK'
-    },
-    {
-      account: 'mikeconrad@example.com',
-      issuer: 'Example.com',
-      token: 'KAJLFDJLKAFD'
-    }
-  ]
-  return (
-    <>
-      <div className='cardWrapper'>
-        {tokens.map(token => <Card token={token} />)}
-      </div>
-    </>
-  )
-}
-
-export default App
-
- - - -
# src/Components/Card.tsx
-import { IToken } from "../App"
-
-function Card({ token }: { token: IToken }) {
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{token.token}</span>
-      </div>
-    </>
-
-  )
-}
-export default Card
- - - -
# src/index.css
-:root {
-  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
-  line-height: 1.5;
-  font-weight: 400;
-
-  color-scheme: light dark;
-  color: rgba(255, 255, 255, 0.87);
-
-  font-synthesis: none;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-a {
-  font-weight: 500;
-  color: #646cff;
-  text-decoration: inherit;
-}
-a:hover {
-  color: #535bf2;
-}
-
-body {
-  margin: 0;
-  display: flex;
-  place-items: center;
-  min-width: 320px;
-  min-height: 100vh;
-  background-color: #2c2c2c;
-
-}
-
-.cardWrapper {
-  display: flex;
-}
-
-.card {
-    padding: 2em;
-    min-width: 250px;
-    border: 1px solid;
-    margin: 10px;
-    background-color: #333333;
-    display: flex;
-    flex-direction: column;
-    align-items: baseline;
-}
- - - -

Now you should have something that looks like this:

- - - -
- - - -

Alright, we have some of the boring stuff out of the way, now let’s start making some magic. If you aren’t familiar with how TOTP tokens work, basically there is an Algorithm that generates them. I would encourage you to read the RFC for a detailed explanation. Basically it is an algorithm that generates a one time password using the current time as a source of uniqueness along with the secret key.

- - - -

If we really wanted to we could implement this algorithm ourselves but thankfully there are some really simple libraries that do it for us. For our project we will be using one called totp-generator. Let’s go ahead and install it and check it out:

- - - -
$ yarn add totp-generator
- - - -

Now let’s add it to our card component and see what happens. Using it is really simple. We just need to import it, instantiate a new TokenGenerator and pass it our Secret key:

- - - -
# src/Components/card.tsx
-import { TOTP } from 'totp-generator';
----
-function Card({ token }: { token: IToken }) {
-  const { otp, expires } = TOTP.generate(token.token)
-  return (
-    <>
-      <div className='card'>
-        <span>{token.issuer}</span>
-        <span>{token.account}</span>
-        <span>{otp} - {expires}</span>
-      </div>
-    </>
-  )
-}
- - - -

Now save and go back to your browser and you should see that our secret keys are now being displayed as tokens:

- - - -
- - - -

That is pretty cool, the only problem is you need to refresh the page to refresh the token. We will take care of that in part 3 of this series as well as handling fetching tokens from our backend.

-]]>
- - - -
- - Roll your own authenticator app with KeystoneJS and React - /roll-your-own-authenticator-app-with-keystonejs-and-react/ - - - Thu, 04 Jan 2024 00:59:49 +0000 - - - - - - - - /?p=533 - - - In this series of articles we are going to be building an authenticator app using KeystoneJS for the backend and React for the frontend. The concept is pretty simple and yes there are a bunch out there already but I recently had a need to learn some of the ins and outs of TOTP tokens and thought this project would be a fun idea. Let’s get started.

- - - -
Step 1: Init keystone app
- - - -

Open up a terminal and create a blank keystone project. We are going to call our app authenticator to keep things simple.

- - - -
$ yarn create keystone-app
-yarn create v1.22.21
-[1/4] Resolving packages...
-[2/4] Fetching packages...
-[3/4] Linking dependencies...
-[4/4] Building fresh packages...
-
-success Installed "create-keystone-app@9.0.1" with binaries:
-      - create-keystone-app
-[###################################################################################################################################################################################] 273/273
-✨ You're about to generate a project using Keystone 6 packages.
-
-✔ What directory should create-keystone-app generate your app into? · authenticator
-
-⠸ Installing dependencies with yarn. This may take a few minutes.
-⚠ Failed to install with yarn.
-✔ Installed dependencies with npm.
-
-
-🎉  Keystone created a starter project in: authenticator
-
-  To launch your app, run:
-
-  - cd authenticator
-  - npm run dev
-
-  Next steps:
-
-  - Read authenticator/README.md for additional getting started details.
-  - Edit authenticator/keystone.ts to customize your app.
-  - Open the Admin UI
-  - Open the Graphql API
-  - Read the docs
-  - Star Keystone on GitHub
-
-Done in 84.06s.
-
- - - -

After a few minutes you should be ready to go. Ignore the error about yarn not being able to install dependencies, it’s an issue with my setup. Next go ahead and open up the project folder with your editor of choice. I use VSCodium:

- - - -
codium authenticator
- - - -

Let’s go ahead and remove all the comments from the schema.ts file and clean it up some:

- - - -
sed -i '/\/\//d' schema.ts
- - - -

Also, go ahead and delete the Post and Tag list as we won’t be using them. Our cleaned up schema.ts should look like this:

- - - -
// schema.ts
-import { list } from '@keystone-6/core';
-import { allowAll } from '@keystone-6/core/access';
-
-import {
-  text,
-  relationship,
-  password,
-  timestamp,
-  select,
-} from '@keystone-6/core/fields';
-
-
-import type { Lists } from '.keystone/types';
-
-export const lists: Lists = {
-  User: list({
-    access: allowAll,
-
-    fields: {
-      name: text({ validation: { isRequired: true } }),
-      email: text({
-        validation: { isRequired: true },
-        isIndexed: 'unique',
-      }),
-      password: password({ validation: { isRequired: true } }),
-      createdAt: timestamp({
-        defaultValue: { kind: 'now' },
-      }),
-    },
-  }),
-
-};
-
- - - -

Next we will define the schema for our tokens. We will need 3 basic things to start with:

- - - -
    -
  • Issuer
  • - - - -
  • Secret Key
  • - - - -
  • Account
  • -
- - - -

The only thing that really matters for generating a TOTP is actually the secret key. The other two fields are mostly for identifying and differentiating tokens. Go ahead and add the following to our schema.ts underneath the User list:

- - - -
  Token: list({
-    access: allowAll,
-    fields: {
-      secretKey: text({ validation: { isRequired: true } }),
-      issuer: text({ validation: { isRequired: true }}),
-      account: text({ validation: { isRequired: true }})
-    }
-  }),
- - - -

Now that we have defined our Token, we should probably link it to a user. KeystoneJS makes this really easily. We simply need to add a relationship field to our User list. Add the following field to the user list:

- - - -
tokens: relationship({ ref:'Token', many: true })
- - - -

We are defining a tokens field on the User list and tying it to our Token list. We are also passing many: true saying that a user can have one or more tokens. Now that we have the basics set up, let’s go ahead and spin up our app and see what we have:

- - - -
$ yarn dev
-yarn run v1.22.21
-$ keystone dev
-✨ Starting Keystone
-⭐ Server listening on :3000 (http://localhost:3000/)
-⭐ GraphQL API available at /api/graphql
-✨ Generating GraphQL and Prisma schemas
-✨ The database is already in sync with the Prisma schema
-✨ Connecting to the database
-✨ Creating server
-✅ GraphQL API ready
-✨ Generating Admin UI code
-✨ Preparing Admin UI app
-✅ Admin UI ready
-
- - - -

Our server should be running on localhost:3000 so let’s check it out! The first time we open it up we will be greeted with the initialization screen. Go ahead and create an account to login:

- - - -
- - - -

Once you login you should see a dashboard similar to this:

- - - -
- - - -

You can see we have Users and Tokens that we can manage. The beauty of KeystoneJS is that you get full CRUD functionality out of the box just by defining our schema! Go ahead and click on Tokens to add a token:

- - - -
- - - -

For this example I just entered some random text as an example. This is enough to start testing out our TOTP functionality. Click ‘Create Token’ and you should see a list displaying existing tokens:

- - - -
- - - -

We are now ready to jump into the frontend. Stay tuned for pt 2 of this series.

-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/index.html deleted file mode 100644 index a6bd550..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/typescript/index.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - -TypeScript – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: TypeScript -

- -
- - -
- -
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/feed/index.xml deleted file mode 100644 index 6bfa130..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/feed/index.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - Upwork Project – hackanooga - - / - Confessions of a homelab hacker - Wed, 17 Jul 2024 02:15:23 +0000 - en-US - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - - /wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png - Upwork Project – hackanooga - / - 32 - 32 - - - SFTP Server Setup for Daily Inventory File Transfers - /sftp-server-setup-for-daily-inventory-file-transfers/ - - - Wed, 17 Jul 2024 02:15:23 +0000 - - - - - - - /?p=599 - - - Job Description - - - -
-

We are looking for an experienced professional to help us set up an SFTP server that will allow our vendors to send us inventory files on a daily basis. The server should ensure secure and reliable file transfers, allowing our vendors to easily upload their inventory updates. The successful candidate will possess expertise in SFTP server setup and configuration, as well as knowledge of network security protocols. The required skills for this job include:

- - - -

– SFTP server setup and configuration
– Network security protocols
– Troubleshooting and problem-solving skills

- - - -

If you have demonstrated experience in setting up SFTP servers and ensuring smooth daily file transfers, we would love to hear from you.

-
- - - -
- - - -

- - - -

My Role

- - - -

I walked the client through the process of setting up a Digital Ocean account. I created a Ubuntu 22.04 VM and installed SFTPGo. I set the client up with an administrator user so that they could easily login and manage users and shares. I implemented some basic security practices as well and set the client up with a custom domain and free TLS/SSL certificate from LetsEncrypt. With the documentation and screenshots I provided the client, they were able to get everything up and running and add users and connect other systems easily and securly.

- - - -
- - - -

- - - -

Client Feedback

- - - -
-

Rating is 5 out of 5.

- - - -

Michael was EXTREMELY helpful and great to work with. We really benefited from his support and help with everything.

-
-]]>
- - - -
-
-
diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/index.html deleted file mode 100644 index dcc3966..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/tag/upwork-project/index.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -Upwork Project – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
-
-

Tag: Upwork Project -

- -
- - -
-
- - - -
-
-
- - - -
-
-
-
- - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml deleted file mode 100644 index be04471..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Traefik 3.0 service discovery in Docker Swarm mode - - /traefik-3-0-service-discovery-in-docker-swarm-mode/ - Confessions of a homelab hacker - Sat, 11 May 2024 13:44:01 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/index.html deleted file mode 100644 index 6de2a43..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-3-0-service-discovery-in-docker-swarm-mode/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - -Traefik 3.0 service discovery in Docker Swarm mode – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Traefik 3.0 service discovery in Docker Swarm mode

-
- - - - -
-

I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days.

- - - -

Anyway, I set up a VM scaling set in Azure with 10 Ubuntu 22.04 vms and wrote some Ansible scripts to automate the process of installing Docker on each machine as well as setting 3 up as swarm managers and the other 7 as worker nodes. I ssh’d into the primary manager node and created a docker compose file for launching an observability stack.

- - - -

Here is what that docker-compose.yml looks like:

- - - -
---
-services:
-  otel-collector:
-    image: otel/opentelemetry-collector-contrib:0.88.0
-    volumes:
-      - /home/user/repo/common/devops/observability/otel-config.yaml:/etc/otel/config.yaml
-      - /home/user/repo/log:/log/otel
-    command: --config /etc/otel/config.yaml
-    environment:
-      JAEGER_ENDPOINT: 'tempo:4317'
-      LOKI_ENDPOINT: 'http://loki:3100/loki/api/v1/push'
-    ports:
-      - '8889:8889' # Prometheus metrics exporter (scrape endpoint)
-      - '13133:13133' # health_check extension
-      - '55679:55679' # ZPages extension
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  prometheus:
-    container_name: prometheus
-    image: prom/prometheus:v2.42.0
-    volumes:
-      - /home/user/repo/common/devops/observability/prometheus.yml:/etc/prometheus/prometheus.yml
-    ports:
-      - '9090:9090'
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  loki:
-    container_name: loki
-    image: grafana/loki:2.7.4
-    ports:
-      - '3100:3100'
-    networks:
-      - traefik
-  grafana:
-    container_name: grafana
-    image: grafana/grafana:9.4.3
-    volumes:
-      - /home/user/repo/common/devops/observability/grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
-    environment:
-      GF_AUTH_ANONYMOUS_ENABLED: 'false'
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Admin'
-    expose:
-      - '3000'
-    labels:
-      - traefik.constraint-label=traefik
-      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
-      - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
-      - traefik.http.routers.grafana-http.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-http.entrypoints=http
-      - traefik.http.routers.grafana-http.middlewares=https-redirect
-      # traefik-https the actual router using HTTPS
-      # Uses the environment variable DOMAIN
-      - traefik.http.routers.grafana-https.rule=Host(`swarm-grafana.mydomain.com`)
-      - traefik.http.routers.grafana-https.entrypoints=https
-      - traefik.http.routers.grafana-https.tls=true
-      # Use the special Traefik service api@internal with the web UI/Dashboard
-      - traefik.http.routers.grafana-https.service=grafana
-      # Use the "le" (Let's Encrypt) resolver created below
-      - traefik.http.routers.grafana-https.tls.certresolver=le
-      # Enable HTTP Basic auth, using the middleware created above
-      - traefik.http.services.grafana.loadbalancer.server.port=3000
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    networks:
-      - traefik
-  # Tempo runs as user 10001, and docker compose creates the volume as root.
-  # As such, we need to chown the volume in order for Tempo to start correctly.
-  init:
-    image: &tempoImage grafana/tempo:latest
-    user: root
-    entrypoint:
-      - 'chown'
-      - '10001:10001'
-      - '/var/tempo'
-    volumes:
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-
-  tempo:
-    image: *tempoImage
-    container_name: tempo
-    command: ['-config.file=/etc/tempo.yaml']
-    volumes:
-      - /home/user/repo/common/devops/observability/tempo.yaml:/etc/tempo.yaml
-      - /home/user/repo/tempo-data:/var/tempo
-    deploy:
-      placement:
-        constraints:
-          - node.hostname==dockerswa2V8BY4
-    ports:
-      - '14268' # jaeger ingest
-      - '3200' # tempo
-      - '4317' # otlp grpc
-      - '4318' # otlp http
-      - '9411' # zipkin
-    depends_on:
-      - init
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
- - - -

Pretty straightforward so I proceed to deploy it into the swarm

- - - -
docker stack deploy -c docker-compose.yml observability
- - - -

Everything deploys properly but when I view the Traefik logs there is an issue with all the services except for the grafana service. I get errors like this:

- - - -
traefik_traefik.1.tm5iqb9x59on@dockerswa2V8BY4    | 2024-05-11T13:14:16Z ERR error="service \"observability-prometheus\" error: port is missing" container=observability-prometheus-37i852h4o36c23lzwuu9pvee9 providerName=swarm
-
- - - -

It drove me crazy for about half a day or so. I couldn’t find any reason why the grafana service worked as expected but none of the others did. Part of my love/hate relationship with Traefik stems from the fact that configuration issues like this can be hard to track and debug. Ultimately after lots of searching and banging my head against a wall I found the answer in the Traefik docs and thought I would share here for anyone else who might run into this issue. Again, this solution is specific to Docker Swarm mode.

- - - -

- - - -

https://doc.traefik.io/traefik/providers/swarm/#configuration-examples

- - - -

Expand that first section and you will see the solution:

- - - -
- - - -

It turns out I just needed to update my docker-compose.yml and nest the labels under a deploy section, redeploy and everything was working as expected.

-
- - - - - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml deleted file mode 100644 index 092de18..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Traefik with Let’s Encrypt and Cloudflare (pt 1) - - /traefik-with-lets-encrypt-and-cloudflare-pt-1/ - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:47 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html deleted file mode 100644 index 3829d3b..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-1/index.html +++ /dev/null @@ -1,466 +0,0 @@ - - - - - - -Traefik with Let’s Encrypt and Cloudflare (pt 1) – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Traefik with Let’s Encrypt and Cloudflare (pt 1)

-
- - - - -
-

Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a docker-compose.yaml

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - [email protected]
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      # Redirect all http requests to https
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-    # Needed to request certs via lets encrypt
-    environment:
-      - CF_DNS_API_TOKEN=[redacted]
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      # Used for storing letsencrypt certificates
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      REDIS_URL: redis://redis:6379/0
-      SECRET_EXPIRY: "604800"
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
-
- - - -

In part one of this series I will be going over some of the basics of Traefik and how dynamic routing works. If you want to skip to the good stuff and get everything configured with Cloudflare, you can skip to part 2.

- - - -

This example set’s up the primary Traefik container which acts as the ingress controller as well as a handy One Time Secret sharing service I use. Traefik handles routing in Docker via labels. For this to work properly the services that Traefik is trying to route to all need to be on the same Docker network. For this example we created a network called traefik by running the following:

- - - -
docker network create traefik
-
- - - -

Let’s take a look at the labels we applied to the ots container a little closer:

- - - -
    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.example.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-      - traefik.http.services.ots.loadbalancer.server.port=3000
- - - -

traefik.enable=true – This should be pretty self explanatory but it tells Traefik that we want it to know about this service.

- - - -

traefik.http.routers.ots.rule=Host('ots.example.com') - This is where some of the magic comes in. Here we are defining a router called ots. The name is arbitrary in that it doesn’t have to match the name of the service but for our example it does. There are many rules that you can specify but the easiest for this example is host. Basically we are saying that any request coming in for ots.example.com should be picked up by this router. You can find more options for routers in the Traefik docs.

- - - -

– traefik.http.routers.ots.entrypoints=websecure
– traefik.http.routers.ots.tls=true
– traefik.http.routers.ots.tls.certresolver=letsencrypt

We are using these three labels to tell our router that we want it to use the websecure entrypoint, and that it should use the letsencrypt certresolver to grab it’s certificates. websecure is an arbitrary name that we assigned to our :443 interface. There are multiple ways to configure this, I choose to use the cli format in my traefik config:

- - - -

“`

- - - -
    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      # Our entrypoint names are arbitrary but these are convention.
-      # The important part is the port binding that we associate.
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-
-
- - - -

These last label is optional depending on your setup but it is important to understand as the documentation is a little fuzzy.

- - - -

– traefik.http.services.ots.loadbalancer.server.port=3000

Here’s how it works. Suppose you have a container that exposes multiple ports. Maybe one of those is a web ui and another is something that you don’t want exposed. By default Traefik will try and guess which port to route requests to. My understanding is that it will try and use the first exposed port. However you can override this functionality by using the label above which will tell Traefik specifically which port you want to route to inside the container.

The service name is derived automatically from the definition in the docker compose file:

- - - -

ots: # This will become the service name
image: luzifer/ots
container_name: ots
-
- - -
-
- - - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml deleted file mode 100644 index de9f5d4..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/feed/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Comments on: Traefik with Let’s Encrypt and Cloudflare (pt 2) - - /traefik-with-lets-encrypt-and-cloudflare-pt-2/ - Confessions of a homelab hacker - Tue, 12 Mar 2024 19:11:40 +0000 - - hourly - - 1 - https://wordpress.org/?v=6.6.2 - - diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html deleted file mode 100644 index 80eedb8..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/traefik-with-lets-encrypt-and-cloudflare-pt-2/index.html +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - -Traefik with Let’s Encrypt and Cloudflare (pt 2) – hackanooga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
-
- - -

Traefik with Let’s Encrypt and Cloudflare (pt 2)

-
- - - - -
-

In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router.

- - - -

Sometime in the past I had set up some special rules on my router to force all clients on my network to send DNS requests through a self hosted DNS server. I did this to keep some of my “smart” devices from misbehaving by blocking there access to the outside world. As it turns out some devices will ignore the DNS servers that you hand out via DHCP and will use their own instead. That is of course unless you force DNS redirection but that is another post for another day.

- - - -

Let’s revisit our current configuration:

- - - -
version: '3'
-
-services:
-  reverse-proxy:
-    # The official v2 Traefik docker image
-    image: traefik:v2.11
-    # Enables the web UI and tells Traefik to listen to docker
-    command:
-      - --api.insecure=true
-      - --providers.docker=true
-      - --providers.file.filename=/config.yml
-      - --entrypoints.web.address=:80
-      - --entrypoints.websecure.address=:443
-      # Set up LetsEncrypt
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
-      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
-      - --certificatesresolvers.letsencrypt.acme.email=mikeconrad@onmail.com
-      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
-      - --entryPoints.web.http.redirections.entryPoint.to=websecure
-      - --entryPoints.web.http.redirections.entryPoint.scheme=https
-      - --entryPoints.web.http.redirections.entrypoint.permanent=true
-      - --log=true
-      - --log.level=INFO
-#      - '--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'
-
-    environment:
-      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
-    ports:
-      # The HTTP port
-      - "80:80"
-      - "443:443"
-      # The Web UI (enabled by --api.insecure=true)
-      - "8080:8080"
-    volumes:
-      # So that Traefik can listen to the Docker events
-      - /var/run/docker.sock:/var/run/docker.sock:ro
-      - ./letsencrypt:/letsencrypt
-      - ./volumes/traefik/logs:/logs
-      - ./traefik/config.yml:/config.yml:ro
-    networks:
-      - traefik
-  ots:
-    image: luzifer/ots
-    container_name: ots
-    restart: always
-    environment:
-      # Optional, see "Customization" in README
-      #CUSTOMIZE: '/etc/ots/customize.yaml'
-      # See README for details
-      REDIS_URL: redis://redis:6379/0
-      # 168h = 1w
-      SECRET_EXPIRY: "604800"
-      # "mem" or "redis" (See README)
-      STORAGE_TYPE: redis
-    depends_on:
-      - redis
-    labels:
-      - traefik.enable=true
-      - traefik.http.routers.ots.rule=Host(`ots.hackanooga.com`)
-      - traefik.http.routers.ots.entrypoints=websecure
-      - traefik.http.routers.ots.tls=true
-      - traefik.http.routers.ots.tls.certresolver=letsencrypt
-    networks:
-      - traefik
-  redis:
-    image: redis:alpine
-    restart: always
-    volumes:
-      - ./redis-data:/data
-    networks:
-      - traefik
-networks:
-  traefik:
-    external: true
-
-
- - - -

Now that we have all of this in place there are a couple more things we need to do on the Cloudflare side:

- - - -

Step 1: Setup wildcard DNS entry

- - - -

This is pretty straightforward. Follow the Cloudflare documentation if you aren’t familiar with setting this up.

- - - -

Step 2: Create API Token

- - - -

This is where the Traefik documentation is a little lacking. I had some issues getting this set up initially but ultimately found this documentation which pointed me in the right direction. In your Cloudflare account you will need to create an API token. Navigate to the dashboard, go to your profile -> API Tokens and create new token. It should have the following permissions:

- - - -
Zone.Zone.Read
-Zone.DNS.Edit
- - - -
- - - -

Also be sure to give it permission to access all zones in your account. Now simply provide that token when starting up the stack and you should be good to go:

- - - -
CF_DNS_API_TOKEN=[redacted] docker compose up -d
-
- - -
-
-
-

In

- - -
-, , , -
-
- - - -
-
- - -
-
- -
- - - - - -
- -
- - - -
- -
-
- - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 deleted file mode 100644 index 53a2ed2..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2 and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 deleted file mode 100644 index 5eae626..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2 and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/js/openpanel.js b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/js/openpanel.js deleted file mode 100644 index 42f91d3..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/assets/js/openpanel.js +++ /dev/null @@ -1,7 +0,0 @@ - window.op = window.op || function (...args) { (window.op.q = window.op.q || []).push(args); }; - window.op('ctor', { - clientId: '894cb0b1-e7e4-4ef2-8f38-a4ba8ef66cb4', - trackScreenViews: true, - trackOutgoingLinks: true, - trackAttributes: true, - }); diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/style.css b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/style.css deleted file mode 100644 index ac45c73..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/themes/bjork/style.css +++ /dev/null @@ -1,352 +0,0 @@ -/* --------------------------------------------------------------------------------------------- - - Theme Name: Björk - Text Domain: bjork - Version: 0.2.3 - Description: Björk is a minimal theme for blogs and personal websites. It features a sticky sidebar menu on desktop for quick and easy navigation, and the clean design puts your content front and center. Björk comes with seven different theme styles to choose from, and over 15 different block patterns that you can use to quickly build unique page layouts. Demo: https://andersnoren.se/themes/bjork/ - Tags: blog, portfolio, grid-layout, one-column, two-columns, custom-background, custom-colors, custom-logo, custom-menu, editor-style, featured-images, sticky-post, threaded-comments, translation-ready, block-styles, wide-blocks, full-site-editing, left-sidebar - Author: Anders Norén - Author URI: https://andersnoren.se - Theme URI: https://andersnoren.se/teman/bjork-wordpress-theme/ - License: GNU General Public License version 2.0 - License URI: http://www.gnu.org/licenses/gpl-2.0.html - Requires PHP: 5.6 - Tested up to: 6.5 - - All files, unless otherwise stated, are released under the GNU General Public License - version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) - -/* --------------------------------------------------------------------------------------------- */ - - -body { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; -} - -a { text-underline-offset: 0.2em; } - -/* Input styles */ - -input, textarea, select, button { - background-color: inherit; - border-radius: 0; - font-family: inherit; - font-size: inherit; - letter-spacing: inherit; - margin: 0; -} - -input, textarea, select { - background-color: var( --wp--preset--color--background ); - border: .1rem solid var( --wp--preset--color--tertiary ); - border-radius: .4rem; - box-sizing: border-box; - color: var( --wp--preset--color--foreground ); - max-width: 100%; - padding: .5em; -} - -label { - font-size: var( --wp--preset--font-size--small ); - font-weight: 500; -} - -/* Editor Post Title */ - -.editor-post-title__input { - text-align: center; -} - -/* Background Padding */ - -h1.has-background, -h2.has-background, -h3.has-background, -h4.has-background, -h5.has-background, -h6.has-background, -p.has-background { - padding: min( 1em, var( --wp--custom--spacing--small ) ); -} - -:where(.wp-block-group.has-background) { - padding: min( 2em, var( --wp--custom--spacing--small ) ); -} - -/* Alignment Styles */ - -@media ( max-width: 780px ) { - .wp-site-blocks > .has-global-padding > .wp-block-columns > .wp-block-column > .wp-block-post-content.has-global-padding > .alignfull { - margin-left: calc(-1 * var(--wp--style--root--padding-left)) !important; - margin-right: calc(-1 * var(--wp--style--root--padding-left)) !important; - width: unset; - } -} - - -/* ------------------------------------------- */ -/* Typography -/* ------------------------------------------- */ - - -.has-huge-font-size, -.has-heading-1-font-size, -.has-heading-2-font-size, -.has-heading-3-font-size, -.has-heading-4-font-size, -.has-heading-5-font-size { - letter-spacing: var( --wp--custom--typography--letter-spacing--heading ); - line-height: var( --wp--custom--typography--line-height--headings--large ); -} - -.has-gigantic-font-size { - letter-spacing: var( --wp--custom--typography--letter-spacing--gigantic ); - line-height: var( --wp--custom--typography--line-height--headings--gigantic ); -} - -.has-medium-font-size { - line-height: var( --wp--custom--typography--line-height--body ); -} - - -/* ------------------------------------------- */ -/* Template Parts -/* ------------------------------------------- */ - - -/* TEMPLATE PART: HEADER */ - -@media ( min-width: 782px ) { - :root:not(.editor-styles-wrapper) .site-header { display: none !important; } -} - -/* TEMPLATE PART: SIDEBAR */ - -.site-sidebar { - display: flex; - flex-direction: column; - min-height: calc( 100vh - ( var( --wp--custom--spacing--outer ) * 2 ) ); -} - -.admin-bar .site-sidebar { - min-height: calc( 100vh - ( var( --wp--custom--spacing--outer ) * 2 ) - var( --wp-admin--admin-bar--height ) ); -} - -.site-sidebar > .wp-block-group.is-vertical { - flex-grow: 1; - justify-content: space-between; -} - -:root:not(.editor-styles-wrapper) .site-sidebar { - position: sticky; - top: var( --wp--custom--spacing--outer ); -} - -@media ( max-width: 781px ) { - :root:not(.editor-styles-wrapper) .site-sidebar-col { display: none !important; } -} - -/* TEMPLATE PART: FOOTER */ - -@media ( max-width: 500px ) { - .theme-credit { display: none !important; } -} - - -/* ------------------------------------------- */ -/* Blocks -/* ------------------------------------------- */ - - -/* Block: Avatar ----------------------------- */ - -.wp-block-avatar img { - display: block; -} - -/* Block: Comments --------------------------- */ - -#cancel-comment-reply-link { - font-weight: 500; - letter-spacing: var(--wp--custom--typography--letter-spacing--body); -} - -/* Block: File ------------------------------- */ - -.wp-block-file { - align-items: center; - display: flex; - justify-content: space-between; -} - -:root .wp-block-file__button:not(:only-child) { - margin-left: var( --wp--custom--spacing--baseline ); -} - -/* Block: Navigation ------------------------- */ - -.wp-block-navigation__responsive-container-close svg { transform: scale( 1.25 ); } -.wp-block-navigation__responsive-container-open svg { transform: scale( 1.5, 1.25 ); } - -/* Block: Pagination ------------------------- */ - -.wp-block-query-pagination-numbers { - display: flex; - gap: .88em; -} - -:root .wp-block-query-pagination-numbers:first-child { - margin: 0 auto; - padding-left: 7.5em; -} - -:root .wp-block-query-pagination-numbers:last-child { - margin: 0 auto; - padding-right: 7.5em; -} - -[class^="wp-block-query-pagination-"][class*="-arrow"] { - color: #fff; - font-weight: 500; - text-align: center; - width: 1.75em; -} - -.wp-block-query-pagination-previous, -.wp-block-query-pagination-next { - position: relative; -} - -.wp-block-query-pagination-previous:before, -.wp-block-query-pagination-next:before { - background-color: currentColor; - border-radius: 50%; - content: ""; - display: block; - position: absolute; - top: calc( 50% - .875em ); - height: 1.75em; - width: 1.75em; -} - -.wp-block-query-pagination-previous:before { left: 0; } -.wp-block-query-pagination-next:before { right: 0; } - -:root .wp-block-query-pagination-previous-arrow { margin-right: .88em; } -:root .wp-block-query-pagination-next-arrow { margin-left: .88em; } - -@media ( max-width: 600px ) { - .wp-block-query-pagination-numbers:not(:only-child) { - display: none; - } -} - -/* Block: Paragraph -------------------------- */ - -.has-drop-cap:not(:focus):first-letter { - border: .2rem solid currentColor; - font-size: 2.75em; - font-weight: var( --wp--custom--typography--font-weight--bold ); - margin: .09em 1rem .5rem 0; - min-width: .6875em; - padding: 0.3em; - text-align: center; -} - -/* Block: Post Comments Form ----------------- */ - -ol.wp-block-comment-template { - margin: 0; -} - -.wp-block-post-comments-form input:not([type=submit]), -.wp-block-post-comments-form textarea { - border-color: var( --wp--preset--color--tertiary ); -} - -.required-field-message, -.comment-notes { - display: none; -} - -.logged-in-as { - color: var( --wp--preset--color--secondary ); -} - -.comment-reply-title { - margin: 0; -} - -/* Block: Post Featured Image ---------------- */ - -.wp-block-post-featured-image img { - border-radius: 8px; -} - -/* Block: Post Navigation -------------------- */ - -.post-navigation-link-previous a:before { content: "← "; } -.post-navigation-link-next a:after { content: " →"; } - -/* Block: Pull Quote ------------------------- */ - -:root .wp-block-pullquote blockquote p { - hanging-punctuation: first; - font-size: inherit; -} - -:root .wp-block-pullquote.has-text-align-left, -:root .wp-block-pullquote.has-text-align-right { - max-width: 100%; -} - -/* Block: Query Pagination ------------------- */ - -.wp-block-query-pagination > .wp-block-query-pagination-next, -.wp-block-query-pagination > .wp-block-query-pagination-numbers, -.wp-block-query-pagination > .wp-block-query-pagination-previous { - margin-bottom: 0; -} - -.wp-block-query-pagination-next:only-child { - margin-left: auto; -} - -/* Block: Separator -------------------------- */ - -:root hr[class*="is-style-bjork-angled-separator"] { - background-color: transparent !important; - background-image: linear-gradient( -45deg, currentColor 25%, transparent 25%, transparent 50%, currentColor 50%, currentColor 75%, transparent 75%, transparent ); - background-size: 5px 5px; - border: none; - height: 10px !important; - max-width: 100%; -} - -:root hr.is-style-bjork-angled-separator-wide { width: 100% !important; } - -/* Block: Search Form ------------------------ */ - -.wp-block-search { - font-size: var( --wp--preset--font-size--small ); -} - -.wp-block-search .wp-block-search__label { - font-weight: inherit; -} - -.wp-block-search__input { - margin: 0; - padding: .75em 1.25em; -} - -.wp-block-search__button-inside .wp-block-search__inside-wrapper, -.wp-block-search__button-inside .wp-block-search__input { - margin: 0; - padding: .375em .5em !important; -} - -.wp-block-search__button { - margin: 0 0 0 .75em; -} \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-300x225.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-300x225.jpg deleted file mode 100644 index b6ebe46..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-300x225.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-768x576.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-768x576.jpg deleted file mode 100644 index 77ffbc4..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min-768x576.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min.jpg deleted file mode 100644 index 0b22c2f..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/avatar-min.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg deleted file mode 100644 index a7f5632..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1024x768.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg deleted file mode 100644 index 9a3923d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-1536x1152.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg deleted file mode 100644 index c3d91db..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-300x225.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg deleted file mode 100644 index 2a9e7ff..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min-768x576.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg deleted file mode 100644 index b5648c0..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/chadev-tile-alt-min.jpg and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-1024x572.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-1024x572.webp deleted file mode 100644 index 8f54748..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-1024x572.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-300x167.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-300x167.webp deleted file mode 100644 index 2c7f891..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-300x167.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-768x429.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-768x429.webp deleted file mode 100644 index b10d33a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min-768x429.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min.webp deleted file mode 100644 index 0de023e..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/create-token-min.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png deleted file mode 100644 index 53a5402..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png deleted file mode 100644 index d3a68d3..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png deleted file mode 100644 index d229f7d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png deleted file mode 100644 index 7da746d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp deleted file mode 100644 index 8e38cd6..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1024x275.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp deleted file mode 100644 index 6602146..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-1536x413.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp deleted file mode 100644 index 23b0a13..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-300x81.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp deleted file mode 100644 index d922bb4..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min-768x206.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min.webp deleted file mode 100644 index 6fade78..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/display-token-dashboard-min.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-300x103.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-300x103.webp deleted file mode 100644 index b59219a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-300x103.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-768x265.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-768x265.webp deleted file mode 100644 index bd7f702..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth-768x265.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth.webp deleted file mode 100644 index 1584e21..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/ente-auth.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp deleted file mode 100644 index bdaf9ea..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1024x513.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp deleted file mode 100644 index db82a25..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-1536x770.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp deleted file mode 100644 index fab5777..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-300x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp deleted file mode 100644 index 75ccb20..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1-768x385.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp deleted file mode 100644 index cf73c6a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-students-1.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp deleted file mode 100644 index 5209379..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1024x514.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp deleted file mode 100644 index 2280399..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-1536x770.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp deleted file mode 100644 index babaa82..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-300x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp deleted file mode 100644 index b3659db..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers-768x385.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp deleted file mode 100644 index d7a7522..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-all-teachers.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp deleted file mode 100644 index 4f38453..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1024x514.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp deleted file mode 100644 index de6c04f..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-1536x770.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp deleted file mode 100644 index 477e8d4..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-300x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp deleted file mode 100644 index b400508..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student-768x385.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student.webp deleted file mode 100644 index 63e8a9b..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-edit-student.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp deleted file mode 100644 index b2c6e6b..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1024x514.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp deleted file mode 100644 index f02239d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-1536x770.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp deleted file mode 100644 index 548d281..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-300x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp deleted file mode 100644 index 4c8b4ae..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home-768x385.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home.webp deleted file mode 100644 index b6655d8..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-home.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp deleted file mode 100644 index dcb65ad..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1024x513.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp deleted file mode 100644 index cb2da7a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-1536x770.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp deleted file mode 100644 index ce4d41c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-300x150.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp deleted file mode 100644 index cf6d1af..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents-768x385.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents.webp deleted file mode 100644 index a772a8a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hilger-portal-parents.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-300x151.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-300x151.webp deleted file mode 100644 index 2048589..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-300x151.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-768x386.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-768x386.webp deleted file mode 100644 index 7e3d5da..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home-768x386.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home.webp deleted file mode 100644 index 7842140..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-home.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp deleted file mode 100644 index 5257b9f..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1024x522.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp deleted file mode 100644 index 6071b71..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-1536x783.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp deleted file mode 100644 index a05d6a5..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-300x153.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp deleted file mode 100644 index 8462ea3..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min-768x391.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min.webp deleted file mode 100644 index 5fde2d4..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hoots-locations-min.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp deleted file mode 100644 index 0a49982..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-1270x2048.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp deleted file mode 100644 index b8b625f..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-186x300.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp deleted file mode 100644 index 7d8555a..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-635x1024.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp deleted file mode 100644 index 38e50c9..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-768x1238.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp deleted file mode 100644 index d5c56ef..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-953x1536.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp deleted file mode 100644 index 39ac2d0..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-home-full-scaled.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png deleted file mode 100644 index 73a0d5d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-126x300.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png deleted file mode 100644 index b2b73ad..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-432x1024.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png deleted file mode 100644 index 4624b36..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-768x1822.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png deleted file mode 100644 index bd96cb4..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page-863x2048.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page.png deleted file mode 100644 index 5b7a453..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-locations-page.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png deleted file mode 100644 index 205a730..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-1100x2048.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png deleted file mode 100644 index b494c3c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-161x300.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png deleted file mode 100644 index 24c9f44..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-550x1024.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png deleted file mode 100644 index ceecd6b..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-768x1430.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png deleted file mode 100644 index 1c41ed6..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page-825x1536.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page.png deleted file mode 100644 index 7b2e0a2..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/hootswings-menu-page.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1024x313.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1024x313.png deleted file mode 100644 index d696514..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1024x313.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1536x469.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1536x469.png deleted file mode 100644 index e7f3284..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-1536x469.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-300x92.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-300x92.png deleted file mode 100644 index a9e654e..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-300x92.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-768x235.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-768x235.png deleted file mode 100644 index db5e4b7..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6-768x235.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6.png deleted file mode 100644 index 3c0ac44..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-6.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1024x437.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1024x437.png deleted file mode 100644 index 202cb58..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1024x437.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1536x655.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1536x655.png deleted file mode 100644 index bb2b836..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-1536x655.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-300x128.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-300x128.png deleted file mode 100644 index 9079db1..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-300x128.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-768x328.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-768x328.png deleted file mode 100644 index f61fb47..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7-768x328.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7.png deleted file mode 100644 index b68b9e5..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-7.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-300x228.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-300x228.png deleted file mode 100644 index 8717f97..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-300x228.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-768x583.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-768x583.png deleted file mode 100644 index b66220d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9-768x583.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9.png deleted file mode 100644 index 37b3b38..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/image-9.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp deleted file mode 100644 index a524793..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-300x103.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp deleted file mode 100644 index 828aac3..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend-768x265.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend.webp deleted file mode 100644 index 8e3577c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/initial-token-frontend.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp deleted file mode 100644 index 34b2c21..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-1024x607.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp deleted file mode 100644 index c92a24d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-300x178.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp deleted file mode 100644 index 3046929..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min-768x455.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min.webp deleted file mode 100644 index 6be269c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-dashboard-min.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-300x239.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-300x239.webp deleted file mode 100644 index 13ddbc9..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-300x239.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-768x612.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-768x612.webp deleted file mode 100644 index f105011..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min-768x612.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min.webp b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min.webp deleted file mode 100644 index 50ffebc..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/keystone-init-min.webp and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/mikeconrad-devops.pdf b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/mikeconrad-devops.pdf deleted file mode 100644 index 0b11343..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/mikeconrad-devops.pdf and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/otp-countdown.mp4 b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/otp-countdown.mp4 deleted file mode 100644 index cd1d380..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/otp-countdown.mp4 and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-300x103.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-300x103.png deleted file mode 100644 index ddf9f5b..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-300x103.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-768x265.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-768x265.png deleted file mode 100644 index 42937ee..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1-768x265.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1.png deleted file mode 100644 index 5791cc8..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/03/token-display-1.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png deleted file mode 100644 index 32e50fe..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1024x233.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png deleted file mode 100644 index 13a1116..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-1536x349.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png deleted file mode 100644 index 6e008fa..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-2048x466.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png deleted file mode 100644 index 92dd0b6..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-300x68.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png deleted file mode 100644 index 9fc8999..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min-768x175.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min.png deleted file mode 100644 index 5a0663c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/04/docker-logo-blue-min.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image-300x86.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image-300x86.png deleted file mode 100644 index 5278c37..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image-300x86.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image.png deleted file mode 100644 index 2d56ce9..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/05/image.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx-300x61.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx-300x61.png deleted file mode 100644 index f95312c..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx-300x61.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx.png deleted file mode 100644 index 51bba47..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/07/nginx.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-1024x320.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-1024x320.png deleted file mode 100644 index b2edb98..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-1024x320.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-300x94.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-300x94.png deleted file mode 100644 index f7e455d..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-300x94.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-768x240.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-768x240.png deleted file mode 100644 index 63fd2ae..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image-768x240.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image.png b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image.png deleted file mode 100644 index 43227cb..0000000 Binary files a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-content/uploads/2024/09/image.png and /dev/null differ diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/cover/style.min.css b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/cover/style.min.css deleted file mode 100644 index 7aacd4c..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/cover/style.min.css +++ /dev/null @@ -1 +0,0 @@ -.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0;z-index:1}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;width:100%;z-index:1}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover__image-background,.wp-block-cover__video-background{z-index:0}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit} \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/image/style.min.css b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/image/style.min.css deleted file mode 100644 index afd6dbc..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/image/style.min.css +++ /dev/null @@ -1 +0,0 @@ -.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,');mask-image:url('data:image/svg+xml;utf8,');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;transition:opacity .2s ease;width:20px;z-index:100}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both;visibility:visible}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}@media (prefers-reduced-motion:no-preference){.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}} \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/style.min.css b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/style.min.css deleted file mode 100644 index d9bb119..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/style.min.css +++ /dev/null @@ -1 +0,0 @@ -.wp-block-navigation{position:relative;--navigation-layout-justification-setting:flex-start;--navigation-layout-direction:row;--navigation-layout-wrap:wrap;--navigation-layout-justify:flex-start;--navigation-layout-align:center}.wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.wp-block-navigation ul,.wp-block-navigation ul li{list-style:none;padding:0}.wp-block-navigation .wp-block-navigation-item{align-items:center;background-color:inherit;display:flex;position:relative}.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{display:none}.wp-block-navigation .wp-block-navigation-item__content{display:block}.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{text-decoration:underline}.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{text-decoration:line-through}.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){text-decoration:none}.wp-block-navigation .wp-block-navigation__submenu-icon{align-self:center;background-color:inherit;border:none;color:currentColor;display:inline-block;font-size:inherit;height:.6em;line-height:0;margin-left:.25em;padding:0;width:.6em}.wp-block-navigation .wp-block-navigation__submenu-icon svg{display:inline-block;stroke:currentColor;height:inherit;margin-top:.075em;width:inherit}.wp-block-navigation.is-vertical{--navigation-layout-direction:column;--navigation-layout-justify:initial;--navigation-layout-align:flex-start}.wp-block-navigation.no-wrap{--navigation-layout-wrap:nowrap}.wp-block-navigation.items-justified-center{--navigation-layout-justification-setting:center;--navigation-layout-justify:center}.wp-block-navigation.items-justified-center.is-vertical{--navigation-layout-align:center}.wp-block-navigation.items-justified-right{--navigation-layout-justification-setting:flex-end;--navigation-layout-justify:flex-end}.wp-block-navigation.items-justified-right.is-vertical{--navigation-layout-align:flex-end}.wp-block-navigation.items-justified-space-between{--navigation-layout-justification-setting:space-between;--navigation-layout-justify:space-between}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{align-items:normal;background-color:inherit;color:inherit;display:flex;flex-direction:column;height:0;left:-1px;opacity:0;overflow:hidden;position:absolute;top:100%;transition:opacity .1s linear;visibility:hidden;width:0;z-index:2}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{display:flex;flex-grow:1}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{margin-left:auto;margin-right:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{margin:0}@media (min-width:782px){.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:-1px}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;position:absolute;right:100%;width:.5em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{margin-right:.25em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{transform:rotate(-90deg)}}.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{left:0;top:100%}@media (min-width:782px){.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:0}}.wp-block-navigation-submenu{display:flex;position:relative}.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{stroke:currentColor}button.wp-block-navigation-item__content{background-color:initial;border:none;color:currentColor;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-align:left;text-transform:inherit}.wp-block-navigation-submenu__toggle{cursor:pointer}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{padding-left:0;padding-right:.85em}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{margin-left:-.6em;pointer-events:none}.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){padding:0}.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{gap:inherit}:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){padding:.5em 1em}:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){padding:.5em 1em}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{left:auto;right:0}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:-1px;right:-1px}@media (min-width:782px){.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:auto;right:100%}}.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{background-color:#fff;border:1px solid #00000026}.wp-block-navigation.has-background .wp-block-navigation__submenu-container{background-color:inherit}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{color:#000}.wp-block-navigation__container{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial);list-style:none;margin:0;padding-left:0}.wp-block-navigation__container .is-responsive{display:none}.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{flex-grow:1}@keyframes overlay-menu__fade-in-animation{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.wp-block-navigation__responsive-container{bottom:0;display:none;left:0;position:fixed;right:0;top:0}.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){color:inherit}.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){background-color:inherit!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open{animation:overlay-menu__fade-in-animation .1s ease-out;animation-fill-mode:forwards;background-color:inherit;display:flex;flex-direction:column;overflow:auto;padding:clamp(1rem,var(--wp--style--root--padding-top),20rem) clamp(1rem,var(--wp--style--root--padding-right),20rem) clamp(1rem,var(--wp--style--root--padding-bottom),20rem) clamp(1rem,var(--wp--style--root--padding-left),20em);z-index:100000}@media (prefers-reduced-motion:reduce){.wp-block-navigation__responsive-container.is-menu-open{animation-delay:0s;animation-duration:1ms}}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-justification-setting,inherit);display:flex;flex-direction:column;flex-wrap:nowrap;overflow:visible;padding-top:calc(2rem + 24px)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{justify-content:flex-start}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{border:none;height:auto;min-width:200px;opacity:1;overflow:initial;padding-left:2rem;padding-right:2rem;position:static;visibility:visible;width:auto}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{gap:inherit}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{padding-top:var(--wp--style--block-gap,2em)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{padding:0}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{align-items:var(--navigation-layout-justification-setting,initial);display:flex;flex-direction:column}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{background:#0000!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:auto;right:auto}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){background-color:inherit;display:block;position:relative;width:100%;z-index:auto}.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:0}}.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{background-color:#fff}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{color:#000}.wp-block-navigation__toggle_button_label{font-size:1rem;font-weight:700}.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{background:#0000;border:none;color:currentColor;cursor:pointer;margin:0;padding:0;text-transform:inherit;vertical-align:middle}.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{fill:currentColor;display:block;height:24px;pointer-events:none;width:24px}.wp-block-navigation__responsive-container-open{display:flex}.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:600px){.wp-block-navigation__responsive-container-open:not(.always-shown){display:none}}.wp-block-navigation__responsive-container-close{position:absolute;right:0;top:0;z-index:2}.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{font-family:inherit;font-size:inherit;font-weight:inherit}.wp-block-navigation__responsive-close{width:100%}.has-modal-open .wp-block-navigation__responsive-close{margin-left:auto;margin-right:auto;max-width:var(--wp--style--global--wide-size,100%)}.wp-block-navigation__responsive-close:focus{outline:none}.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{box-sizing:border-box}.wp-block-navigation__responsive-dialog{position:relative}.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:46px}@media (min-width:782px){.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:32px}}html.has-modal-open{overflow:hidden} \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/view.min.js b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/view.min.js deleted file mode 100644 index 1de9f7a..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/navigation/view.min.js +++ /dev/null @@ -1 +0,0 @@ -import*as e from"@wordpress/interactivity";var t={d:(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const n=(e=>{var n={};return t.d(n,e),n})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store}),o=["a[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];document.addEventListener("click",(()=>{}));const{state:l,actions:c}=(0,n.store)("core/navigation",{state:{get roleAttribute(){return"overlay"===(0,n.getContext)().type&&l.isMenuOpen?"dialog":null},get ariaModal(){return"overlay"===(0,n.getContext)().type&&l.isMenuOpen?"true":null},get ariaLabel(){const e=(0,n.getContext)();return"overlay"===e.type&&l.isMenuOpen?e.ariaLabel:null},get isMenuOpen(){return Object.values(l.menuOpenedBy).filter(Boolean).length>0},get menuOpenedBy(){const e=(0,n.getContext)();return"overlay"===e.type?e.overlayOpenedBy:e.submenuOpenedBy}},actions:{openMenuOnHover(){const{type:e,overlayOpenedBy:t}=(0,n.getContext)();"submenu"===e&&0===Object.values(t||{}).filter(Boolean).length&&c.openMenu("hover")},closeMenuOnHover(){const{type:e,overlayOpenedBy:t}=(0,n.getContext)();"submenu"===e&&0===Object.values(t||{}).filter(Boolean).length&&c.closeMenu("hover")},openMenuOnClick(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();e.previousFocus=t,c.openMenu("click")},closeMenuOnClick(){c.closeMenu("click"),c.closeMenu("focus")},openMenuOnFocus(){c.openMenu("focus")},toggleMenuOnClick(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();window.document.activeElement!==t&&t.focus();const{menuOpenedBy:o}=l;o.click||o.focus?(c.closeMenu("click"),c.closeMenu("focus")):(e.previousFocus=t,c.openMenu("click"))},handleMenuKeydown(e){const{type:t,firstFocusableElement:o,lastFocusableElement:u}=(0,n.getContext)();if(l.menuOpenedBy.click){if("Escape"===e?.key)return c.closeMenu("click"),void c.closeMenu("focus");"overlay"===t&&"Tab"===e.key&&(e.shiftKey&&window.document.activeElement===o?(e.preventDefault(),u.focus()):e.shiftKey||window.document.activeElement!==u||(e.preventDefault(),o.focus()))}},handleMenuFocusout(e){const{modal:t,type:o}=(0,n.getContext)();(null===e.relatedTarget||!t?.contains(e.relatedTarget)&&e.target!==window.document.activeElement&&"submenu"===o)&&(c.closeMenu("click"),c.closeMenu("focus"))},openMenu(e="click"){const{type:t}=(0,n.getContext)();l.menuOpenedBy[e]=!0,"overlay"===t&&document.documentElement.classList.add("has-modal-open")},closeMenu(e="click"){const t=(0,n.getContext)();l.menuOpenedBy[e]=!1,l.isMenuOpen||(t.modal?.contains(window.document.activeElement)&&t.previousFocus?.focus(),t.modal=null,t.previousFocus=null,"overlay"===t.type&&document.documentElement.classList.remove("has-modal-open"))}},callbacks:{initMenu(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();if(l.isMenuOpen){const n=t.querySelectorAll(o);e.modal=t,e.firstFocusableElement=n[0],e.lastFocusableElement=n[n.length-1]}},focusFirstElement(){const{ref:e}=(0,n.getElement)();if(l.isMenuOpen){const t=e.querySelectorAll(o);t?.[0]?.focus()}}}},{lock:!0}); \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/social-links/style.min.css b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/social-links/style.min.css deleted file mode 100644 index cb9548f..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/blocks/social-links/style.min.css +++ /dev/null @@ -1 +0,0 @@ -.wp-block-social-links{background:none;box-sizing:border-box;margin-left:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block;height:auto;transition:transform .1s ease}@media (prefers-reduced-motion:reduce){.wp-block-social-link{transition-delay:0s;transition-duration:0s}}.wp-block-social-link a{align-items:center;display:flex;line-height:0;transition:transform .1s ease}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{color:currentColor;fill:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#1778f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{background-color:#fefc00;color:#fff;stroke:#000}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#1778f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{color:#fff;stroke:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:root :where(.wp-block-social-links .wp-social-link a){padding:.25em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.66667em;padding-right:.66667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000} \ No newline at end of file diff --git a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/comment-reply.min.js b/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/comment-reply.min.js deleted file mode 100644 index ff42ec6..0000000 --- a/static/wp-content/uploads/simply-static/temp-files/simply-static-1-1728840186/wp-includes/js/comment-reply.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! This file is auto-generated */ -window.addComment=function(v){var I,C,h,E=v.document,b={commentReplyClass:"comment-reply-link",commentReplyTitleId:"reply-title",cancelReplyId:"cancel-comment-reply-link",commentFormId:"commentform",temporaryFormId:"wp-temp-form-div",parentIdFieldId:"comment_parent",postIdFieldId:"comment_post_ID"},e=v.MutationObserver||v.WebKitMutationObserver||v.MozMutationObserver,r="querySelector"in E&&"addEventListener"in v,n=!!E.documentElement.dataset;function t(){d(),e&&new e(o).observe(E.body,{childList:!0,subtree:!0})}function d(e){if(r&&(I=g(b.cancelReplyId),C=g(b.commentFormId),I)){I.addEventListener("touchstart",l),I.addEventListener("click",l);function t(e){if((e.metaKey||e.ctrlKey)&&13===e.keyCode)return C.removeEventListener("keydown",t),e.preventDefault(),C.submit.click(),!1}C&&C.addEventListener("keydown",t);for(var n,d=function(e){var t=b.commentReplyClass;e&&e.childNodes||(e=E);e=E.getElementsByClassName?e.getElementsByClassName(t):e.querySelectorAll("."+t);return e}(e),o=0,i=d.length;o{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{zj:()=>we,SD:()=>je,V6:()=>He,jb:()=>Tn,yT:()=>Ke,M_:()=>ke,hb:()=>en,vJ:()=>Ze,ip:()=>Ye,Nf:()=>tn,Kr:()=>nn,li:()=>_t,J0:()=>it,FH:()=>Xe,v4:()=>Qe});var n,r,o,i,s,u,_,c,a,l,f,p,h={},d=[],v=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function g(t,e){for(var n in e)t[n]=e[n];return t}function m(t){var e=t.parentNode;e&&e.removeChild(t)}function w(t,e,r){var o,i,s,u={};for(s in e)"key"==s?o=e[s]:"ref"==s?i=e[s]:u[s]=e[s];if(arguments.length>2&&(u.children=arguments.length>3?n.call(arguments,2):r),"function"==typeof t&&null!=t.defaultProps)for(s in t.defaultProps)void 0===u[s]&&(u[s]=t.defaultProps[s]);return b(t,u,o,i,null)}function b(t,e,n,i,s){var u={type:t,props:e,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==s?++o:s,__i:-1,__u:0};return null==s&&null!=r.vnode&&r.vnode(u),u}function k(t){return t.children}function x(t,e){this.props=t,this.context=e}function S(t,e){if(null==e)return t.__?S(t.__,t.__i+1):null;for(var n;ee&&s.sort(c));C.__r=0}function $(t,e,n,r,o,i,s,u,_,c,a){var l,f,p,v,y,g=r&&r.__k||d,m=e.length;for(n.__d=_,M(n,e,g),_=n.__d,l=0;l0?b(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o)?(o.__=t,o.__b=t.__b+1,u=N(o,n,s,a),o.__i=u,i=null,-1!==u&&(a--,(i=n[u])&&(i.__u|=131072)),null==i||null===i.__v?(-1==u&&l--,"function"!=typeof o.type&&(o.__u|=65536)):u!==s&&(u===s+1?l++:u>s?a>_-s?l+=u-s:l--:u(null!=_&&0==(131072&_.__u)?1:0))for(;s>=0||u=0){if((_=e[s])&&0==(131072&_.__u)&&o==_.key&&i===_.type)return s;s--}if(u2&&(_.children=arguments.length>3?n.call(arguments,2):r),b(t.type,_,o||t.key,i||t.ref,null)}n=d.slice,r={__e:function(t,e,n,r){for(var o,i,s;e=e.__;)if((o=e.__c)&&!o.__)try{if((i=o.constructor)&&null!=i.getDerivedStateFromError&&(o.setState(i.getDerivedStateFromError(t)),s=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(t,r||{}),s=o.__d),s)return o.__E=o}catch(e){t=e}throw t}},o=0,i=function(t){return null!=t&&null==t.constructor},x.prototype.setState=function(t,e){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=g({},this.state),"function"==typeof t&&(t=t(g({},n),this.props)),t&&g(n,t),null!=t&&this.__v&&(e&&this._sb.push(e),P(this))},x.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),P(this))},x.prototype.render=k,s=[],_="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(t,e){return t.__v.__b-e.__v.__b},C.__r=0,a=0,l=H(!1),f=H(!0),p=0;var B,z,J,q,K=0,G=[],Q=[],X=r,Y=X.__b,Z=X.__r,tt=X.diffed,et=X.__c,nt=X.unmount,rt=X.__;function ot(t,e){X.__h&&X.__h(z,t,K||e),K=0;var n=z.__H||(z.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({__V:Q}),n.__[t]}function it(t){return K=1,function(t,e,n){var r=ot(B++,2);if(r.t=t,!r.__c&&(r.__=[n?n(e):gt(void 0,e),function(t){var e=r.__N?r.__N[0]:r.__[0],n=r.t(e,t);e!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=z,!z.u)){var o=function(t,e,n){if(!r.__c.__H)return!0;var o=r.__c.__H.__.filter((function(t){return!!t.__c}));if(o.every((function(t){return!t.__N})))return!i||i.call(this,t,e,n);var s=!1;return o.forEach((function(t){if(t.__N){var e=t.__[0];t.__=t.__N,t.__N=void 0,e!==t.__[0]&&(s=!0)}})),!(!s&&r.__c.props===t)&&(!i||i.call(this,t,e,n))};z.u=!0;var i=z.shouldComponentUpdate,s=z.componentWillUpdate;z.componentWillUpdate=function(t,e,n){if(this.__e){var r=i;i=void 0,o(t,e,n),i=r}s&&s.call(this,t,e,n)},z.shouldComponentUpdate=o}return r.__N||r.__}(gt,t)}function st(t,e){var n=ot(B++,3);!X.__s&&yt(n.__H,e)&&(n.__=t,n.i=e,z.__H.__h.push(n))}function ut(t,e){var n=ot(B++,4);!X.__s&&yt(n.__H,e)&&(n.__=t,n.i=e,z.__h.push(n))}function _t(t){return K=5,ct((function(){return{current:t}}),[])}function ct(t,e){var n=ot(B++,7);return yt(n.__H,e)?(n.__V=t(),n.i=e,n.__h=t,n.__V):n.__}function at(t,e){return K=8,ct((function(){return t}),e)}function lt(t){var e=z.context[t.__c],n=ot(B++,9);return n.c=t,e?(null==n.__&&(n.__=!0,e.sub(z)),e.props.value):t.__}function ft(){for(var t;t=G.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(dt),t.__H.__h.forEach(vt),t.__H.__h=[]}catch(e){t.__H.__h=[],X.__e(e,t.__v)}}X.__b=function(t){z=null,Y&&Y(t)},X.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),rt&&rt(t,e)},X.__r=function(t){Z&&Z(t),B=0;var e=(z=t.__c).__H;e&&(J===z?(e.__h=[],z.__h=[],e.__.forEach((function(t){t.__N&&(t.__=t.__N),t.__V=Q,t.__N=t.i=void 0}))):(e.__h.forEach(dt),e.__h.forEach(vt),e.__h=[],B=0)),J=z},X.diffed=function(t){tt&&tt(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(1!==G.push(e)&&q===X.requestAnimationFrame||((q=X.requestAnimationFrame)||ht)(ft)),e.__H.__.forEach((function(t){t.i&&(t.__H=t.i),t.__V!==Q&&(t.__=t.__V),t.i=void 0,t.__V=Q}))),J=z=null},X.__c=function(t,e){e.some((function(t){try{t.__h.forEach(dt),t.__h=t.__h.filter((function(t){return!t.__||vt(t)}))}catch(n){e.some((function(t){t.__h&&(t.__h=[])})),e=[],X.__e(n,t.__v)}})),et&&et(t,e)},X.unmount=function(t){nt&&nt(t);var e,n=t.__c;n&&n.__H&&(n.__H.__.forEach((function(t){try{dt(t)}catch(t){e=t}})),n.__H=void 0,e&&X.__e(e,n.__v))};var pt="function"==typeof requestAnimationFrame;function ht(t){var e,n=function(){clearTimeout(r),pt&&cancelAnimationFrame(e),setTimeout(t)},r=setTimeout(n,100);pt&&(e=requestAnimationFrame(n))}function dt(t){var e=z,n=t.__c;"function"==typeof n&&(t.__c=void 0,n()),z=e}function vt(t){var e=z;t.__c=t.__(),z=e}function yt(t,e){return!t||t.length!==e.length||e.some((function(e,n){return e!==t[n]}))}function gt(t,e){return"function"==typeof e?e(t):e}var mt=Symbol.for("preact-signals");function wt(){if(Et>1)Et--;else{for(var t,e=!1;void 0!==St;){var n=St;for(St=void 0,Pt++;void 0!==n;){var r=n.o;if(n.o=void 0,n.f&=-3,!(8&n.f)&&Nt(n))try{n.c()}catch(n){e||(t=n,e=!0)}n=r}}if(Pt=0,Et--,e)throw t}}function bt(t){if(Et>0)return t();Et++;try{return t()}finally{wt()}}var kt=void 0;var xt,St=void 0,Et=0,Pt=0,Ct=0;function $t(t){if(void 0!==kt){var e=t.n;if(void 0===e||e.t!==kt)return e={i:0,S:t,p:kt.s,n:void 0,t:kt,e:void 0,x:void 0,r:e},void 0!==kt.s&&(kt.s.n=e),kt.s=e,t.n=e,32&kt.f&&t.S(e),e;if(-1===e.i)return e.i=0,void 0!==e.n&&(e.n.p=e.p,void 0!==e.p&&(e.p.n=e.n),e.p=kt.s,e.n=void 0,kt.s.n=e,kt.s=e),e}}function Mt(t){this.v=t,this.i=0,this.n=void 0,this.t=void 0}function Ot(t){return new Mt(t)}function Nt(t){for(var e=t.s;void 0!==e;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}function Tt(t){for(var e=t.s;void 0!==e;e=e.n){var n=e.S.n;if(void 0!==n&&(e.r=n),e.S.n=e,e.i=-1,void 0===e.n){t.s=e;break}}}function jt(t){for(var e=t.s,n=void 0;void 0!==e;){var r=e.p;-1===e.i?(e.S.U(e),void 0!==r&&(r.n=e.n),void 0!==e.n&&(e.n.p=r)):n=e,e.S.n=e.r,void 0!==e.r&&(e.r=void 0),e=r}t.s=n}function Ht(t){Mt.call(this,void 0),this.x=t,this.s=void 0,this.g=Ct-1,this.f=4}function Ut(t){return new Ht(t)}function Wt(t){var e=t.u;if(t.u=void 0,"function"==typeof e){Et++;var n=kt;kt=void 0;try{e()}catch(e){throw t.f&=-2,t.f|=8,Lt(t),e}finally{kt=n,wt()}}}function Lt(t){for(var e=t.s;void 0!==e;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,Wt(t)}function At(t){if(kt!==this)throw new Error("Out-of-order effect");jt(this),kt=t,this.f&=-2,8&this.f&&Lt(this),wt()}function Ft(t){this.x=t,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32}function Rt(t){var e=new Ft(t);try{e.c()}catch(t){throw e.d(),t}return e.d.bind(e)}function Dt(t,e){r[t]=e.bind(null,r[t]||function(){})}function It(t){xt&&xt(),xt=t&&t.S()}function Vt(t){var e=this,n=t.data,r=function(t){return ct((function(){return Ot(t)}),[])}(n);r.value=n;var o=ct((function(){for(var t=e.__v;t=t.__;)if(t.__c){t.__c.__$f|=4;break}return e.__$u.c=function(){var t;i(o.peek())||3!==(null==(t=e.base)?void 0:t.nodeType)?(e.__$f|=1,e.setState({})):e.base.data=o.peek()},Ut((function(){var t=r.value.value;return 0===t?0:!0===t?"":t||""}))}),[]);return o.value}function Bt(t,e,n,r){var o=e in t&&void 0===t.ownerSVGElement,i=Ot(n);return{o:function(t,e){i.value=t,r=e},d:Rt((function(){var n=i.value.value;r[e]!==n&&(r[e]=n,o?t[e]=n:n?t.setAttribute(e,n):t.removeAttribute(e))}))}}Mt.prototype.brand=mt,Mt.prototype.h=function(){return!0},Mt.prototype.S=function(t){this.t!==t&&void 0===t.e&&(t.x=this.t,void 0!==this.t&&(this.t.e=t),this.t=t)},Mt.prototype.U=function(t){if(void 0!==this.t){var e=t.e,n=t.x;void 0!==e&&(e.x=n,t.e=void 0),void 0!==n&&(n.e=e,t.x=void 0),t===this.t&&(this.t=n)}},Mt.prototype.subscribe=function(t){var e=this;return Rt((function(){var n=e.value,r=kt;kt=void 0;try{t(n)}finally{kt=r}}))},Mt.prototype.valueOf=function(){return this.value},Mt.prototype.toString=function(){return this.value+""},Mt.prototype.toJSON=function(){return this.value},Mt.prototype.peek=function(){var t=kt;kt=void 0;try{return this.value}finally{kt=t}},Object.defineProperty(Mt.prototype,"value",{get:function(){var t=$t(this);return void 0!==t&&(t.i=this.i),this.v},set:function(t){if(t!==this.v){if(Pt>100)throw new Error("Cycle detected");this.v=t,this.i++,Ct++,Et++;try{for(var e=this.t;void 0!==e;e=e.x)e.t.N()}finally{wt()}}}}),(Ht.prototype=new Mt).h=function(){if(this.f&=-3,1&this.f)return!1;if(32==(36&this.f))return!0;if(this.f&=-5,this.g===Ct)return!0;if(this.g=Ct,this.f|=1,this.i>0&&!Nt(this))return this.f&=-2,!0;var t=kt;try{Tt(this),kt=this;var e=this.x();(16&this.f||this.v!==e||0===this.i)&&(this.v=e,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return kt=t,jt(this),this.f&=-2,!0},Ht.prototype.S=function(t){if(void 0===this.t){this.f|=36;for(var e=this.s;void 0!==e;e=e.n)e.S.S(e)}Mt.prototype.S.call(this,t)},Ht.prototype.U=function(t){if(void 0!==this.t&&(Mt.prototype.U.call(this,t),void 0===this.t)){this.f&=-33;for(var e=this.s;void 0!==e;e=e.n)e.S.U(e)}},Ht.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;void 0!==t;t=t.x)t.t.N()}},Object.defineProperty(Ht.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var t=$t(this);if(this.h(),void 0!==t&&(t.i=this.i),16&this.f)throw this.v;return this.v}}),Ft.prototype.c=function(){var t=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var e=this.x();"function"==typeof e&&(this.u=e)}finally{t()}},Ft.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,Wt(this),Tt(this),Et++;var t=kt;return kt=this,At.bind(this,t)},Ft.prototype.N=function(){2&this.f||(this.f|=2,this.o=St,St=this)},Ft.prototype.d=function(){this.f|=8,1&this.f||Lt(this)},Vt.displayName="_st",Object.defineProperties(Mt.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:Vt},props:{configurable:!0,get:function(){return{data:this}}},__b:{configurable:!0,value:1}}),Dt("__b",(function(t,e){if("string"==typeof e.type){var n,r=e.props;for(var o in r)if("children"!==o){var i=r[o];i instanceof Mt&&(n||(e.__np=n={}),n[o]=i,r[o]=i.peek())}}t(e)})),Dt("__r",(function(t,e){It();var n,r=e.__c;r&&(r.__$f&=-2,void 0===(n=r.__$u)&&(r.__$u=n=function(t){var e;return Rt((function(){e=this})),e.c=function(){r.__$f|=1,r.setState({})},e}())),r,It(n),t(e)})),Dt("__e",(function(t,e,n,r){It(),void 0,t(e,n,r)})),Dt("diffed",(function(t,e){var n;if(It(),void 0,"string"==typeof e.type&&(n=e.__e)){var r=e.__np,o=e.props;if(r){var i=n.U;if(i)for(var s in i){var u=i[s];void 0===u||s in r||(u.d(),i[s]=void 0)}else n.U=i={};for(var _ in r){var c=i[_],a=r[_];void 0===c?(c=Bt(n,_,a,o),i[_]=c):c.o(a,o)}}}t(e)})),Dt("unmount",(function(t,e){if("string"==typeof e.type){var n=e.__e;if(n){var r=n.U;if(r)for(var o in n.U=void 0,r){var i=r[o];i&&i.d()}}}else{var s=e.__c;if(s){var u=s.__$u;u&&(s.__$u=void 0,u.d())}}t(e)})),Dt("__h",(function(t,e,n,r){(r<3||9===r)&&(e.__$f|=2),t(e,n,r)})),x.prototype.shouldComponentUpdate=function(t,e){var n=this.__$u;if(!(n&&void 0!==n.s||4&this.__$f))return!0;if(3&this.__$f)return!0;for(var r in e)return!0;for(var o in t)if("__source"!==o&&t[o]!==this.props[o])return!0;for(var i in this.props)if(!(i in t))return!0;return!1};var zt=new WeakMap,Jt=new WeakMap,qt=new WeakMap,Kt=new WeakSet,Gt=new WeakMap,Qt=/^\$/,Xt=Object.getOwnPropertyDescriptor,Yt=!1,Zt=function(t){if(!_e(t))throw new Error("This object can't be observed.");return Jt.has(t)||Jt.set(t,ee(t,oe)),Jt.get(t)},te=function(t,e){Yt=!0;var n=t[e];try{Yt=!1}catch(t){}return n};var ee=function(t,e){var n=new Proxy(t,e);return Kt.add(n),n},ne=function(){throw new Error("Don't mutate the signals directly.")},re=function(t){return function(e,n,r){var o;if(Yt)return Reflect.get(e,n,r);var i=t||"$"===n[0];if(!t&&i&&Array.isArray(e)){if("$"===n)return qt.has(e)||qt.set(e,ee(e,ie)),qt.get(e);i="$length"===n}zt.has(r)||zt.set(r,new Map);var s=zt.get(r),u=i?n.replace(Qt,""):n;if(s.has(u)||"function"!=typeof(null==(o=Xt(e,u))?void 0:o.get)){var _=Reflect.get(e,u,r);if(i&&"function"==typeof _)return;if("symbol"==typeof u&&se.has(u))return _;s.has(u)||(_e(_)&&(Jt.has(_)||Jt.set(_,ee(_,oe)),_=Jt.get(_)),s.set(u,Ot(_)))}else s.set(u,Ut((function(){return Reflect.get(e,u,r)})));return i?s.get(u):s.get(u).value}},oe={get:re(!1),set:function(t,e,n,r){var o;if("function"==typeof(null==(o=Xt(t,e))?void 0:o.set))return Reflect.set(t,e,n,r);zt.has(r)||zt.set(r,new Map);var i=zt.get(r);if("$"===e[0]){n instanceof Mt||ne();var s=e.replace(Qt,"");return i.set(s,n),Reflect.set(t,s,n.peek(),r)}var u=n;_e(n)&&(Jt.has(n)||Jt.set(n,ee(n,oe)),u=Jt.get(n));var _=!(e in t),c=Reflect.set(t,e,n,r);return i.has(e)?i.get(e).value=u:i.set(e,Ot(u)),_&&Gt.has(t)&&Gt.get(t).value++,Array.isArray(t)&&i.has("length")&&(i.get("length").value=t.length),c},deleteProperty:function(t,e){"$"===e[0]&&ne();var n=zt.get(Jt.get(t)),r=Reflect.deleteProperty(t,e);return n&&n.has(e)&&(n.get(e).value=void 0),Gt.has(t)&&Gt.get(t).value++,r},ownKeys:function(t){return Gt.has(t)||Gt.set(t,Ot(0)),Gt._=Gt.get(t).value,Reflect.ownKeys(t)}},ie={get:re(!0),set:ne,deleteProperty:ne},se=new Set(Object.getOwnPropertyNames(Symbol).map((function(t){return Symbol[t]})).filter((function(t){return"symbol"==typeof t}))),ue=new Set([Object,Array]),_e=function(t){return"object"==typeof t&&null!==t&&ue.has(t.constructor)&&!Kt.has(t)};const ce=t=>Boolean(t&&"object"==typeof t&&t.constructor===Object),ae=(t,e)=>{if(ce(t)&&ce(e))for(const n in e){const r=Object.getOwnPropertyDescriptor(e,n)?.get;if("function"==typeof r)Object.defineProperty(t,n,{get:r});else if(ce(e[n]))t[n]||(t[n]={}),ae(t[n],e[n]);else try{t[n]=e[n]}catch(t){}}},le=new Map,fe=new Map,pe=new Map,he=new Map,de=new WeakMap,ve=new WeakMap,ye=new WeakMap,ge=(t,e)=>{if(!de.has(t)){const n=new Proxy(t,me);de.set(t,n),ve.set(n,e)}return de.get(t)},me={get:(t,e,n)=>{const r=ve.get(n),o=Object.getOwnPropertyDescriptor(t,e)?.get;if(o){const e=Ue();if(e){const n=ye.get(e)||ye.set(e,new Map).get(e);return n.has(o)||n.set(o,Ut((()=>{Fe(r),We(e);try{return o.call(t)}finally{Le(),Re()}}))),n.get(o).value}}const i=Reflect.get(t,e);if(void 0===i&&n===le.get(r)){const n={};return Reflect.set(t,e,n),ge(n,r)}return"GeneratorFunction"===i?.constructor?.name?async(...t)=>{const e=Ue(),n=i(...t);let o,s;for(;;){Fe(r),We(e);try{s=n.next(o)}finally{Le(),Re()}try{o=await s.value}catch(t){Fe(r),We(e),n.throw(t)}finally{Le(),Re()}if(s.done)break}return o}:"function"==typeof i?(...t)=>{Fe(r);try{return i(...t)}finally{Re()}}:ce(i)?ge(i,r):i},set:(t,e,n)=>Reflect.set(t,e,n)},we=t=>he.get(t||Ae())||{},be="I acknowledge that using a private store means my plugin will inevitably break on the next store release.";function ke(t,{state:e={},...n}={},{lock:r=!1}={}){if(le.has(t)){if(r===be||pe.has(t)){const e=pe.get(t);if(!(r===be||!0!==r&&r===e))throw e?Error("Cannot unlock a private store with an invalid lock code"):Error("Cannot lock a public store")}else pe.set(t,r);const o=fe.get(t);ae(o,n),ae(o.state,e)}else{r!==be&&pe.set(t,r);const o={state:Zt(ce(e)?e:{}),...n},i=new Proxy(o,me);fe.set(t,o),le.set(t,i),ve.set(i,t)}return le.get(t)}const xe=(t=document)=>{var e;const n=null!==(e=t.getElementById("wp-script-module-data-@wordpress/interactivity"))&&void 0!==e?e:t.getElementById("wp-interactivity-data");if(n?.textContent)try{return JSON.parse(n.textContent)}catch{}return{}},Se=t=>{ce(t?.state)&&Object.entries(t.state).forEach((([t,e])=>{ke(t,{state:e},{lock:be})})),ce(t?.config)&&Object.entries(t.config).forEach((([t,e])=>{he.set(t,e)}))},Ee=xe();Se(Ee);const Pe=function(t,e){var n={__c:e="__cC"+p++,__:t,Consumer:function(t,e){return t.children(e)},Provider:function(t){var n,r;return this.getChildContext||(n=[],(r={})[e]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(t){this.props.value!==t.value&&n.some((function(t){t.__e=!0,P(t)}))},this.sub=function(t){n.push(t);var e=t.componentWillUnmount;t.componentWillUnmount=function(){n.splice(n.indexOf(t),1),e&&e.call(t)}}),t.children}};return n.Provider.__=n.Consumer.contextType=n}({}),Ce=new WeakMap,$e=()=>{throw new Error("Please use `data-wp-bind` to modify the attributes of an element.")},Me={get(t,e,n){const r=Reflect.get(t,e,n);return r&&"object"==typeof r?Oe(r):r},set:$e,deleteProperty:$e},Oe=t=>(Ce.has(t)||Ce.set(t,new Proxy(t,Me)),Ce.get(t)),Ne=[],Te=[],je=t=>Ue()?.context[t||Ae()],He=()=>{if(!Ue())throw Error("Cannot call `getElement()` outside getters and actions used by directives.");const{ref:t,attributes:e}=Ue();return Object.freeze({ref:t.current,attributes:Oe(e)})},Ue=()=>Ne.slice(-1)[0],We=t=>{Ne.push(t)},Le=()=>{Ne.pop()},Ae=()=>Te.slice(-1)[0],Fe=t=>{Te.push(t)},Re=()=>{Te.pop()},De={},Ie={},Ve=(t,e,{priority:n=10}={})=>{De[t]=e,Ie[t]=n},Be=({scope:t})=>(e,...n)=>{let{value:r,namespace:o}=e;if("string"!=typeof r)throw new Error("The `value` prop should be a string path");const i="!"===r[0]&&!!(r=r.slice(1));We(t);const s=((t,e)=>{if(!e)return void rn(`Namespace missing for "${t}". The value for that path won't be resolved.`);let n=le.get(e);void 0===n&&(n=ke(e,void 0,{lock:be}));const r={...n,context:Ue().context[e]};try{return t.split(".").reduce(((t,e)=>t[e]),r)}catch(t){}})(r,o),u="function"==typeof s?s(...n):s;return Le(),i?!u:u},ze=({directives:t,priorityLevels:[e,...n],element:r,originalProps:o,previousScope:i})=>{const s=_t({}).current;s.evaluate=at(Be({scope:s}),[]),s.context=lt(Pe),s.ref=i?.ref||_t(null),r=V(r,{ref:s.ref}),s.attributes=r.props;const u=n.length>0?w(ze,{directives:t,priorityLevels:n,element:r,originalProps:o,previousScope:s}):r,_={...o,children:u},c={directives:t,props:_,element:r,context:Pe,evaluate:s.evaluate};We(s);for(const t of e){const e=De[t]?.(c);void 0!==e&&(_.children=e)}return Le(),_.children},Je=r.vnode;r.vnode=t=>{if(t.props.__directives){const e=t.props,n=e.__directives;n.key&&(t.key=n.key.find((({suffix:t})=>"default"===t)).value),delete e.__directives;const r=(t=>{const e=Object.keys(t).reduce(((t,e)=>{if(De[e]){const n=Ie[e];(t[n]=t[n]||[]).push(e)}return t}),{});return Object.entries(e).sort((([t],[e])=>parseInt(t)-parseInt(e))).map((([,t])=>t))})(n);r.length>0&&(t.props={directives:n,priorityLevels:r,originalProps:e,type:t.type,element:w(t.type,e),top:!0},t.type=ze)}Je&&Je(t)};const qe=t=>new Promise((e=>{const n=()=>{clearTimeout(r),window.cancelAnimationFrame(o),setTimeout((()=>{t(),e()}))},r=setTimeout(n,100),o=window.requestAnimationFrame(n)})),Ke=()=>new Promise((t=>{setTimeout(t,0)}));function Ge(t){st((()=>{let e=null,n=!1;return e=function(t,e){let n=()=>{};const r=Rt((function(){return n=this.c.bind(this),this.x=t,this.c=e,t()}));return{flush:n,dispose:r}}(t,(async()=>{e&&!n&&(n=!0,await qe(e.flush),n=!1)})),e.dispose}),[])}function Qe(t){const e=Ue(),n=Ae();return"GeneratorFunction"===t?.constructor?.name?async(...r)=>{const o=t(...r);let i,s;for(;;){Fe(n),We(e);try{s=o.next(i)}finally{Re(),Le()}try{i=await s.value}catch(t){o.throw(t)}if(s.done)break}return i}:(...r)=>{Fe(n),We(e);try{return t(...r)}finally{Re(),Le()}}}function Xe(t){Ge(Qe(t))}function Ye(t){st(Qe(t),[])}function Ze(t,e){st(Qe(t),e)}function tn(t,e){ut(Qe(t),e)}function en(t,e){return at(Qe(t),e)}function nn(t,e){return ct(Qe(t),e)}new Set;const rn=t=>{0},on=new WeakMap,sn=new WeakMap,un=new WeakMap,_n=new WeakMap,cn=t=>Boolean(t&&"object"==typeof t&&t.constructor===Object),an=Reflect.getOwnPropertyDescriptor,ln=(t,e={})=>{if(_n.set(t,e),!sn.has(t)){const e=new Proxy(t,{get:(e,n)=>{const r=_n.get(t),o=e[n];return!(n in e)&&n in r?r[n]:n in e&&!on.get(e)?.has(n)&&cn(te(e,n))?ln(o,r[n]):sn.has(o)?sn.get(o):n in e?o:r[n]},set:(e,n,r)=>{const o=_n.get(t),i=n in e||!(n in o)?e:o;if(r&&"object"==typeof r&&(on.has(i)||on.set(i,new Set),on.get(i).add(n)),un.has(r)){const t=un.get(r);i[n]=t}else i[n]=r;return!0},ownKeys:e=>[...new Set([...Object.keys(_n.get(t)),...Object.keys(e)])],getOwnPropertyDescriptor:(e,n)=>an(e,n)||an(_n.get(t),n)});sn.set(t,e),un.set(e,t)}return sn.get(t)},fn=(t,e)=>{for(const n in e)cn(te(t,n))&&cn(te(e,n))?fn(t[`$${n}`].peek(),e[n]):t[n]=e[n]};function pn(t){return cn(t)?Object.fromEntries(Object.entries(t).map((([t,e])=>[t,pn(e)]))):Array.isArray(t)?t.map((t=>pn(t))):t}const hn=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,dn=/\/\*[^]*?\*\/| +/g,vn=/\n+/g,yn=t=>({directives:e,evaluate:n})=>{e[`on-${t}`].filter((({suffix:t})=>"default"!==t)).forEach((e=>{const r=e.suffix.split("--",1)[0];Ye((()=>{const o=t=>n(e,t),i="window"===t?window:document;return i.addEventListener(r,o),()=>i.removeEventListener(r,o)}))}))},gn=t=>({directives:e,evaluate:n})=>{e[`on-async-${t}`].filter((({suffix:t})=>"default"!==t)).forEach((e=>{const r=e.suffix.split("--",1)[0];Ye((()=>{const o=async t=>{await Ke(),n(e,t)},i="window"===t?window:document;return i.addEventListener(r,o,{passive:!0}),()=>i.removeEventListener(r,o)}))}))},mn=()=>{Ve("context",(({directives:{context:t},props:{children:e},context:n})=>{const{Provider:r}=n,o=lt(n),i=_t(Zt({})),s=t.find((({suffix:t})=>"default"===t));return w(r,{value:ct((()=>{if(s){const{namespace:t,value:e}=s;cn(e)||rn(`The value of data-wp-context in "${t}" store must be a valid stringified JSON object.`),fn(i.current,{[t]:pn(e)})}return ln(i.current,o)}),[s,o])},e)}),{priority:5}),Ve("watch",(({directives:{watch:t},evaluate:e})=>{t.forEach((t=>{Xe((()=>e(t)))}))})),Ve("init",(({directives:{init:t},evaluate:e})=>{t.forEach((t=>{Ye((()=>e(t)))}))})),Ve("on",(({directives:{on:t},element:e,evaluate:n})=>{const r=new Map;t.filter((({suffix:t})=>"default"!==t)).forEach((t=>{const e=t.suffix.split("--")[0];r.has(e)||r.set(e,new Set),r.get(e).add(t)})),r.forEach(((t,r)=>{const o=e.props[`on${r}`];e.props[`on${r}`]=e=>{t.forEach((t=>{o&&o(e),n(t,e)}))}}))})),Ve("on-async",(({directives:{"on-async":t},element:e,evaluate:n})=>{const r=new Map;t.filter((({suffix:t})=>"default"!==t)).forEach((t=>{const e=t.suffix.split("--")[0];r.has(e)||r.set(e,new Set),r.get(e).add(t)})),r.forEach(((t,r)=>{const o=e.props[`on${r}`];e.props[`on${r}`]=e=>{o&&o(e),t.forEach((async t=>{await Ke(),n(t,e)}))}}))})),Ve("on-window",yn("window")),Ve("on-document",yn("document")),Ve("on-async-window",gn("window")),Ve("on-async-document",gn("document")),Ve("class",(({directives:{class:t},element:e,evaluate:n})=>{t.filter((({suffix:t})=>"default"!==t)).forEach((t=>{const r=t.suffix,o=n(t),i=e.props.class||"",s=new RegExp(`(^|\\s)${r}(\\s|$)`,"g");o?s.test(i)||(e.props.class=i?`${i} ${r}`:r):e.props.class=i.replace(s," ").trim(),Ye((()=>{o?e.ref.current.classList.add(r):e.ref.current.classList.remove(r)}))}))})),Ve("style",(({directives:{style:t},element:e,evaluate:n})=>{t.filter((({suffix:t})=>"default"!==t)).forEach((t=>{const r=t.suffix,o=n(t);e.props.style=e.props.style||{},"string"==typeof e.props.style&&(e.props.style=(t=>{const e=[{}];let n,r;for(;n=hn.exec(t.replace(dn,""));)n[4]?e.shift():n[3]?(r=n[3].replace(vn," ").trim(),e.unshift(e[0][r]=e[0][r]||{})):e[0][n[1]]=n[2].replace(vn," ").trim();return e[0]})(e.props.style)),o?e.props.style[r]=o:delete e.props.style[r],Ye((()=>{o?e.ref.current.style[r]=o:e.ref.current.style.removeProperty(r)}))}))})),Ve("bind",(({directives:{bind:t},element:e,evaluate:n})=>{t.filter((({suffix:t})=>"default"!==t)).forEach((t=>{const r=t.suffix,o=n(t);e.props[r]=o,Ye((()=>{const t=e.ref.current;if("style"!==r){if("width"!==r&&"height"!==r&&"href"!==r&&"list"!==r&&"form"!==r&&"tabIndex"!==r&&"download"!==r&&"rowSpan"!==r&&"colSpan"!==r&&"role"!==r&&r in t)try{return void(t[r]=null==o?"":o)}catch(t){}null==o||!1===o&&"-"!==r[4]?t.removeAttribute(r):t.setAttribute(r,o)}else"string"==typeof o&&(t.style.cssText=o)}))}))})),Ve("ignore",(({element:{type:t,props:{innerHTML:e,...n}}})=>w(t,{dangerouslySetInnerHTML:{__html:ct((()=>e),[])},...n}))),Ve("text",(({directives:{text:t},element:e,evaluate:n})=>{const r=t.find((({suffix:t})=>"default"===t));if(r)try{const t=n(r);e.props.children="object"==typeof t?null:t.toString()}catch(t){e.props.children=null}else e.props.children=null})),Ve("run",(({directives:{run:t},evaluate:e})=>{t.forEach((t=>e(t)))})),Ve("each",(({directives:{each:t,"each-key":e},context:n,element:r,evaluate:o})=>{if("template"!==r.type)return;const{Provider:i}=n,s=lt(n),[u]=t,{namespace:_,suffix:c}=u;return o(u).map((t=>{const n="default"===c?"item":c.replace(/^-+|-+$/g,"").toLowerCase().replace(/-([a-z])/g,(function(t,e){return e.toUpperCase()}));const o=Zt({[_]:{}}),u=ln(o,s);u[_][n]=t;const a={...Ue(),context:u},l=e?Be({scope:a})(e[0]):t;return w(i,{value:u,key:l},r.props.content)}))}),{priority:20}),Ve("each-child",(()=>null),{priority:1})},wn="wp",bn=`data-${wn}-ignore`,kn=`data-${wn}-interactive`,xn=`data-${wn}-`,Sn=[],En=new RegExp(`^data-${wn}-([a-z0-9]+(?:-[a-z0-9]+)*)(?:--([a-z0-9_-]+))?$`,"i"),Pn=/^([\w_\/-]+)::(.+)$/,Cn=new WeakSet;function $n(t){const e=document.createTreeWalker(t,205);return function t(n){const{nodeType:r}=n;if(3===r)return[n.data];if(4===r){var o;const t=e.nextSibling();return n.replaceWith(new window.Text(null!==(o=n.nodeValue)&&void 0!==o?o:"")),[n.nodeValue,t]}if(8===r||7===r){const t=e.nextSibling();return n.remove(),[null,t]}const i=n,{attributes:s}=i,u=i.localName,_={},c=[],a=[];let l=!1,f=!1;for(let t=0;t{const o=En.exec(e);if(null===o)return rn(`Found malformed directive name: ${e}.`),t;const i=o[1]||"",s=o[2]||"default";var u;return t[i]=t[i]||[],t[i].push({namespace:null!=n?n:null!==(u=Sn[Sn.length-1])&&void 0!==u?u:null,value:r,suffix:s}),t}),{})),"template"===u)_.content=[...i.content.childNodes].map((t=>$n(t)));else{let n=e.firstChild();if(n){for(;n;){const[r,o]=t(n);r&&c.push(r),n=o||e.nextSibling()}e.parentNode()}}return f&&Sn.pop(),[w(u,_,c)]}(e.currentNode)}const Mn=new WeakMap,On=t=>{if(!t.parentElement)throw Error("The passed region should be an element with a parent.");return Mn.has(t)||Mn.set(t,((t,e)=>{const n=(e=[].concat(e))[e.length-1].nextSibling;function r(e,r){t.insertBefore(e,r||n)}return t.__k={nodeType:1,parentNode:t,firstChild:e[0],childNodes:e,insertBefore:r,appendChild:r,removeChild(e){t.removeChild(e)}}})(t.parentElement,t)),Mn.get(t)},Nn=new WeakMap,Tn=t=>{if("I acknowledge that using private APIs means my theme or plugin will inevitably break in the next version of WordPress."===t)return{directivePrefix:wn,getRegionRootFragment:On,initialVdom:Nn,toVdom:$n,directive:Ve,getNamespace:Ae,h:w,cloneElement:V,render:D,deepSignal:Zt,parseInitialData:xe,populateInitialData:Se,batch:bt};throw new Error("Forbidden access.")};document.addEventListener("DOMContentLoaded",(async()=>{mn(),await(async()=>{const t=document.querySelectorAll(`[data-${wn}-interactive]`);for(const e of t)if(!Cn.has(e)){await Ke();const t=On(e),n=$n(e);Nn.set(e,n),await Ke(),I(n,t)}})()}));var jn=e.zj,Hn=e.SD,Un=e.V6,Wn=e.jb,Ln=e.yT,An=e.M_,Fn=e.hb,Rn=e.vJ,Dn=e.ip,In=e.Nf,Vn=e.Kr,Bn=e.li,zn=e.J0,Jn=e.FH,qn=e.v4;export{jn as getConfig,Hn as getContext,Un as getElement,Wn as privateApis,Ln as splitTask,An as store,Fn as useCallback,Rn as useEffect,Dn as useInit,In as useLayoutEffect,Vn as useMemo,Bn as useRef,zn as useState,Jn as useWatch,qn as withScope}; \ No newline at end of file diff --git a/static/wp-content/uploads/wpforms/.htaccess b/static/wp-content/uploads/wpforms/.htaccess deleted file mode 100644 index 21b9811..0000000 --- a/static/wp-content/uploads/wpforms/.htaccess +++ /dev/null @@ -1,25 +0,0 @@ - -# BEGIN WPForms -# The directives (lines) between "BEGIN WPForms" and "END WPForms" are -# dynamically generated, and should only be modified via WordPress filters. -# Any changes to the directives between these markers will be overwritten. -# Disable PHP and Python scripts parsing. - - SetHandler none - SetHandler default-handler - RemoveHandler .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo - RemoveType .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo - - - php_flag engine off - - - php_flag engine off - - - php_flag engine off - - - Header set X-Robots-Tag "noindex" - -# END WPForms \ No newline at end of file diff --git a/static/wp-content/uploads/wpforms/cache/.htaccess b/static/wp-content/uploads/wpforms/cache/.htaccess deleted file mode 100644 index 81fa1ef..0000000 --- a/static/wp-content/uploads/wpforms/cache/.htaccess +++ /dev/null @@ -1,16 +0,0 @@ - -# BEGIN WPForms -# The directives (lines) between "BEGIN WPForms" and "END WPForms" are -# dynamically generated, and should only be modified via WordPress filters. -# Any changes to the directives between these markers will be overwritten. -# Disable access for any file in the cache dir. -# Apache 2.2 - - Deny from all - - -# Apache 2.4+ - - Require all denied - -# END WPForms \ No newline at end of file diff --git a/static/wp-content/uploads/wpforms/cache/addons.json b/static/wp-content/uploads/wpforms/cache/addons.json deleted file mode 100644 index 963d472..0000000 --- a/static/wp-content/uploads/wpforms/cache/addons.json +++ /dev/null @@ -1 +0,0 @@ -{"wpforms-activecampaign":{"title":"ActiveCampaign Addon","slug":"wpforms-activecampaign","url":"https:\/\/wpforms.com\/addons\/activecampaign-addon\/","version":"1.5.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2020\/03\/addon-icon.png","excerpt":"The WPForms ActiveCampaign addon lets you add contacts to your account, record events, add notes to contacts, and more.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-activecampaign-addon-with-wpforms\/","id":729633,"license":["ultimate","agency","elite"],"category":["providers"],"changelog":["

1.5.0 (2022-09-20)<\/h4>
  • Fixed: Warning notice on form submissions when no ActiveCampaign account was selected.<\/li><\/ul>","

    1.4.0 (2022-06-28)<\/h4>
    • Added: Possibility to use Smart Tags in Notes.<\/li>
    • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
    • Changed: Reorganized locations of 3rd party libraries.<\/li><\/ul>","

      1.3.0 (2022-05-26)<\/h4>
      • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms ActiveCampaign. Failure to do that will disable the new WPForms ActiveCampaign functionality.<\/li>
      • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
      • Changed: Minimum WPForms version supported is 1.7.3.<\/li>
      • Changed: Replaced jQuery.isFunction()<\/code> (deprecated as of jQuery 3.3) usages with a recommended counterpart.<\/li>
      • Fixed: Properly handle the situation when trying to change the template for the same form multiple times.<\/li>
      • Fixed: Send to ActiveCampaign form submission data even when the \"Entry storage\" option is disabled in the Form Builder.<\/li>
      • Fixed: CSS improvements of Add New Event button when a connection with the \"Event Tracking\" action was created.<\/li><\/ul>","

        1.2.1 (2020-08-05)<\/h4>
        • Fixed: API key\/token expiration detection missing.<\/li>
        • Fixed: Properly initialize a template inside the Form Builder addon configuration area for conditional logic.<\/li>
        • Fixed: Allow a simple format of the form \"Name\" field to correctly pass data to ActiveCampaign \"Full Name\" field.<\/li><\/ul>","

          1.2.0 (2020-04-29)<\/h4>
          • Changed: Greatly improved tags management UI.<\/li>
          • Changed: Improved various field labels\/descriptions inside the Form Builder.<\/li>
          • Fixed: Compatibility with WordPress Multisite when WPForms activated Network-wide, and addon - site-wide.<\/li>
          • Fixed: Do not send Event-related ActiveCampaign API requests when there are no required account ID and event key.<\/li><\/ul>","

            1.1.0 (2020-03-16)<\/h4>
            • Added: Process smart tags inside notes to be recorded for each new\/updated contact.<\/li>
            • Changed:\u00a0Increase the number of records returned from ActiveCampaign API from 20 to 100.<\/li><\/ul>","

              1.0.0 (2020-03-03)<\/h4>
              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.7.5"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-activecampaign.png"},"wpforms-authorize-net":{"title":"Authorize.Net Addon","slug":"wpforms-authorize-net","url":"https:\/\/wpforms.com\/addons\/authorize-net-addon\/","version":"1.8.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2020\/05\/icon-provider-authorize-net.png","excerpt":"The WPForms Authorize.Net addon allows you to connect your WordPress site with Authorize.Net to easily collect payments, donations, and online orders.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-authorize-net-addon-with-wpforms\/","id":845517,"license":["elite","ultimate","agency"],"category":["payments"],"changelog":["

                1.8.0 (2023-09-27)<\/h4>
                • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Authorize.Net 1.8.0. Failure to do that will disable WPForms Authorize.Net functionality.<\/li>
                • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Authorize.Net 1.8.0. Failure to do that will disable WPForms Authorize.Net functionality.<\/li>
                • Changed: Minimum WPForms version supported is 1.8.4.<\/li><\/ul>","

                  1.7.0 (2023-08-08)<\/h4>
                  • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                  • Fixed: Card type for payment method was missing on the single Payment page.<\/li>
                  • Fixed: Payment field was not displayed in the Elementor Builder.<\/li><\/ul>","

                    1.6.1 (2023-06-09)<\/h4>
                    • Fixed: There were situations when PHP notices were generated on the Single Payment page.<\/li><\/ul>","

                      1.6.0 (2023-06-08)<\/h4>
                      • Added: Compatibility with WPForms 1.8.2.<\/li>
                      • Changed: Minimum WPForms version supported is 1.8.2.<\/li>
                      • Fixed: Payment error was displayed too close to the Description field.<\/li>
                      • Fixed: JavaScript error occurred when the user was asked to enter verification information for a payment form locked with the Form Locker addon.<\/li><\/ul>","

                        1.5.1 (2023-03-23)<\/h4>
                        • Fixed: There was a styling conflict with PayPal Commerce field preview in the Form Builder.<\/li>
                        • Fixed: Subfield validation error messages were overlapping each other in certain themes.<\/li><\/ul>","

                          1.5.0 (2023-03-21)<\/h4>
                          • Added: Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                          • Fixed: In some cases validation errors were not removed after correcting the values and submitting the form again.<\/li>
                          • Fixed: Local validation error messages overlapped Authorize.Net API error messages.<\/li>
                          • Fixed: Authorize.Net validation error codes are now displayed only in the console.<\/li>
                          • Fixed: On multi-page forms it was possible to continue to the next page even if the field validation failed.<\/li>
                          • Fixed: Expiration and Security Code subfields were too narrow in the Form Builder preview.<\/li><\/ul>","

                            1.4.0 (2022-10-05)<\/h4>
                            • Changed: Show settings in the Form Builder only if they are enabled.<\/li>
                            • Changed: On form preview, display an alert message with an error when payment configurations are missing.<\/li>
                            • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li>
                            • Fixed: The form couldn't be submitted if several configured payment gateways were executed according to Conditional Logic.<\/li>
                            • Fixed: Completed payment email notifications were sent for non-completed payments.<\/li><\/ul>","

                              1.3.0 (2022-06-28)<\/h4>
                              • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
                              • Changed: Reorganized locations of 3rd party libraries.<\/li>
                              • Fixed:\u00a0Compatibility with WordPress Multisite installations.<\/li><\/ul>","

                                1.2.0 (2022-03-16)<\/h4>
                                • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                • Added: Compatibility with WPForms 1.7.3 and Form Revisions.<\/li>
                                • Changed: Updated Authorize.Net PHP SDK to v2.0.2 for PHP 7.4 and PHP 8 support.<\/li>
                                • Changed: Minimum WPForms version supported is 1.6.7.1.<\/li><\/ul>","

                                  1.1.0 (2021-03-31)<\/h4>
                                  • Added: Transaction-specific errors logging to make payment issues identification easier.<\/li>
                                  • Added: Account credentials validation on WPForms Payments settings page.<\/li>
                                  • Added: Optional address field mapping for Authorize.Net accounts requiring customer billing address.<\/li>
                                  • Added: Email Notifications option to limit to completed payments only.<\/li><\/ul>","

                                    1.0.2 (2020-08-06)<\/h4>
                                    • Fixed: Card field can be mistakenly processed as hidden under some conditional logic configurations.<\/li><\/ul>","

                                      1.0.1 (2020-08-05)<\/h4>
                                      • Fixed: Conditionally hidden Authorize.net field should not be processed on form submission.<\/li><\/ul>","

                                        1.0.0 (2020-05-27)<\/h4>
                                        • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":["payments"]},"settings_integrations":{"category":["payment"],"featured":false},"recommended":false,"icon":"addon-icon-authorize-net.png"},"wpforms-aweber":{"title":"AWeber Addon","slug":"wpforms-aweber","url":"https:\/\/wpforms.com\/addons\/aweber-addon\/","version":"2.0.1","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/02\/addon-icon-aweber-1.png","excerpt":"The WPForms AWeber addon allows you to create AWeber newsletter signup forms in WordPress, so you can grow your email list. ","doc":"https:\/\/wpforms.com\/docs\/install-use-aweber-addon-wpforms\/","id":154,"license":["pro","plus","elite","ultimate","agency"],"category":["providers"],"changelog":["

                                          2.0.1 (2023-08-08)<\/h4>
                                          • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                          • Changed: It's no longer possible to create new AWeber (Legacy) OAuth1 account connections.<\/li>
                                          • Fixed: There is no more a fatal error when creating a connection in the Form Builder.<\/li><\/ul>","

                                            2.0.0 (2023-07-06)<\/h4>
                                            • Added: Compatibility with AWeber OAuth2 authentication.<\/li>
                                            • Changed: Minimum WPForms version supported is 1.8.2.2.<\/li><\/ul>","

                                              1.3.2 (2023-07-03)<\/h4>
                                              • Fixed: Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                1.3.1 (2022-08-31)<\/h4>
                                                • Fixed: PHP warnings were generated during attempts to add already connected accounts.<\/li>
                                                • Fixed: Addon used to generate errors when the cURL<\/code> PHP extension was not installed on a server.<\/li><\/ul>","

                                                  1.3.0 (2022-03-16)<\/h4>
                                                  • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                  • Changed: Improved translatable strings escaping.<\/li><\/ul>","

                                                    1.2.0 (2019-07-23)<\/h4>
                                                    • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                      1.1.0 (2019-02-06)<\/h4>
                                                      • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                      • Fixed: Typos, grammar, and other i18n related issues..<\/li><\/ul>","

                                                        1.0.7 (2018-03-15)<\/h4>
                                                        • Fixed: Error when adding account from Settings > Integrations tab.<\/li><\/ul>","

                                                          1.0.6 (2017-03-09)<\/h4>
                                                          • Changed: Adjust display order so that the providers show in alphabetical order<\/li><\/ul>","

                                                            1.0.5 (2017-02-09)<\/h4>
                                                            • Added: Support for tagging<\/li><\/ul>","

                                                              1.0.4 (2016-07-07)<\/h4>
                                                              • Changed: Improved error logging<\/li><\/ul>","

                                                                1.0.3 (2016-06-23)<\/h4>
                                                                • Changed: Prevent plugin from running if WPForms Pro is not activated<\/li><\/ul>","

                                                                  1.0.2 (2016-04-12)<\/h4>
                                                                  • Changed: Improved error logging<\/li><\/ul>","

                                                                    1.0.1 (2016-04-06)<\/h4>
                                                                    • Fixed: Issue with Aweber submission failing without custom fields<\/li><\/ul>","

                                                                      1.0.0 (2016-03-11)<\/h4>
                                                                      • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-aweber.png"},"wpforms-sendinblue":{"title":"Brevo Addon","slug":"wpforms-sendinblue","url":"https:\/\/wpforms.com\/addons\/sendinblue-addon\/","version":"1.3.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2020\/12\/icon-brevo.png","excerpt":"The WPForms Brevo addon helps you organize your leads, automate your marketing, and engage your subscribers.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-sendinblue-addon-with-wpforms\/","id":1126732,"license":["agency","elite","plus","pro","ultimate"],"category":["providers"],"changelog":["

                                                                        1.3.0 (2023-10-24)<\/h4>
                                                                        • IMPORTANT: Updated logo and name to reflect the company's rebranding from Sendinblue to Brevo.<\/li>
                                                                        • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Brevo 1.3.0. Failure to do that will disable WPForms Brevo functionality.<\/li>
                                                                        • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Brevo 1.3.0. Failure to do that will disable WPForms Brevo functionality.<\/li>
                                                                        • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                        • Fixed: Account reconnection was required in WPForms when the first workflow was being setup.<\/li>
                                                                        • Fixed: Double opt-in was not working correctly when multiple connections were configured.<\/li><\/ul>","

                                                                          1.2.0 (2022-10-03)<\/h4>
                                                                          • Added: The Name field now has 4 options: full, first, middle, and last.<\/li>
                                                                          • Fixed: An error occurred in the Form Builder when a user saved Sendinblue configurations with empty fields.<\/li><\/ul>","

                                                                            1.1.0 (2022-08-31)<\/h4>
                                                                            • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms Sendinblue. Failure to do that will disable the new WPForms Sendinblue functionality.<\/li>
                                                                            • Added: New feature: Double Opt-In.<\/li>
                                                                            • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                            • Added: Form data can now be filtered for the track event action using a new wpforms_sendinblue_provider_actions_trackeventaction_get_form_data<\/code> filter.<\/li>
                                                                            • Changed: Minimum WPForms version supported is 1.7.6.<\/li>
                                                                            • Changed: Errors logging was improved.<\/li>
                                                                            • Fixed: The addon was not properly handling the situation when a form template was changed multiple times for the same form.<\/li>
                                                                            • Fixed: Form submission was not sent to Sendinblue when the \"Entry storage\" option was disabled in the form settings.<\/li>
                                                                            • Fixed: List field did not refresh properly.<\/li>
                                                                            • Fixed: Form submission to Sendinblue was failing when non-required fields were empty.<\/li>
                                                                            • Fixed: Mapping a dropdown field to a Sendinblue contact attribute did not work.<\/li>
                                                                            • Fixed: A incorrect account was not properly processed.<\/li><\/ul>","

                                                                              1.0.0 (2020-12-17)<\/h4>
                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-brevo.png"},"wpforms-calculations":{"title":"Calculations Addon","slug":"wpforms-calculations","url":"https:\/\/wpforms.com\/addons\/calculations-addon\/","version":"1.1.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2023\/10\/icon-calculations.png","excerpt":"WPForms Calculations addon lets you create custom calculations for shipping, quotes, lead magnets, and more. Get more sales and leads.","doc":"https:\/\/wpforms.com\/docs\/calculations-addon\/","id":2671501,"license":["elite","pro","ultimate","agency"],"category":["settings"],"changelog":["

                                                                                1.1.0 (2024-01-24)<\/h4>
                                                                                • Added: Improved support and processing for the Single Item field.<\/li>
                                                                                • Added: Compatibility with the upcoming WPForms v1.8.7 release.<\/li>
                                                                                • Changed: Updated PHP-Parser library to 4.18.0.<\/li>
                                                                                • Changed: Updated Luxon library to 3.4.4.<\/li>
                                                                                • Fixed: It was impossible to edit a formula after duplicating the Layout Field with the Calculation Field inside.<\/li>
                                                                                • Fixed: In some cases, the calculated field values were inconsistent between displayed value on the front-end and saved value in the database.<\/li>
                                                                                • Fixed: Calculations were not using correct values when the option \"Show values\" for selectable fields was set.<\/li>
                                                                                • Fixed: Line breaks and other special characters were not preserved in the formula code and in the calculation result.<\/li>
                                                                                • Fixed: The formula validation returned the false positive result in some cases when the form was not saved before validation.<\/li>
                                                                                • Fixed: In some cases, incorrect calculation results were shown in the confirmation message.<\/li>
                                                                                • Fixed: The Validate Formula button AJAX calls failed on the servers that do not support $_SERVER[HTTP_REFERER]<\/code>.<\/li>
                                                                                • Fixed: \"Illegal numeric literal\" error appeared in the error.log when the field value was numeric and started with 0.<\/li>
                                                                                • Fixed: The Error Handler threw the invalid callback error in some rare cases.<\/li>
                                                                                • Fixed: Math functions were throwing a TypeError in some rare cases.<\/li><\/ul>","

                                                                                  1.0.0 (2023-10-24)<\/h4>
                                                                                  • Added:\u00a0Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-calculations.png"},"wpforms-campaign-monitor":{"title":"Campaign Monitor Addon","slug":"wpforms-campaign-monitor","url":"https:\/\/wpforms.com\/addons\/campaign-monitor-addon\/","version":"1.2.3","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/06\/addon-icon-campaign-monitor.png","excerpt":"The WPForms Campaign Monitor addon allows you to create Campaign Monitor newsletter signup forms in WordPress, so you can grow your email list. ","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-campaign-monitor-addon-with-wpforms\/","id":4918,"license":["ultimate","plus","agency","pro","elite"],"category":["providers"],"changelog":["

                                                                                    1.2.3 (2023-07-03)<\/h4>
                                                                                    • Fixed: Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                      1.2.2 (2022-08-30)<\/h4>
                                                                                      • Fixed: PHP Notice was generated when the Full Name field wasn't mapped for a connection.<\/li>
                                                                                      • Fixed: PHP Error was generated when the user tried to connect with empty or invalid API credentials.<\/li><\/ul>","

                                                                                        1.2.1 (2019-08-05)<\/h4>
                                                                                        • Fixed: Forms field mapping with Checkbox field.<\/li><\/ul>","

                                                                                          1.2.0 (2019-07-23)<\/h4>
                                                                                          • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                            1.1.0 (2019-02-06)<\/h4>
                                                                                            • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                            • Fixed: Typos, grammar, and other i18n related issues..<\/li><\/ul>","

                                                                                              1.0.4 (2018-03-15)<\/h4>
                                                                                              • Changed: Improved display order of account fields.<\/li>
                                                                                              • Fixed: Error when adding account from Settings > Integrations tab.<\/li><\/ul>","

                                                                                                1.0.3 (2017-03-09)<\/h4>
                                                                                                • Changed: Adjust display order so that the providers show in alphabetical order<\/li><\/ul>","

                                                                                                  1.0.2<\/h4>
                                                                                                  • Fixed: Improved checking for other Campaign Monitor plugins to avoid conflicts<\/li><\/ul>","

                                                                                                    1.0.1 (2016-07-07)<\/h4>
                                                                                                    • Changed: Improved error logging<\/li><\/ul>","

                                                                                                      1.0.0 (2016-06-16)<\/h4>
                                                                                                      • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.7.3"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-campaign-monitor.png"},"wpforms-conversational-forms":{"title":"Conversational Forms Addon","slug":"wpforms-conversational-forms","url":"https:\/\/wpforms.com\/addons\/conversational-forms-addon\/","version":"1.14.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2019\/02\/addon-conversational-forms.png","excerpt":"Want to improve your form completion rate? Conversational Forms addon by WPForms helps make your web forms feel more human, so you can improve your conversions. Interactive web forms made easy.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-conversational-forms-addon\/","id":391235,"license":["ultimate","agency","pro","elite"],"category":["settings"],"changelog":["

                                                                                                        1.14.0 (2024-02-20)<\/h4>
                                                                                                        • Added: Compatibility with the upcoming WPForms 1.8.7.<\/li>
                                                                                                        • Changed: The minimum WPForms version supported is 1.8.7.<\/li>
                                                                                                        • Fixed: The Form Builder settings screen had visual issues when an RTL language was used.<\/li><\/ul>","

                                                                                                          1.13.0 (2024-01-09)<\/h4>
                                                                                                          • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Conversational Forms 1.13.0. Failure to do that will disable WPForms Conversational Forms functionality.<\/li>
                                                                                                          • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Conversational Forms 1.13.0. Failure to do that will disable WPForms Conversational Forms functionality.<\/li>
                                                                                                          • Changed: Minimum WPForms version supported is 1.8.6.<\/li>
                                                                                                          • Fixed: Compatibility with the Popup Maker plugin.<\/li>
                                                                                                          • Fixed: Compatibility with Link by Stripe.- Improved Rich Text, File Upload and Number fields compatibility with color themes and dark mode.<\/li>
                                                                                                          • Fixed: In rare cases Turnstile Captcha was not displayed correctly when it expired and was refreshed.<\/li>
                                                                                                          • Fixed: Incorrect error text was displayed when uploading a file of an illegal format in the Form Builder.<\/li><\/ul>","

                                                                                                            1.12.0 (2023-08-22)<\/h4>
                                                                                                            • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                            • Fixed: Scrolling to the form error message was not working in some cases.<\/li>
                                                                                                            • Fixed: Some deprecation notices were generated with PHP 8.2.<\/li>
                                                                                                            • Fixed: Dropdowns on tablets and mobiles had 2 down-arrows.<\/li><\/ul>","

                                                                                                              1.11.0 (2023-06-28)<\/h4>
                                                                                                              • Added: Compatibility with the WPForms Coupons addon.<\/li><\/ul>","

                                                                                                                1.10.0 (2023-03-27)<\/h4>
                                                                                                                • Added: Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                • Changed: The Content field did not have instructions to proceed to the next step.<\/li>
                                                                                                                • Changed: Disable automatic scroll to the first field when the form description is larger than the viewport.<\/li>
                                                                                                                • Fixed: The Header Logo preview was not displayed in the Form Builder if the form contains any field with Image Choices turned on.<\/li>
                                                                                                                • Fixed: Fields with Icon or Image choices configured did not apply line breaks to manually forma<\/li>
                                                                                                                • Fixed: Appearance of Likert Scale and Net Promoter Score fields was improved in dark themes.<\/li><\/ul>","

                                                                                                                  1.9.0 (2023-01-03)<\/h4>
                                                                                                                  • Added: Compatibility with Icon Choices feature for Checkboxes, Multiple Choice, Checkbox Items, and Multiple Items payment fields.<\/li>
                                                                                                                  • Fixed: The AJAX spinner was not centered relative to the Submit button.<\/li>
                                                                                                                  • Fixed: Improved compatibility with the Content field.<\/li>
                                                                                                                  • Fixed: Next field wasn't focused after selecting the Likert Scale field option.<\/li>
                                                                                                                  • Fixed: Checkboxes with image labels were displayed enormously big.<\/li>
                                                                                                                  • Fixed: Incorrect positioning if form header contains long-form content.<\/li>
                                                                                                                  • Fixed: Improved handling of line breaks to avoid text overflowing on small screens.<\/li><\/ul>","

                                                                                                                    1.8.0 (2022-10-06)<\/h4>
                                                                                                                    • Changed: Do not allow enabling the Conversational Form mode when a Layout field was added to the list of form fields.<\/li><\/ul>","

                                                                                                                      1.7.1 (2022-08-31)<\/h4>
                                                                                                                      • Fixed: Color Scheme setting value was missing from the color picker's input after the Form Builder page refresh.<\/li>
                                                                                                                      • Fixed: Color picker caused a broken conversational form page.<\/li>
                                                                                                                      • Fixed: Field after radio button or dropdown was not correctly selected.<\/li>
                                                                                                                      • Fixed: Font size for Single Item and Total fields now matches other fields.<\/li>
                                                                                                                      • Fixed: Certain buttons sometimes overlapped the Conversational Forms footer.<\/li>
                                                                                                                      • Fixed: Color schemes compatibility with the Rich Text field was improved.<\/li>
                                                                                                                      • Fixed: The {page_title}<\/code> smart tag was getting the incorrect title.<\/li>
                                                                                                                      • Fixed: Incorrect information was displayed in conversational form social previews.<\/li><\/ul>","

                                                                                                                        1.7.0 (2022-06-28)<\/h4>
                                                                                                                        • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms Conversational Forms. Failure to do that will disable the WPForms Conversational Forms plugin.<\/li>
                                                                                                                        • Added: New filter wpforms_conversational_forms_frontend_handle_request_form_data<\/code> that can be used to improve multi-language support.<\/li>
                                                                                                                        • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
                                                                                                                        • Changed: Reorganized locations of 3rd party libraries.<\/li>
                                                                                                                        • Changed: Date field can be filled in when using the Date Picker with custom date formats.<\/li>
                                                                                                                        • Fixed: Incorrect canonical and og:url<\/code> page meta values produced by the Yoast SEO plugin.<\/li>
                                                                                                                        • Fixed: Users with editor permissions were unable to save Conversational Forms slugs.<\/li>
                                                                                                                        • Fixed: Improved an error message color for the modern file upload field.<\/li>
                                                                                                                        • Fixed: Missing styles for links added to the Conversational Message.<\/li>
                                                                                                                        • Fixed: Conditional logic was processed incorrectly for the Multiple Dropdown field.<\/li>
                                                                                                                        • Fixed: Correctly display a placeholder for the Modern Dropdown field in the Firefox browser.<\/li>
                                                                                                                        • Fixed: Single Dropdown field didn't work on mobile devices.<\/li>
                                                                                                                        • Fixed: Date\/Time field didn't support flatpickr's range<\/code> and multiple<\/code> modes.<\/li>
                                                                                                                        • Fixed: Date\/Time field with 24h format for the timepicker wasn't working properly on mobile devices.<\/li>
                                                                                                                        • Fixed: Form couldn't be submitted when a dropdown date option is selected for the required Date\/Time field and Conditional Logic applied to the field.<\/li>
                                                                                                                        • Fixed: Opening a mobile device's keyboard for text fields removed focus from the field which was closing keyboard.<\/li>
                                                                                                                        • Fixed: Improved compatibility with Entry Preview and Rich Text fields.<\/li><\/ul>","

                                                                                                                          1.6.0 (2021-03-31)<\/h4>
                                                                                                                          • Changed: Visual difference between radio and checkbox elements of Likert Scale field.<\/li>
                                                                                                                          • Changed: \"Next\/Previous\" footer buttons are bigger for small screens.<\/li>
                                                                                                                          • Changed: Radio inputs and select elements look more like traditional HTML elements on mobile.<\/li>
                                                                                                                          • Changed: Improved styling for Authorize.Net and legacy Stripe CC fields on desktop and mobile.<\/li>
                                                                                                                          • Changed: Disable autogenerated the og:description<\/code> meta tag in the Rank Math plugin.<\/li>
                                                                                                                          • Changed: The LikertScale field with a single response per row scrolls to the next row\/field on change.<\/li>
                                                                                                                          • Changed: Radio\/Checkbox field items scroll into view while selecting with arrow keys.<\/li>
                                                                                                                          • Changed: Form Locker UI enhancement when used in conversational mode.<\/li>
                                                                                                                          • Fixed: Compatibility issue with Google v2 reCAPTCHA on certain mobile devices.<\/li>
                                                                                                                          • Fixed: The nav_menu_item<\/code> post type is included in the pool when checking the Conversational Form page slug for uniqueness.<\/li>
                                                                                                                          • Fixed: Textarea and page footer appearance in IE11.<\/li>
                                                                                                                          • Fixed: blockquote<\/code>, ul<\/code>, ol<\/code> elements styling in a form description and a confirmation message.<\/li>
                                                                                                                          • Fixed: Page footer logo appearance in portrait and landscape mobile layouts.<\/li>
                                                                                                                          • Fixed: For the fields without a label, the number indicator is not shown.<\/li>
                                                                                                                          • Fixed: The \"Hide label\" option is not processed for the fields.<\/li>
                                                                                                                          • Fixed: Horizontal line before the Submit button.<\/li>
                                                                                                                          • Fixed: If the checkbox has a label and no options, a long horizontal box appears.<\/li>
                                                                                                                          • Fixed: The Number Slider field appearance.<\/li>
                                                                                                                          • Fixed: Smart Phone field does not display a list of countries when clicking the flag.<\/li>
                                                                                                                          • Fixed: TwentySeventeen and TwentyTwenty themes introduce style conflicts with Conversational Form pages.<\/li>
                                                                                                                          • Fixed: Image Choices field scrolling position is set incorrectly in a rare combination of image\/screen size and field order.<\/li>
                                                                                                                          • Fixed: Date dropdown field processing issue.<\/li>
                                                                                                                          • Fixed: Focusing and positioning for Stripe CC field.<\/li>
                                                                                                                          • Fixed: Dropdown focusing issue on iPhone X and iPhone SE.<\/li>
                                                                                                                          • Fixed: A conditionally hidden field doesn't get focus if triggered to show by a Dropdown field.<\/li>
                                                                                                                          • Fixed: Field sub-Labels do not hide when enabling the \"Hide Sub Label\" option in Advanced Field Settings.<\/li><\/ul>","

                                                                                                                            1.5.0 (2020-08-05)<\/h4>
                                                                                                                            • Added: Show a notice if permalinks are not configured.<\/li>
                                                                                                                            • Added: Easy access to Conversational Forms classes (e.g. wpforms_conversational_forms()->frontend<\/code>).<\/li>
                                                                                                                            • Added: New wpforms_conversational_form_detected<\/code> hook right before Conversational Form hooks are registered.<\/li>
                                                                                                                            • Changed: Page Title tag and meta tags always use Conversational Page Title if set.<\/li>
                                                                                                                            • Changed: oEmbed links are now removed from Conversational Page HTML.<\/li>
                                                                                                                            • Fixed: Occasionally the form scrolls past or does not activate the conditionally appearing field.<\/li><\/ul>","

                                                                                                                              1.4.0 (2020-01-09)<\/h4>
                                                                                                                              • Added: Meta tag 'robots' with filterable noindex,nofollow<\/code> value for all Conversational Forms pages.<\/li>
                                                                                                                              • Fixed: Mobile: Virtual keyboard appearing inconsistently while interacting with the fields which have the sub-fields.<\/li>
                                                                                                                              • Fixed: Popup Maker popup content displays in Conversational Forms.<\/li><\/ul>","

                                                                                                                                1.3.1 (2019-11-07)<\/h4>
                                                                                                                                • Added: Basic compatibility with WPForms modern file uploader.<\/li>
                                                                                                                                • Fixed: \"error404\" body class may appear if the custom permalink structure is used.<\/li>
                                                                                                                                • Fixed: Form preview buttons open two tabs in the Edge browser.<\/li>
                                                                                                                                • Fixed: \"Cannot read property 'addEventListener' of null\" JS error on form creation.<\/li><\/ul>","

                                                                                                                                  1.3.0 (2019-10-14)<\/h4>
                                                                                                                                  • Added: Hexcode option to color picker.<\/li><\/ul>","

                                                                                                                                    1.2.0 (2019-07-24)<\/h4>
                                                                                                                                    • Added: \"Enter or down arrow to go to the next field\" message for HTML, Section Divider, Payment Single and Payment Total blocks.<\/li>
                                                                                                                                    • Changed: Dropdown appearance altered to better mimic a traditional select<\/code> element.<\/li>
                                                                                                                                    • Changed: Sublabel placed closer to the input area that it relates to for better visual perception.<\/li>
                                                                                                                                    • Changed: Dropdown chevron icon click and \"down arrow\" key open a list with all options visible.<\/li>
                                                                                                                                    • Changed: Form scrolls to selected subfields inside multi-input fields for both mobile and desktop.<\/li>
                                                                                                                                    • Changed: Active field is considered completed in footer progress bar calculation.<\/li>
                                                                                                                                    • Fixed: Image choices in a Conversational Form shows two-column layout no matter what the Choice Layout selection is.<\/li>
                                                                                                                                    • Fixed: Conditional logic not working properly on dropdown fields.<\/li>
                                                                                                                                    • Fixed: Conversational forms doesn't accept correct credit card expiration date.<\/li>
                                                                                                                                    • Fixed: Inconsistent percentage progress bar behavior (negative values) with conditionally hidden form fields.<\/li>
                                                                                                                                    • Fixed: Conversational forms won't submit if the field is required and is hidden by conditional logic.<\/li>
                                                                                                                                    • Fixed: Multiline form description is displayed as a single line on a frontend.<\/li>
                                                                                                                                    • Fixed: Some themes override Conversational Form's templates.<\/li><\/ul>","

                                                                                                                                      1.1.0 (2019-02-28)<\/h4>
                                                                                                                                      • Added: Left\/Right arrow navigation support for Checkboxes, Radios, Rating, NetPromoter fields.<\/li>
                                                                                                                                      • Added: Esc for unhighlighting an option previously highlighted by arrow keys in Checkboxes, Radios, Rating, NetPromoter fields.<\/li>
                                                                                                                                      • Added: Space for selecting (same as Enter) options in Checkboxes, Radios, Rating, NetPromoter fields.<\/li>
                                                                                                                                      • Added: Shift+Tab to go to a previous option\/subfield (same as Up Arrow).<\/li>
                                                                                                                                      • Changed: Shift+Enter to go to the next field for Checkboxes (Enter just selects\/unselects checkboxes now).<\/li>
                                                                                                                                      • Changed: Dropdowns (desktop version) are not auto opening on focus now.<\/li>
                                                                                                                                      • Changed: More consistent arrow logic for Checkbox and Radio based fields.<\/li>
                                                                                                                                      • Changed: Mobile-native dropdowns are used for mobile devices now.<\/li>
                                                                                                                                      • Changed: Layout is optimized to use screen space more effectively on smaller screens.<\/li>
                                                                                                                                      • Changed: Tweaked virtual keyboard interaction on mobile devices for better mobile UX.<\/li>
                                                                                                                                      • Changed: Mobile Textarea doesn't have \"new line\" capability now due to mobile UI restrictions.<\/li>
                                                                                                                                      • Changed: Changed tooltip messages in admin area to be more explanatory.<\/li>
                                                                                                                                      • Changed: Changed how mobile\/desktop browsers are detected (mobile-detect.js).<\/li>
                                                                                                                                      • Changed: Footer \"Up\/Down\" buttons iterate through subfields on multi-field inputs now instead of instantly skipping to the next field.<\/li>
                                                                                                                                      • Fixed: Form's last field (conditionally hidden) was getting focus when trying to go up from \"Submit\" block.<\/li>
                                                                                                                                      • Fixed: Rating had no multi-digit keys support (e.g. impossible to select 10).<\/li>
                                                                                                                                      • Fixed: \"Active\" key navigation star was the same color as the selected one in Rating field.<\/li>
                                                                                                                                      • Fixed: Header was overlapping form content on Firefox and Edge browsers.<\/li>
                                                                                                                                      • Fixed: Mobile field focusing issues.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.7"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-conversational-forms.png"},"wpforms-convertkit":{"title":"ConvertKit Addon","slug":"wpforms-convertkit","url":"https:\/\/wpforms.com\/addons\/convertkit-addon\/","version":"1.0.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2023\/12\/icon-provider-convertkit.png","excerpt":"The WPForms ConvertKit addon lets you collect subscribers to grow your mailing list, automate email marketing, and connect with your audience.","doc":"https:\/\/wpforms.com\/docs\/convertkit-addon\/","id":2744716,"license":["elite","pro","ultimate","plus","agency"],"category":["providers"],"changelog":["

                                                                                                                                        1.0.0 (2023-12-13)<\/h4>
                                                                                                                                        • Added: Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.4","wpforms":"1.8.5.3"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-convertkit.png"},"wpforms-coupons":{"title":"Coupons Addon","slug":"wpforms-coupons","url":"https:\/\/wpforms.com\/addons\/coupons-addon\/","version":"1.2.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2023\/06\/icon-coupons.png","excerpt":"The WPForms Coupons addon makes it easy to drive more sales by offering coupon discounts.","doc":"https:\/\/wpforms.com\/docs\/coupons-addon\/","id":2520337,"license":["elite","pro","ultimate","agency"],"category":["payments"],"changelog":["

                                                                                                                                          1.2.0 (2024-02-20)<\/h4>
                                                                                                                                          • Added: Compatibility with the WPForms 1.8.7.<\/li>
                                                                                                                                          • Changed: The minimum WPForms version supported is 1.8.7.<\/li>
                                                                                                                                          • Changed: Added Coupon field to allowed fields for use in wpforms_get_form_fields()<\/code>\u00a0function.<\/li>
                                                                                                                                          • Changed: Improve Coupons page display on mobile devices.<\/li>
                                                                                                                                          • Fixed: Space between Currency and Amount in Coupon field was removed.<\/li>
                                                                                                                                          • Fixed: Various issues in the user interface when an RTL language was used.<\/li><\/ul>","

                                                                                                                                            1.1.0 (2023-09-26)<\/h4>
                                                                                                                                            • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Coupons 1.1.0. Failure to do that will disable WPForms Coupons functionality.<\/li>
                                                                                                                                            • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Coupons 1.1.0. Failure to do that will disable WPForms Coupons functionality.<\/li>
                                                                                                                                            • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                            • Changed: The Coupon field has an improved preview in the Form Builder.<\/li>
                                                                                                                                            • Changed: Front-end validation and the process of applying a coupon has a better UX.<\/li>
                                                                                                                                            • Fixed: Smart Logic was not working when the Coupon field value was used to show\/hide other fields.<\/li>
                                                                                                                                            • Fixed: Show an Allowed Forms error notice if there is no enabled form, only if the coupon is already created.<\/li>
                                                                                                                                            • Fixed: The coupon was not applied when the maximum limit was reached and then increased again.<\/li>
                                                                                                                                            • Fixed: The wpforms_coupons_admin_coupons_edit_date_format<\/code> filter was not changing the date format on the Edit Coupon page.<\/li>
                                                                                                                                            • Fixed: The Coupon field became unavailable in the Form Builder if drag-n-drop action started and stopped.<\/li><\/ul>","

                                                                                                                                              1.0.0 (2023-06-28)<\/h4>
                                                                                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.7"},"form_builder":{"category":["payments"]},"settings_integrations":{"category":["payment"],"featured":false},"recommended":false,"icon":"addon-icon-coupons.png"},"wpforms-captcha":{"title":"Custom Captcha Addon","slug":"wpforms-captcha","url":"https:\/\/wpforms.com\/addons\/custom-captcha-addon\/","version":"1.8.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/08\/addon-icon-captcha.png","excerpt":"The WPForms Custom Captcha addon allows you to define custom questions or use random math questions as captcha to reduce spam form submissions.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-custom-captcha-addon-in-wpforms\/","id":7499,"license":["basic","ultimate","plus","agency","pro","elite"],"category":[],"changelog":["

                                                                                                                                                1.8.0 (2023-08-15)<\/h4>
                                                                                                                                                • Added:\u00a0The Captcha field in the Form Builder can now be searched by name or related keywords.<\/li>
                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.3.<\/li><\/ul>","

                                                                                                                                                  1.7.0 (2023-03-13)<\/h4>
                                                                                                                                                  • Added:\u00a0Compatibility with the upcoming WPForms 1.8.1.<\/li>
                                                                                                                                                  • Fixed:\u00a0Improved compatibility with Elementor popups v3.9+.<\/li><\/ul>","

                                                                                                                                                    1.6.0 (2022-09-21)<\/h4>
                                                                                                                                                    • Added: Custom Captcha's \"Math\" type is now supported and works properly inside Elementor popups.<\/li>
                                                                                                                                                    • Changed: Minimum WPForms version is now 1.7.5.<\/li>
                                                                                                                                                    • Fixed: Empty questions and answers had incorrect validation.<\/li><\/ul>","

                                                                                                                                                      1.5.0 (2022-08-29)<\/h4>
                                                                                                                                                      • Changed: Do not add a second question with an empty question and answer values that were added by default.<\/li>
                                                                                                                                                      • Changed: Empty questions are now removed from the list on form save.<\/li>
                                                                                                                                                      • Fixed: Implemented various fixes to prevent questions with an empty question or answer values from being saved or displayed.<\/li><\/ul>","

                                                                                                                                                        1.4.0 (2022-03-16)<\/h4>
                                                                                                                                                        • Added: Compatibility with WPForms 1.7.1 and displaying the field on the Entry Edit page.<\/li>
                                                                                                                                                        • Added: Compatibility with WPForms 1.7.3 and Form Revisions.<\/li><\/ul>","

                                                                                                                                                          1.3.2 (2021-09-07)<\/h4>
                                                                                                                                                          • Changed: Prevent saving empty values for \"Question and Answer\" Captcha fields.<\/li>
                                                                                                                                                          • Fixed: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                          • Fixed: Incorrect \"Math\" Captcha preview in the Block Editor (Gutenberg).<\/li>
                                                                                                                                                          • Fixed: Incorrect \"Question and Answer\" Captcha preview in Builder.<\/li><\/ul>","

                                                                                                                                                            1.3.1 (2021-03-31)<\/h4>
                                                                                                                                                            • Fixed: Empty Form Builder preview when the \"Questions and Answer\" type has been selected and the first question has been removed.<\/span><\/li>
                                                                                                                                                            • Fixed: \"Questions and Answers\" section may not be displayed for some users in the Form Builder when the \"Questions and Answers\" type has been selected.<\/span><\/li><\/ul>","

                                                                                                                                                              1.3.0 (2019-07-23)<\/h4>
                                                                                                                                                              • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                              • Fixed: `wpforms_math_captcha`<\/code> filter running too early.<\/li><\/ul>","

                                                                                                                                                                1.2.0 (2019-02-06)<\/h4>
                                                                                                                                                                • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                • Fixed: Typos, grammar, and other i18n related issues..<\/li><\/ul>","

                                                                                                                                                                  1.1.2 (2018-12-27)<\/h4>
                                                                                                                                                                  • Changed: Captcha field display priority in the form builder.<\/li><\/ul>","

                                                                                                                                                                    1.1.1 (2018-03-19)<\/h4>
                                                                                                                                                                    • Fixed: JS file not loading on frontend, causing error.<\/li><\/ul>","

                                                                                                                                                                      1.1.0 (2018-03-15)<\/h4>
                                                                                                                                                                      • Changed: Refactored addon and improved code.<\/li>
                                                                                                                                                                      • Fixed: Zero (0) math equation answers not being allowed.<\/li><\/ul>","

                                                                                                                                                                        1.0.3 (2017-06-15)<\/h4>
                                                                                                                                                                        • Fixed: Issue with QA PHP validation<\/li><\/ul>","

                                                                                                                                                                          1.0.2 (2017-06-15)<\/h4>
                                                                                                                                                                          • Fixed: Missing input class causing equation validation issues<\/li><\/ul>","

                                                                                                                                                                            1.0.1 (2017-06-13)<\/h4>
                                                                                                                                                                            • Changed: Updated captcha field to new field class format<\/li><\/ul>","

                                                                                                                                                                              1.0.0 (2016-08-03)<\/h4>
                                                                                                                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":[]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-captcha.png"},"wpforms-drip":{"title":"Drip Addon","slug":"wpforms-drip","url":"https:\/\/wpforms.com\/addons\/drip-addon\/","version":"1.7.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2018\/06\/addon-icon.png","excerpt":"The WPForms Drip addon allows you to create Drip newsletter signup forms in WordPress, so you can grow your email list. ","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-drip-addon-in-wpforms\/","id":209878,"license":["ultimate","agency","pro","elite","plus"],"category":["providers"],"changelog":["

                                                                                                                                                                                1.7.0 (2023-06-14)<\/h4>
                                                                                                                                                                                • Added: Deprecation tooltip for the Lead Scoring feature by Drip.<\/li>
                                                                                                                                                                                • Changed: Checkboxes have been replaced with fancy toggles on the addon settings screen in the Form Builder.<\/li>
                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.2.<\/li><\/ul>","

                                                                                                                                                                                  1.6.0 (2022-10-03)<\/h4>
                                                                                                                                                                                  • Added: GDPR-related data is added to the campaign subscriber meta information.<\/li>
                                                                                                                                                                                  • Fixed: Events were duplicated in the list after adding a new custom event for Drip.<\/li><\/ul>","

                                                                                                                                                                                    1.5.0 (2022-08-29)<\/h4>
                                                                                                                                                                                    • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms Drip and WPForms 1.7.6 (that the addon is relying on). Failure to do that will disable the WPForms Drip plugin.<\/li>
                                                                                                                                                                                    • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms Drip. Failure to do that will disable the new WPForms Drip functionality.<\/li>
                                                                                                                                                                                    • Fixed: Compatibility with WPForms 1.7.3 and below.<\/li>
                                                                                                                                                                                    • Fixed: Compatibility with WordPress Multisite installations.<\/li><\/ul>","

                                                                                                                                                                                      1.4.2 (2020-05-05)<\/h4>
                                                                                                                                                                                      • Fixed: Properly initialize a template inside the Form Builder addon configuration area for conditional logic.<\/li><\/ul>","

                                                                                                                                                                                        1.4.1 (2020-03-03)<\/h4>
                                                                                                                                                                                        • IMPORTANT: Support for PHP 5.4 has been discontinued. If you are running PHP 5.4, you MUST upgrade PHP before installing the new WPForms Drip and WPForms 1.5.9 (that the addon is relying on). Failure to do that will disable the WPForms Drip plugin.<\/li>
                                                                                                                                                                                        • Fixed: Compatibility with WPForms 1.5.9<\/li><\/ul>","

                                                                                                                                                                                          1.4.0 (2020-01-09)<\/h4>
                                                                                                                                                                                          • Added: Send to Drip eu_consent and eu_consent_message values for each subscriber if GDPR is enabled in plugin settings.<\/li>
                                                                                                                                                                                          • Changed: Improved custom field name sanitization according to Drip specifications.<\/li>
                                                                                                                                                                                          • Changed: Display errors in a Drip account addition popup in form Builder > Marketing tab when something went wrong.<\/li>
                                                                                                                                                                                          • Fixed: PHP warnings\/errors that triggered in some use cases.<\/li>
                                                                                                                                                                                          • Fixed: Issue duplicating a form connected to Drip.<\/li>
                                                                                                                                                                                          • Fixed: Field value not passing to Drip if field ID was #0.<\/li><\/ul>","

                                                                                                                                                                                            1.3.0 (2019-07-23)<\/h4>
                                                                                                                                                                                            • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                              1.2.1 (2019-02-22)<\/h4>
                                                                                                                                                                                              • Fixed: Drip API library not properly loading.<\/li><\/ul>","

                                                                                                                                                                                                1.2.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                  1.1.0 (2018-08-28)<\/h4>
                                                                                                                                                                                                  • Added: Ability to add a Drip account from the Form Builder.<\/li>
                                                                                                                                                                                                  • Changed: Lead Score field is now visible only if the Prospect option is checked.<\/li>
                                                                                                                                                                                                  • Changed: Improved settings screen description and helpful texts.<\/li>
                                                                                                                                                                                                  • Fixed: Multiple conditional logic rules now works fine for different Drip connections.<\/li><\/ul>","

                                                                                                                                                                                                    1.0.0 (2018-06-04)<\/h4>
                                                                                                                                                                                                    • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.2"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-drip.png"},"wpforms-form-abandonment":{"title":"Form Abandonment Addon","slug":"wpforms-form-abandonment","url":"https:\/\/wpforms.com\/addons\/form-abandonment-addon\/","version":"1.11.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2017\/02\/addon-icon-form-abandonment.png","excerpt":"Unlock more leads by capturing partial entries from your forms. Easily follow up with interested leads and turn them into loyal customers.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-form-abandonment-with-wpforms\/","id":27685,"license":["agency","pro","elite","ultimate"],"category":["settings"],"changelog":["

                                                                                                                                                                                                      1.11.0 (2024-02-20)<\/h4>
                                                                                                                                                                                                      • Added: Compatibility with the upcoming WPForms 1.8.7.<\/li>
                                                                                                                                                                                                      • Fixed: Address autocomplete was not saved when a user abandoned the form.<\/li><\/ul>","

                                                                                                                                                                                                        1.10.0 (2023-12-11)<\/h4>
                                                                                                                                                                                                        • Fixed: Survey reports contained incorrect data when abandoned entries existed.<\/li><\/ul>","

                                                                                                                                                                                                          1.9.0 (2023-10-24)<\/h4>
                                                                                                                                                                                                          • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Form Abandonment 1.9.0. Failure to do that will disable WPForms Form Abandonment functionality.<\/li>
                                                                                                                                                                                                          • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Form Abandonment 1.9.0. Failure to do that will disable WPForms Form Abandonment functionality.<\/li>
                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.4.<\/li><\/ul>","

                                                                                                                                                                                                            1.8.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                            • Changed:\u00a0Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                            • Fixed: Some Smart tags weren't working in Form Abandonment emails.<\/li>
                                                                                                                                                                                                            • Fixed: Form was not marked as abandoned on mobile devices when changing a browser tab or closing the browser.<\/li>
                                                                                                                                                                                                            • Fixed: Forms now store abandoned entries if more than one email field is preset.<\/li><\/ul>","

                                                                                                                                                                                                              1.7.1 (2023-02-14)<\/h4>
                                                                                                                                                                                                              • Added: WPForms 1.8.0 compatibility.<\/li>
                                                                                                                                                                                                              • Changed: Disable \"Resend Notifications\" link on the Entry page instead of hiding it.<\/li><\/ul>","

                                                                                                                                                                                                                1.7.0 (2022-08-30)<\/h4>
                                                                                                                                                                                                                • Added: New filter to set a time before the Form Abandonment email is sent.<\/li>
                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li>
                                                                                                                                                                                                                • Changed: Check GDPR settings before trying to use a cookie.<\/li>
                                                                                                                                                                                                                • Fixed: Abandoned Entries were saved while ignoring the \"Save Only If Email Address\" setting.<\/li>
                                                                                                                                                                                                                • Fixed: Compatibility with WordPress Multisite installations.<\/li>
                                                                                                                                                                                                                • Fixed: Email notifications were being sent for both abandoned and completed forms instead of only one.<\/li><\/ul>","

                                                                                                                                                                                                                  1.6.0 (2022-03-16)<\/h4>
                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                  • Added: New JavaScript event wpformsFormAbandonmentDataSent<\/code> triggered when successfully sending the abandoned data to be saved.<\/li>
                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.7.3 and its search functionality on the Entries page.<\/li>
                                                                                                                                                                                                                  • Changed: Minimum WPForms version supported is 1.7.3.<\/li>
                                                                                                                                                                                                                  • Changed: Do not store Abandoned Entries and do not send related notifications when Entry storage is disabled.<\/li>
                                                                                                                                                                                                                  • Fixed: Some smart tags are not rendered correctly in the abandonment notifications.<\/li>
                                                                                                                                                                                                                  • Fixed: Abandoned Entries were not saved when a user clicks on any internal link inside the Firefox browser.<\/li><\/ul>","

                                                                                                                                                                                                                    1.5.0 (2021-03-31)<\/h4>
                                                                                                                                                                                                                    • Added: Notification's \"Enable for abandoned forms entries\" option compatibility improvements with payment addons adding own rules whether to send a notification email.<\/li>
                                                                                                                                                                                                                    • Changed: Replaced jQuery.ready()<\/code> function with recommended way since jQuery 3.0.<\/li><\/ul>","

                                                                                                                                                                                                                      1.4.4 (2020-12-17)<\/h4>
                                                                                                                                                                                                                      • Fixed: Form abandonment via external links not always detected on some mobile devices.<\/li><\/ul>","

                                                                                                                                                                                                                        1.4.3 (2020-08-05)<\/h4>
                                                                                                                                                                                                                        • Changed: Password field values are no longer stored by default, can be enabled with wpforms_process_save_password_form_abandonment<\/code> filter.<\/li>
                                                                                                                                                                                                                        • Fixed: Abandoned entries are counting towards entry limits defined via Form Locker addon settings.<\/li>
                                                                                                                                                                                                                        • Fixed: Prevent abandoned entry duplicates creation when 2 AJAX-based forms are present on the same page and only one of them was submitted.<\/li><\/ul>","

                                                                                                                                                                                                                          1.4.2 (2020-06-10)<\/h4>
                                                                                                                                                                                                                          • Fixed: Entry must have the \"completed\" type after its creation through non-ajax form.<\/li><\/ul>","

                                                                                                                                                                                                                            1.4.1 (2020-04-30)<\/h4>
                                                                                                                                                                                                                            • Fixed: Prevent 'Abandoned' (duplicate) entry on successful form submit.<\/li><\/ul>","

                                                                                                                                                                                                                              1.4.0 (2020-01-15)<\/h4>
                                                                                                                                                                                                                              • Changed: Access Controls compatibility (WPForms 1.5.8).<\/li><\/ul>","

                                                                                                                                                                                                                                1.3.0 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                • Added: Tracking closing of the window or tab by listening to the beforeunload<\/code> event.<\/li>
                                                                                                                                                                                                                                • Changed: Do not send duplicate abandonment notifications if 'no duplicates' option is enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                  1.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                  • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                  • Fixed: Form abandonment records only last checkbox field selection.<\/li>
                                                                                                                                                                                                                                  • Fixed: \"Prevent duplicate abandoned entries\" saves duplicate entries.<\/li><\/ul>","

                                                                                                                                                                                                                                    1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                    • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                    • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                      1.0.2 (2018-02-12)<\/h4>
                                                                                                                                                                                                                                      • Fixed: Conflict with email notifications configured with conditional logic causing notifications to send when they should not.<\/li><\/ul>","

                                                                                                                                                                                                                                        1.0.1 (2017-02-01)<\/h4>
                                                                                                                                                                                                                                        • Fixed: Incorrect version in updater which caused WordPress to think an update was available.<\/li><\/ul>","

                                                                                                                                                                                                                                          1.0.0 (2017-02-01)<\/h4>
                                                                                                                                                                                                                                          • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-form-abandonment.png"},"wpforms-form-locker":{"title":"Form Locker Addon","slug":"wpforms-form-locker","url":"https:\/\/wpforms.com\/addons\/form-locker-addon\/","version":"2.7.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2018\/09\/addon-icons-locker.png","excerpt":"The WPForms Form Locker addon allows you to lock your WordPress forms with various permissions and access control rules including passwords, members-only, specific date \/ time, max entry limit, and more.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-form-locker-addon-in-wpforms\/","id":265700,"license":["ultimate","agency","pro","elite"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                            2.7.0 (2023-12-11)<\/h4>
                                                                                                                                                                                                                                            • Changed: Improved frontend validation performance<\/li>
                                                                                                                                                                                                                                            • Fixed: Unique answer restriction now applies only to completed form entries.<\/li>
                                                                                                                                                                                                                                            • Fixed: Form Scheduling Start\/End date and time were not properly validated.<\/li><\/ul>","

                                                                                                                                                                                                                                              2.6.0 (2023-11-08)<\/h4>
                                                                                                                                                                                                                                              • Added: Compatibility with WPForms 1.8.5.<\/li>
                                                                                                                                                                                                                                              • Changed: Minimum WPForms version supported is 1.8.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                2.5.0 (2023-09-27)<\/h4>
                                                                                                                                                                                                                                                • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Form Locker 2.5.0. Failure to do that will disable WPForms Form Locker functionality.<\/li>
                                                                                                                                                                                                                                                • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Form Locker 2.5.0. Failure to do that will disable WPForms Form Locker functionality.<\/li>
                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                                                                                                                                • Changed: Old deprecated wpmu_new_blog<\/code> hook was replaced with the wp_initialize_site<\/code> hook.<\/li>
                                                                                                                                                                                                                                                • Fixed: The form was incorrectly locked when having payment entries.<\/li><\/ul>","

                                                                                                                                                                                                                                                  2.4.0 (2023-03-27)<\/h4>
                                                                                                                                                                                                                                                  • Added:\u00a0Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                  • Fixed:\u00a0Password and Age verification fields were not highlighted on validation failure.<\/li><\/ul>","

                                                                                                                                                                                                                                                    2.3.0 (2023-01-11)<\/h4>
                                                                                                                                                                                                                                                    • Added: Entry Limits & Restrictions now have new \"till the end of the day\/week\/month\/year\" locker options.<\/li>
                                                                                                                                                                                                                                                    • Added: New filter wpforms_locker_lockers_entry_limit_exclude_not_allowed_entries_excluded_statuses<\/code> allows to exclude entry statuses for entry total limit and entry user limit lockers.<\/li>
                                                                                                                                                                                                                                                    • Changed: Error markup for the Password locker was modified according to other fields' errors.<\/li>
                                                                                                                                                                                                                                                    • Changed: A message generated by the Email locker now has the same styles as an entry submission confirmation message.<\/li>
                                                                                                                                                                                                                                                    • Changed: \"per day\/week\/month\/year\" locker options for Entry Limits & Restrictions were renamed to \"per 24 hours\/7 days\/~30 days\/~365 days\".<\/li><\/ul>","

                                                                                                                                                                                                                                                      2.2.0 (2022-08-30)<\/h4>
                                                                                                                                                                                                                                                      • Changed: Improved the look and feel of the messages displayed to users when the form is closed.<\/li>
                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version is now 1.7.6.<\/li>
                                                                                                                                                                                                                                                      • Changed: When the \"Enable user entry limit\" is turned on, selecting one of the associated checkboxes is now required.<\/li>
                                                                                                                                                                                                                                                      • Fixed: Entry limit validation allows negative values to be set.<\/li>
                                                                                                                                                                                                                                                      • Fixed: Next button was not clickable when a name field was empty and the field was non-required, but required a unique answer.<\/li>
                                                                                                                                                                                                                                                      • Fixed: Restrict by email address did not exclude abandoned\/partial entries.<\/li>
                                                                                                                                                                                                                                                      • Fixed: Plugin install did not run properly.<\/li><\/ul>","

                                                                                                                                                                                                                                                        2.1.0 (2022-06-28)<\/h4>
                                                                                                                                                                                                                                                        • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms Form Locker. Failure to do that will disable the WPForms Form Locker plugin.<\/li>
                                                                                                                                                                                                                                                        • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
                                                                                                                                                                                                                                                        • Changed: Reorganized locations of 3rd party libraries.<\/li>
                                                                                                                                                                                                                                                        • Fixed: Restrict by email address didn't work if the Confirmation setting was enabled for the Email field.<\/li>
                                                                                                                                                                                                                                                        • Fixed: Form Scheduling datepickers didn't work if custom formats were set in the WordPress General Settings page.<\/li>
                                                                                                                                                                                                                                                        • Fixed: Smart Phone field that required a unique value didn't get validated.<\/li><\/ul>","

                                                                                                                                                                                                                                                          2.0.3 (2022-02-10)<\/h4>
                                                                                                                                                                                                                                                          • Changed: Improved compatibility with PHP 8.<\/li>
                                                                                                                                                                                                                                                          • Fixed: Correctly handle \"Unique answer\" feature comparisons of strings having special characters.<\/li><\/ul>","

                                                                                                                                                                                                                                                            2.0.2 (2021-09-16)<\/h4>
                                                                                                                                                                                                                                                            • Changed: Properly handle the UI part of the IP-related setting - when IP storage is disabled, do not allow enabling IP-based entry limit.<\/li>
                                                                                                                                                                                                                                                            • Fixed: Do not globally cache all entry submission limits when Entry Limit by IP\/email is enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                                              2.0.1 (2021-09-14)<\/h4>
                                                                                                                                                                                                                                                              • Changed: Adjusted various styles on the Form Builder > Settings > Form Locker screen.<\/li>
                                                                                                                                                                                                                                                              • Fixed: Compatibility with WordPress Multisite installations.<\/li>
                                                                                                                                                                                                                                                              • Fixed: Start date should always be less than End date and vice versa.<\/li>
                                                                                                                                                                                                                                                              • Fixed: Correctly handle global site time format changes when rendering a form with Form Schedule enabled.<\/li>
                                                                                                                                                                                                                                                              • Fixed: Correctly handle time comparison in AM\/PM format when setting Scheduling End Date if the user input is incorrect.<\/li>
                                                                                                                                                                                                                                                              • Fixed: Object cache was breaking Entry Limits logic.<\/li><\/ul>","

                                                                                                                                                                                                                                                                2.0.0 (2021-08-03)<\/h4>
                                                                                                                                                                                                                                                                • Added: Age verification locker.<\/li>
                                                                                                                                                                                                                                                                • Added: Email verification locker.<\/li>
                                                                                                                                                                                                                                                                • Added: Entry limit based on user IP.<\/li>
                                                                                                                                                                                                                                                                • Added: Entry limit based on an email field value.<\/li>
                                                                                                                                                                                                                                                                • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                • Changed: Frontend UI enhancement when used with Conversational Forms addon.<\/li>
                                                                                                                                                                                                                                                                • Changed: Improved compatibility with jQuery 3.5 and no jQuery Migrate plugin.<\/li>
                                                                                                                                                                                                                                                                • Changed: Further improved selective JS script loading to take into account Form Locker settings.<\/li><\/ul>","

                                                                                                                                                                                                                                                                  1.2.3 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                  • Added: Filter wpforms_form_locker_submit_label<\/code> to change the submit button label.<\/li>
                                                                                                                                                                                                                                                                  • Fixed: Line breaks not correctly displayed on front-end with Form Locker messages (form settings).<\/li>
                                                                                                                                                                                                                                                                  • Fixed: The scheduling feature does not work with some custom date formats.<\/li>
                                                                                                                                                                                                                                                                  • Fixed: Unique Answer feature does not work with complex Name fields.<\/li><\/ul>","

                                                                                                                                                                                                                                                                    1.2.2 (2020-03-03)<\/h4>
                                                                                                                                                                                                                                                                    • Changed: Improved time delta detection in the Scheduling section.<\/li><\/ul>","

                                                                                                                                                                                                                                                                      1.2.1 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                      • Fixed: Minor layout issues of the 'clear' button in the Scheduling section.<\/li><\/ul>","

                                                                                                                                                                                                                                                                        1.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                        • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                                                        • Changed: Form Locker Scheduling UI improvements.<\/li><\/ul>","

                                                                                                                                                                                                                                                                          1.1.1 (2019-02-08)<\/h4>
                                                                                                                                                                                                                                                                          • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                            1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                            • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                            • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                              1.0.0 (2018-11-12)<\/h4>
                                                                                                                                                                                                                                                                              • Fixed: PHP fatal error if using PHP 5.4.<\/li>
                                                                                                                                                                                                                                                                              • Fixed: Conflict with multiple password-protected forms on the same page.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                1.0.0 (2018-10-09)<\/h4>
                                                                                                                                                                                                                                                                                • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.5"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-form-locker.png"},"wpforms-form-pages":{"title":"Form Pages Addon","slug":"wpforms-form-pages","url":"https:\/\/wpforms.com\/addons\/form-pages-addon\/","version":"1.9.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2019\/01\/addon-icon-form-pages.png","excerpt":"Want to improve your form conversions? WPForms Form Pages addon allows you to create completely custom \"distraction-free\" form landing pages to boost conversions (without writing any code).","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-form-pages-addon\/","id":362485,"license":["ultimate","agency","pro","elite"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                  1.9.0 (2024-02-22)<\/h4>
                                                                                                                                                                                                                                                                                  • Added: Compatibility with the WPForms 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                  • Changed: The minimum WPForms version supported is 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                  • Fixed: The Form Builder settings screen had visual issues when RTL language was used.<\/li>
                                                                                                                                                                                                                                                                                  • Fixed: List indicators in Form Page message were placed outside the paragraph pane.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                    1.8.0 (2024-01-09)<\/h4>
                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Form Pages 1.8.0. Failure to do that will disable WPForms Form Pages functionality.<\/li>
                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Form Pages 1.8.0. Failure to do that will disable WPForms Form Pages functionality.<\/li>
                                                                                                                                                                                                                                                                                    • Changed: Minimum WPForms version supported is 1.8.6.<\/li>
                                                                                                                                                                                                                                                                                    • Fixed: The Submit button had incorrect styling on Form Pages when the Classic markup was set up.<\/li>
                                                                                                                                                                                                                                                                                    • Fixed: Incorrect error text was displayed when uploading a file of an illegal format in the Form Builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                      1.7.0 (2023-08-15)<\/h4>
                                                                                                                                                                                                                                                                                      • Changed:\u00a0Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                      • Fixed: There was an incorrect link style on the form page in footer.<\/li>
                                                                                                                                                                                                                                                                                      • Fixed: Addon generated deprecation notices on the frontend when running on PHP 8.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                        1.6.0 (2023-03-09)<\/h4>
                                                                                                                                                                                                                                                                                        • Added:\u00a0Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                                                        • Fixed:\u00a0Head Logo preview was not displayed in the Form Builder if the form contained any field with Image Choices turned on.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                          1.5.1 (2022-08-31)<\/h4>
                                                                                                                                                                                                                                                                                          • Fixed: Form page permalink was saved incorrectly when a custom menu link with the same permalink existed.<\/li>
                                                                                                                                                                                                                                                                                          • Fixed: Incorrect information was displayed in form pages social previews.<\/li>
                                                                                                                                                                                                                                                                                          • Fixed: Text in Paragraph Text field turned red when a custom error message was used.<\/li>
                                                                                                                                                                                                                                                                                          • Fixed:\u00a0 The{page_title}<\/code> smart tag used form title instead of the title set in the addon.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                            1.5.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                            • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms Form Pages. Failure to do that will disable the WPForms Form Pages plugin.<\/li>
                                                                                                                                                                                                                                                                                            • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                            • Added: New filter wpforms_form_pages_frontend_handle_request_form_data<\/code> that can be used to improve multi-language support.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                              1.4.1 (2020-11-16)<\/h4>
                                                                                                                                                                                                                                                                                              • Fixed: Display a form name instead of a form page title when using {form_name}<\/code> smart tag inside the Message section.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                1.4.0 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                • Added:\u00a0Show a notice if permalinks are not configured.<\/li>
                                                                                                                                                                                                                                                                                                • Changed: Page Title tag and meta tags should always use Form Pages Title if set.<\/li>
                                                                                                                                                                                                                                                                                                • Changed: oEmbed links are removed from the Form Page HTML.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                  1.3.1 (2020-02-18)<\/h4>
                                                                                                                                                                                                                                                                                                  • Fixed: Datepicker is not working for \"Date\/Time\" field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                    1.3.0 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                    • Added: Meta tag 'robots' with filterable noindex,nofollow<\/code> value for all Form Pages.<\/li>
                                                                                                                                                                                                                                                                                                    • Fixed: Popup Maker popup content displays in Form Pages.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                      1.2.1 (2019-11-07)<\/h4>
                                                                                                                                                                                                                                                                                                      • Fixed: \"error404\" body class may appear if the custom permalink structure is used.<\/li>
                                                                                                                                                                                                                                                                                                      • Fixed: Form preview buttons open two tabs in the Edge browser.<\/li>
                                                                                                                                                                                                                                                                                                      • Fixed: \"Cannot read property 'addEventListener' of null\" JS error on form creation.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                        1.2.0 (2019-10-14)<\/h4>
                                                                                                                                                                                                                                                                                                        • Added: Hexcode option to the color picker.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                          1.1.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                          • Added: Complete translations for Spanish, Italian, Japanese, German, French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                                                                                          • Fixed: Some themes override Form Page's templates.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                            1.0.2 (2019-02-21)<\/h4>
                                                                                                                                                                                                                                                                                                            • Added: Compatibility with Conversational Forms addon.<\/li>
                                                                                                                                                                                                                                                                                                            • Fixed: Typos, grammar, and other i18n related issues.<\/li>
                                                                                                                                                                                                                                                                                                            • Fixed: CSS enqueues filtering includes parents of the child themes.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                              1.0.1 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                              • Fixed: Missing title<\/code> tag.<\/li>
                                                                                                                                                                                                                                                                                                              • Fixed: Compatibility issue with Yoast SEO.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                1.0.0 (2019-01-22)<\/h4>
                                                                                                                                                                                                                                                                                                                • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.7"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-form-pages.png"},"wpforms-geolocation":{"title":"Geolocation Addon","slug":"wpforms-geolocation","url":"https:\/\/wpforms.com\/addons\/geolocation-addon\/","version":"2.8.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/08\/addon-icon-geolocation.png","excerpt":"The WPForms Geolocation addon allows you to store your visitors' geolocation data with their form submission. You can also turn on address autocomplete to make forms easier to fill out.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-geolocation-addon-with-wpforms\/","id":7501,"license":["ultimate","agency","pro","elite"],"category":[],"changelog":["

                                                                                                                                                                                                                                                                                                                  2.8.0 (2024-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.8.6.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                    2.7.0 (2023-11-08)<\/h4>
                                                                                                                                                                                                                                                                                                                    • Added: Compatibility with WPForms 1.8.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                      2.6.0 (2023-09-26)<\/h4>
                                                                                                                                                                                                                                                                                                                      • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Geolocation 2.6.0. Failure to do that will disable WPForms Geolocation functionality.<\/li>
                                                                                                                                                                                                                                                                                                                      • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Geolocation 2.6.0. Failure to do that will disable WPForms Geolocation functionality.<\/li>
                                                                                                                                                                                                                                                                                                                      • Changed:\u00a0Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                                                                                                                                                                                                      • Fixed:\u00a0Entry geolocation value was not added to the CSV file for the email notifications.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                        2.5.0 (2023-08-22)<\/h4>
                                                                                                                                                                                                                                                                                                                        • Added: Ability to display Geolocation data when printing and displaying an entry data.<\/li>
                                                                                                                                                                                                                                                                                                                        • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                        • Fixed: Map for the Address field was displayed incorrectly when a form contained page breaks.<\/li><\/ul>2.4.0 (2023-03-13)<\/span>
                                                                                                                                                                                                                                                                                                                          • Added: Compatibility with the upcoming WPForms 1.8.1.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                            2.3.1 (2022-08-30)<\/h4>
                                                                                                                                                                                                                                                                                                                            • Fixed: Error when using location with autocomplete.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                              2.3.0 (2022-07-05)<\/h4>
                                                                                                                                                                                                                                                                                                                              • IMPORTANT: Algolia Places has been discontinued by Algolia. All Algolia functionality in the addon has been deprecated and removed.<\/li>
                                                                                                                                                                                                                                                                                                                              • Added: New Places Provider - Mapbox.<\/li>
                                                                                                                                                                                                                                                                                                                              • Added: Preview area on the Settings > Geolocation admin page.<\/li>
                                                                                                                                                                                                                                                                                                                              • Added: New filters to change the map appearance and location sources.<\/li>
                                                                                                                                                                                                                                                                                                                              • Changed: Increased minimum WPForms supported version to 1.7.5.<\/li>
                                                                                                                                                                                                                                                                                                                              • Changed: Browser no longer automatically completes the Text field if Address Autocomplete is enabled.<\/li>
                                                                                                                                                                                                                                                                                                                              • Changed: Improved detection of the user's current location.<\/li>
                                                                                                                                                                                                                                                                                                                              • Changed: In the address and text field search, users can now hit the Enter key to select an address.<\/li>
                                                                                                                                                                                                                                                                                                                              • Fixed: Map styling inside the Full Site Editor in WordPress 6.0.<\/li>
                                                                                                                                                                                                                                                                                                                              • Fixed: Geolocation coordinates were incorrect for Address Autocomplete with a custom scheme.<\/li>
                                                                                                                                                                                                                                                                                                                              • Fixed: Address autocomplete didn't fill in the Address > City subfield.<\/li>
                                                                                                                                                                                                                                                                                                                              • Fixed: {entry_geolocation}<\/code> smart tag works in Confirmation messages.<\/li>
                                                                                                                                                                                                                                                                                                                              • Fixed: Compatibility with the Conversational Forms addon has been improved.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                2.2.0 (2022-05-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Algolia Places has been discontinued by Algolia. If you are using it you need to switch to Google Places to prevent disruptions in form geolocation features.<\/li>
                                                                                                                                                                                                                                                                                                                                • Added: New filter wpforms_geolocation_places_providers_google_places_query_args<\/code> that can be used to improve multi-language support.<\/li>
                                                                                                                                                                                                                                                                                                                                • Fixed: Users geolocation detection on the Entry page was working incorrectly with KeyCDN API.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                  2.1.0 (2022-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.7.3 and Form Revisions.<\/li>
                                                                                                                                                                                                                                                                                                                                  • Changed: Minimum WPForms version supported is 1.6.7.1.<\/li>
                                                                                                                                                                                                                                                                                                                                  • Fixed: Address field filling.<\/li>
                                                                                                                                                                                                                                                                                                                                  • Fixed: Value with mask is not saved in a Text field when Address Autocomplete is enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                  • Fixed: Various typos reported by translators.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                    2.0.0 (2021-02-18)<\/h4>
                                                                                                                                                                                                                                                                                                                                    • Added: New Places Providers selection: Google Places, Algolia Places.<\/li>
                                                                                                                                                                                                                                                                                                                                    • Added: Address and Text fields can have address autocomplete enabled on typing.<\/li>
                                                                                                                                                                                                                                                                                                                                    • Added: Display a map before or after the field to select a location on a map without typing.<\/li>
                                                                                                                                                                                                                                                                                                                                    • Added: Retrieve user's current location with a browser prompt and prefill address\/text fields with address autocomplete enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                    • Added: Added own WPForms geolocation API endpoint to retrieve user's geolocation based on their IP address.<\/li>
                                                                                                                                                                                                                                                                                                                                    • Changed: Removed map image preview from email notifications due to Google API restrictions.<\/li>
                                                                                                                                                                                                                                                                                                                                    • Fixed: Geolocation: display and save only existing data (sometimes ZIP code may be missing).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                      1.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                      • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                        1.1.1 (2019-02-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                        • Fixed: Geolocation provider fallback logic.<\/li>
                                                                                                                                                                                                                                                                                                                                        • Fixed: Referencing geolocation providers no longer accessible.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                          1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                          • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                          • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                            1.0.1 (2016-08-04)<\/h4>
                                                                                                                                                                                                                                                                                                                                            • Fixed: Bug preventing IP addresses from processing<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                              1.0.0 (2016-08-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":[]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-geolocation.png"},"wpforms-getresponse":{"title":"GetResponse Addon","slug":"wpforms-getresponse","url":"https:\/\/wpforms.com\/addons\/getresponse-addon\/","version":"1.6.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/04\/addon-icons-getresponse-1.png","excerpt":"The WPForms GetResponse addon allows you to create GetResponse newsletter signup forms in WordPress, so you can grow your email list. ","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-getresponse-addon-with-wpforms\/","id":2565,"license":["ultimate","agency","plus","pro","elite"],"category":["providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                1.6.0 (2023-08-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                • Fixed: The fatal error was thrown when users were trying to create a connection in the Form Builder with an expired API key.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                  1.5.1 (2023-07-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                  • Fixed:\u00a0Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                    1.5.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms GetResponse and WPForms 1.7.3 (that the addon is relying on). Failure to do that will disable the WPForms GetResponse plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms GetResponse. Failure to do that will disable the new WPForms GetResponse functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                    • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                    • Changed: Minimum WPForms version supported is 1.7.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                    • Fixed: Compatibility with WordPress Multisite installations.<\/li>
                                                                                                                                                                                                                                                                                                                                                    • Fixed: Properly handle the situation when trying to change the template for the same form multiple times.<\/li>
                                                                                                                                                                                                                                                                                                                                                    • Fixed: Send to GetResponse form submission data even when the \"Entry storage\" option is disabled in the Form Builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                      1.4.0 (2021-03-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                      • Added: Send a subscriber IP address to GetResponse if GDPR options configured to allow that.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                        1.3.0 (2020-12-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                        • IMPORTANT:\u00a0Support for PHP 5.4 and below has been discontinued. If you are running anything older than PHP 5.5, you MUST upgrade PHP before installing the WPForms GetResponse. Failure to do that will disable addon functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                        • Added: Updated GetResponse API from v2 to v3.<\/li>
                                                                                                                                                                                                                                                                                                                                                        • Added:\u00a0Ability to update subscribers with data from the form submission.<\/li>
                                                                                                                                                                                                                                                                                                                                                        • Added:\u00a0Ability to add tags to subscribers.<\/li>
                                                                                                                                                                                                                                                                                                                                                        • Added:\u00a0Ability to define the \"Day of Cycle\" - Autoresponder day.<\/li>
                                                                                                                                                                                                                                                                                                                                                        • Added:\u00a0Ability to set custom fields in GetResponse using entry data.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                          1.2.0 (2018-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                          • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                            1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                            • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                            • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                              1.0.4 (2018-03-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                              • Fixed: Error when adding account from Settings > Integrations tab.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                1.0.3 (2017-03-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                • Changed: Adjust display order so that the providers show in alphabetical order<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                  1.0.2 (2016-07-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                  • Changed: Improved error logging<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                    1.0.1 (2016-06-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                    • Changed: Prevent plugin from running if WPForms Pro is not activated<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                      1.0.0 (2016-04-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                      • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-getresponse.png"},"wpforms-google-sheets":{"title":"Google Sheets Addon","slug":"wpforms-google-sheets","url":"https:\/\/wpforms.com\/addons\/google-sheets-addon\/","version":"2.0.1","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2022\/10\/icon-google-sheets.png","excerpt":"The WPForms Google Sheets addon makes it easy to send form entries and leads to a Google Sheet.","doc":"https:\/\/wpforms.com\/docs\/google-sheets-addon\/","id":2225879,"license":["pro","ultimate","agency","elite"],"category":["settings","providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                        2.0.1 (2024-01-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                        • IMPORTANT: All users who are sending entries to Google Sheets will need to re-authenticate their Google connection once version 2.0.1 is installed to avoid interruptions in service.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        • Changed: Lowered minimum WPForms version supported to 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        • Changed: Lowered minimum PHP version supported to 5.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        • Changed: Lowered minimum WordPress version supported to 5.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                          2.0.0 (2024-01-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: All users who are sending entries to Google Sheets will need to re-authenticate their Google connection once version 2.0.0 is installed to avoid interruptions in service.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Google Sheets 2.0.0. Failure to do that will disable WPForms Google Sheets functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Google Sheets 2.0.0. Failure to do that will disable WPForms Google Sheets functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                            1.1.0 (2023-04-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                            • Added: Support for form field smart tags in field mapping of custom values.<\/li>
                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Attempt to activate the addon with WPForms version prior to 1.7.3 resulted in a fatal error.<\/li>
                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Field Mapping layout had incorrect subfield widths in Safari.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                              1.0.0 (2022-10-25)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-google-sheets.png"},"wpforms-hubspot":{"title":"HubSpot Addon","slug":"wpforms-hubspot","url":"https:\/\/wpforms.com\/addons\/hubspot-addon\/","version":"1.2.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2022\/03\/addon-icon-hubspot.png","excerpt":"The WPForms HubSpot addon lets you send leads from WordPress directly to your HubSpot CRM.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-hubspot-addon-in-wpforms\/","id":1846183,"license":["ultimate","agency","elite"],"category":["providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                1.2.0 (2023-10-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms HubSpot 1.2.0. Failure to do that will disable WPForms HubSpot functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms HubSpot 1.2.0. Failure to do that will disable WPForms HubSpot functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                • Added: Compatibility with the upcoming HubSpot API changes.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                  1.1.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                  • Changed:\u00a0Minimum WPForms version supported is 1.8.3.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                    1.0.2 (2023-07-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                    • Fixed:\u00a0Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                      1.0.1 (2022-08-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Checkbox fields mapped to HubSpot Multiple Checkbox fields were not processed correctly.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                        1.0.0 (2022-03-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                        • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["crm","email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-hubspot.png"},"wpforms-lead-forms":{"title":"Lead Forms Addon","slug":"wpforms-lead-forms","url":"https:\/\/wpforms.com\/addons\/lead-forms-addon\/","version":"1.4.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2023\/01\/icon-lead-forms.png","excerpt":"Want to increase conversions and generate leads for your business? The WPForms Lead Forms Addon lets you embed beautiful forms that show one question at a time.","doc":"https:\/\/wpforms.com\/docs\/lead-forms-addon\/","id":2320054,"license":["pro","ultimate","agency","elite"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                          1.4.0 (2024-02-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                          • Added: Compatibility with the upcoming WPForms 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Authorize.Net subfields alignment in Classic frontend mode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Active state of the Net Promoter Score field in Classic frontend mode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Geolocation map preview breaking out of container.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: In rare cases, Turnstile Captcha was not displayed correctly when it expired and was refreshed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: The Field Size option was not blocked if it was in the Layout element.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Regular Stripe card number field was not inheriting colors correctly.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                            1.3.0 (2023-09-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                            • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Lead Forms 1.3.0. Failure to do that will disable WPForms Lead Forms functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Lead Forms 1.3.0. Failure to do that will disable WPForms Lead Forms functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Lead Forms and Coupons addons are now working together nicely.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Changed: The Coupon field preview in the Form Builder now looks much better.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Lead Forms styles weren't loaded in the Elementor builder preview.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Required Rich Text field was broken in certain cases related to errors on the page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Field size option was enabled for fields inside the Layout field in the Form Builder after page refresh.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Turnstile Captcha overlapped the \"Submit\" button in Lead Forms.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Additional border appeared after unchecking a Likert Scale option.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Long field labels overlapped the \"Duplicate Field\" and \"Delete Field\" icons in the Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The Rich Text field style was reset when Lead Forms was enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The Rich Text field in Visual mode didn't inherit secondary text color and focus styles.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The Square Credit Card field had a larger height than it should.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The Date\/Time field was rendered incorrectly on the front end when in Classic markup mode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The legacy Credit Card field layout was partially broken on the front end.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: External Stripe payment field styles were not fully overridden by the addon styles.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The progress bar wasn't updated properly when the form was used in an Elementor popup.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The \"Lead Forms Enabled\" notice was duplicated if Lead Forms was turned off, the form was changed and converted back to Lead Forms again.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                              1.2.0 (2023-06-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with the WPForms Coupons addon.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                1.1.0 (2023-03-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                • Added:\u00a0Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                • Added: A new option to control scrolling to the top of the form when proceeding to the next page, disabled by default.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                  1.0.0 (2023-01-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                  • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.4"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-lead-forms.png"},"wpforms-mailchimp":{"title":"Mailchimp Addon","slug":"wpforms-mailchimp","url":"https:\/\/wpforms.com\/addons\/mailchimp-addon\/","version":"2.3.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/02\/addon-icon-mailchimp-1.png","excerpt":"The WPForms Mailchimp addon allows you to create Mailchimp newsletter signup forms in WordPress, so you can grow your email list. ","doc":"https:\/\/wpforms.com\/docs\/install-use-mailchimp-addon-wpforms\/","id":153,"license":["plus","elite","ultimate","agency","pro"],"category":["providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                    2.3.0 (2023-06-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Checkboxes have been replaced with fancy toggles on the addon settings screen in the Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Minimum WPForms version supported is 1.8.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                      2.2.0 (2022-09-22)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                      • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms Mailchimp and WPForms 1.7.5.5 (that the addon is relying on). Failure to do that will disable the WPForms Mailchimp plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms Mailchimp. Failure to do that will disable the new WPForms Mailchimp functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Improved translations by removing confusion if non-translatable placeholders are used.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: PHP Fatal error occurred in certain cases during a form processing.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Smart Tags could not be inserted in the Note setting.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                        2.1.1 (2021-09-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Compatibility with WordPress Multisite installs.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                          2.1.0 (2021-04-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Ability to define which tags you wish to remove from contact when updating an existing one in your Audience.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          • Added: New option in the form Mailchimp settings to notify users when they are already subscribed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Send the note to Mailchimp when the contact is updated because of the \"Update the profile\" option enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Send to Mailchimp form submission data even when the \"Entry storage\" option is disabled in the Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Properly handle the situation when trying to change the template for the same form multiple times.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                            2.0.0 (2021-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                            • Added: New actions: unsubscribe, archive, delete, record event.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Assign existing or new tags to subscribers.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Add a note to subscribers (with support of Smart Tags).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Mark subscribers as VIP.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Update subscribers' information on Mailchimp if they already exist in your Audience.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Map form field values to any Mailchimp custom fields.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Rename \"Lists\" to \"Audiences\".<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Changed:\u00a0Improved integration with Mailchimp groups (segments) of your Audience (inheriting their radio\/dropdown\/checkbox multiple selection status).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Convert form field values properly when sending data to Mailchimp.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                              1.4.2 (2020-03-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Make the addon consistent with the updated Mailchimp branding (MailChimp to Mailchimp).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Simultaneous change of Date format and Datepicker type in \"Date\/Time\" field may produce an error on Mailchimp form submission.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                1.4.1 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Upgraded the Mailchimp library version to v2.5.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                  1.4.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                    1.3.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                      1.2.0 (2017-12-04)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Birthday field special integration rules.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Improved localization support and translatable strings.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Update Mailchimp PHP library (2.4).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                        1.1.1 (2017-03-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Issue for some users connecting v3 accounts<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                          1.1.0 (2017-03-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Mailchimp API version 3 support<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Mailchimp API version 2 support has been deprecated, please reconnect forms using the new version 3<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.6 (2017-03-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Adjust display order so that the providers show in alphabetical order<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.5 (2016-10-24)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Namespaced Mailchimp PHP classes to prevent conflicts<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.4 (2016-07-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Improved error logging<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.3 (2016-06-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Prevent plugin from running if WPForms Pro is not activated<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Corrected AWeber capitilization inside form builder<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                  • <\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.2 (2016-05-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Disable SSL verify which causes issues with some web hosts<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.1 (2016-04-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Improved error logging<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.0 (2016-03-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                        • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.2"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-mailchimp.png"},"wpforms-mailerlite":{"title":"MailerLite Addon","slug":"wpforms-mailerlite","url":"https:\/\/wpforms.com\/addons\/mailerlite-addon\/","version":"1.1.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2022\/05\/icon-provider-mailerlite.png","excerpt":"The WPForms MailerLite addon makes it easy to send contacts from your WordPress forms to your MailerLite Groups.","doc":"https:\/\/wpforms.com\/docs\/install-use-mailerlite-addon-wpforms\/","id":1993604,"license":["pro","ultimate","agency","elite","plus"],"category":["providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                          1.1.0 (2023-08-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed:\u00a0Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: The fatal error was thrown when users were trying to create a connection in the Form Builder with an empty API key.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.1 (2022-09-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: The options in the \"Type\" dropdown should be capitalized.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: The multiselect dropdown options inside connections can now be searchable.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version is now 1.7.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Invalid date was displayed in MailerLite when a new contact created with the \"Unsubscribe\" type.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Inside the connection the \"Groups\" dropdown should always display all the existing MailerLite groups.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.0 (2022-05-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["email-marketing"],"featured":false},"recommended":false,"icon":"addon-icon-mailerlite.png"},"wpforms-offline-forms":{"title":"Offline Forms Addon","slug":"wpforms-offline-forms","url":"https:\/\/wpforms.com\/addons\/offline-forms-addon\/","version":"1.2.4","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2017\/09\/addon-offline-forms.png","excerpt":"Never lose leads or data again. Offline Forms addon allows your users to save their entered data offline and submit when their internet connection is restored.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-set-up-the-offline-forms-addon\/","id":85564,"license":["agency","pro","elite","ultimate"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                1.2.4 (2023-07-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Offline form was constantly scrolled to the top when the connection was offline.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.2.3 (2021-09-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.6.8+ and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Improved compatibility with jQuery 3.5 and no jQuery Migrate plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Broken Modern Dropdown field value restoration.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.2.2 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Improved wording in the user-facing text displayed when a browser went offline.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.2.1 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Prevent multiple form submissions when Offline forms functionality enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.0 (2017-09-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.6.8"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-offline-forms.png"},"wpforms-paypal-commerce":{"title":"PayPal Commerce Addon","slug":"wpforms-paypal-commerce","url":"https:\/\/wpforms.com\/addons\/paypal-commerce-addon\/","version":"1.9.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/02\/addon-icon-paypal.png","excerpt":"The WPForms PayPal Commerce addon makes it easy to accept PayPal and credit card payments on your WordPress site. Quickly set it up with a few clicks.","doc":"https:\/\/wpforms.com\/docs\/paypal-commerce-addon\/","id":2113327,"license":["pro","ultimate","agency","elite"],"category":["payments"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.9.0 (2024-02-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with the WPForms 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: The minimum WPForms version supported is 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Incorrect payment title was saved in some cases.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Hidden cardholder name skipped card details validation and did not prevent a form submission.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Cardholder name validation was skipped when field was not required.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: One-Time payments failed when a Single Item payment field was hidden via conditional logic.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: PHP notice was thrown when the Shipping Address setting was configured.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.8.0 (2023-12-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Account connection issues blocked a multi-payments form submission that resulted in unexpected issues with other active integrations (like Stripe).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Account couldn't be connected on the WPForms settings page in various cases.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The PayPal Checkout button had no distance from the last field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.7.0 (2023-10-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Compatibility with the Conversational Forms addon was improved.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Credit card rejection errors did not prevent a form submission.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: There were situations when PHP notices were generated when a payment form was submitted.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.6.0 (2023-09-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms PayPal Commerce 1.6.0. Failure to do that will disable WPForms PayPal Commerce functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms PayPal Commerce 1.6.0. Failure to do that will disable WPForms PayPal Commerce functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Minimum WPForms version supported is 1.8.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.5.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: There was no payment method selected by default when the PayPal Commerce credit card field was added to a form.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.4.0 (2023-06-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Compatibility with the upcoming WPForms Coupons addon release.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.3.0 (2023-06-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Compatibility with WPForms 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: In some cases a payment couldn't be submitted due to an API error and expiration of tokens.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: JavaScript error occurred when the user was asked to enter verification information for a payment form locked with the Form Locker addon.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: It was not possible to click the PayPal Checkout button when an API error occurred.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.2.1 (2023-04-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: An error about the empty total amount was displayed for multi-page forms even though the amount was not empty after users' selection.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.2.0 (2023-03-22)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with the upcoming WPForms v1.8.1.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: New filter wpforms_paypal_commerce_api_http_request_base_url<\/code> allows to modify the API base URL of HTTP request that might help in case when PayPal blacklisted a customer's server IP.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Minimum WPForms version supported is 1.8.0.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Previous page could not be opened without filling Credit Card Number.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Certain users couldn't connect their business accounts.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: The form could be submitted even though an access token was invalid, which led to storing false payment entries.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: The Cardholder Name field was validated when other Credit Card details were filled in and valid.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Multistep form now returns to the first page when user tries to submit the form with empty total.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Payment API error was displayed too close to the Submit button.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.1.0 (2022-09-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.7.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Connection error messages were improved to cover more cases.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The compatibility with the Layout field was improved.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: PayPal Commerce field was broken in the Block Editor in WordPress 5.2-5.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.0 (2022-08-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.7"},"form_builder":{"category":["payments"]},"settings_integrations":{"category":["payment"],"featured":false},"recommended":false,"icon":"addon-icon-paypal-commerce.png"},"wpforms-paypal-standard":{"title":"PayPal Standard Addon","slug":"wpforms-paypal-standard","url":"https:\/\/wpforms.com\/addons\/paypal-standard-addon\/","version":"1.10.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/02\/addon-icon-paypal.png","excerpt":"The WPForms PayPal Standard addon allows you to connect your WordPress site with PayPal to easily collect payments, donations, and online orders.","doc":"https:\/\/wpforms.com\/docs\/install-use-paypal-addon-wpforms\/","id":155,"license":["agency","pro","elite","ultimate"],"category":["payments"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.10.0 (2024-02-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: The WPForms PayPal Standard integration has been deprecated. We strongly recommend migrating to PayPal Commerce, which provides a seamless user experience and more features!<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Compatibility with the upcoming WPForms 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: The minimum WPForms version supported is 1.8.7.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.9.0 (2023-09-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms PayPal Standard 1.9.0. Failure to do that will disable WPForms PayPal Standard functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms PayPal Standard 1.9.0. Failure to do that will disable WPForms PayPal Standard functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Statuses of refunded payments were not correctly mirrored on the Payments Overview and Single Payment pages.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Error messages were duplicated when there was no payment field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.8.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed:\u00a0Minimum WPForms version supported is 1.8.3.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.7.1 (2023-06-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Blank email notifications were received when the \"Enable for PayPal Standard completed payments\" option was enabled and Conditional Logic for processing was configured.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.7.0 (2023-05-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Compatibility with WPForms 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Unselected payment fields were previously sent to PayPal.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.6.0 (2022-10-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: If payments are enabled, a warning popup is now displayed when saving the form with no payment field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.5.0 (2022-07-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing the new WPForms PayPal Standard. Failure to do that will disable the WPForms PayPal Standard plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms PayPal Standard. Failure to do that will disable the new WPForms PayPal Standard functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Possibility to save sandbox and production email separately and automatically use the correct one based on the selected mode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Pass locale of a user to set a language for the checkout page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: 'Note to seller' setting has been deprecated and removed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Show settings in the Form Builder only if they are enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.7.5.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Confirmation message was not displayed correctly in form preview mode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The \"Invoice has already been paid\" error related to Invoice Number generation should no longer appear.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Payment status was not updating correctly in the Sandbox mode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: PayPal payments could be enabled without an email address.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Compatibility with WordPress Multisite installations.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.4.0 (2021-03-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Email Notifications option to limit to completed payments only.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.3.4 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Instruct PayPal to not ask for a shipping address when the \"Don't ask for an address\" option is checked.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.3.3 (2020-01-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Payment status remains 'Pending' despite PayPal payment completing successfully.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.3.2 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: PHP Warning because of incorrect no shipping and no note processing.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Selected choices of the 'Payment checkbox' field are now included in the PayPal payment title.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.3.1 (2019-09-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Paypal redirects with Ajax-enabled payment forms.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.3.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.2.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.1.2 (2018-11-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Processing empty payments.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.1.1 (2018-03-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: IPN callback URLs to new URLs PayPal recommends (previous ones are being deprecated\/removed).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Processing hook order (decreased priority) to avoid conflicts with the User Registration addon.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.1.0 (2017-09-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Donation payments include a description from payment items.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: All HTTP requests now validate target sites SSL certificates with WP bundled certificates (since 3.7).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Email validation issue by converting all email addresses to lowercase first.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.9 (2017-01-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: New hook for completed transactions, wpforms_paypal_standard_process_complete<\/code>.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.8 (2016-12-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Support for Dropdown Items payment field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.7 (2016-08-25)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Expanded support for additional currencies.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Removed setting to disable IPN verification.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Improved IPN verification.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Localization issues\/bugs.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.6 (2016-08-04)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Multiple payment items now also include labels of selected choices in the item descriptions.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: PayPal BN code.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.5 (2016-07-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Conditional logic for payments.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Improved error logging.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.4 (2016-06-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Prevent plugin from running if WPForms Pro is not activated.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.3 (2016-03-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: IPN setting has been moved to the new \"Payments\" settings tab.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.2 (2016-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Issue with donation transaction types.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.1 (2016-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Issue posting to PayPal due to incorrect URL.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.0 (2016-03-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.7"},"form_builder":{"category":["payments"]},"settings_integrations":{"category":["payment"],"featured":false},"recommended":false,"icon":"addon-icon-paypal-standard.png"},"wpforms-post-submissions":{"title":"Post Submissions Addon","slug":"wpforms-post-submissions","url":"https:\/\/wpforms.com\/addons\/post-submissions-addon\/","version":"1.5.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/10\/addon-icon-post-submissions.png","excerpt":"The WPForms Post Submissions addon makes it easy to have user-submitted content in WordPress. This front-end post submission form allow your users to submit blog posts without logging into the admin area.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-post-submissions-addon-in-wpforms\/","id":11793,"license":["elite","ultimate","agency","pro"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.5.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: \u00a0Post featured Image field was prone to be set with incorrect settings.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.4.1 (2023-07-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed:\u00a0Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.4.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with the Rich Text field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Improved compatibility with jQuery 3.5 and no jQuery Migrate plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Show settings in the Form Builder only if they are enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Show a modal in the Form Builder about available additional options only once.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: 0<\/code> values were not allowed to save as custom post meta.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Images added as Post Featured Images didn't have titles.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Events Calendar plugin compatibility: start\/end times had incorrect timezone.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.3.2 (2020-12-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Modern file upload processing when files were saved to the custom post meta table.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.3.1 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Modern file upload is not compatible with the ACF File field when used in custom post meta.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.3.0 (2020-01-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Access Controls compatibility (WPForms 1.5.8).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.2.1 (2019-11-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Compatibility with modern file uploader (WPForms 1.5.6) for featured image.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.1.1 (2019-02-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Post submission featured image not showing up as \"Featured Image\" in WordPress post type.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Post submission featured image thumbnail not displayed in WordPress Media Library.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Post can be submitted without an author (now falls back to form author).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.4 (2017-08-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Template uses new `core` property so it displays with other core templates<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.3 (2017-03-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Improved integration for storing The Events Calendar post meta<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.2 (2017-02-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Capitalized letters not being allowed in custom post meta keys<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.1 (2017-01-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Possible error if custom meta fields were setup but incomplete<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.0 (2016-10-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-post-submissions.png"},"wpforms-salesforce":{"title":"Salesforce Addon","slug":"wpforms-salesforce","url":"https:\/\/wpforms.com\/addons\/salesforce-addon\/","version":"1.2.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2020\/09\/addon-icon-salesforce.png","excerpt":"The WPForms Salesforce addon allows you to easily send your WordPress form contacts and leads to your Salesforce CRM account.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-salesforce-addon-with-wpforms\/","id":1006060,"license":["elite","ultimate","agency"],"category":["providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.2.0 (2022-09-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Salesforce \"Currency\" custom field can now be used when mapping form fields.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Do not display errors and properly handle situations when no Salesforce account was selected but the form still saved and reloaded.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.1.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms Salesforce. Failure to do that will disable the new WPForms Salesforce functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Compatibility with WPForms 1.6.7 and the updated Form Builder in 1.6.8.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.7.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Compatibility with WordPress Multisite installations.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Properly handle the situation when trying to change the template for the same form multiple times.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Send to Salesforce form submission data even when the \"Entry storage\" option is disabled in the Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Various typos in the translatable strings reported by translators.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.3 (2020-12-24)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Incorrectly formatted mapped entry data values before sending them to Salesforce (Cannot deserialize instance of *field_type*<\/code> error).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.2 (2020-12-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Access token not always refreshing when expired.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Entries not sending to Salesforce in some edge cases.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.1 (2020-09-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Incorrect plugin build.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.0 (2020-09-24)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.7.3"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["crm"],"featured":false},"recommended":false,"icon":"addon-icon-salesforce.png"},"wpforms-save-resume":{"title":"Save and Resume Addon","slug":"wpforms-save-resume","url":"https:\/\/wpforms.com\/addons\/save-and-resume-addon\/","version":"1.9.1","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2021\/10\/addon-icon-save-resume.png","excerpt":"The WPForms Save and Resume addon allows your visitors to save their progress while filling in your forms. When they're ready to continue, they can restore their entry with a click.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-save-and-resume-addon-with-wpforms\/","id":1611341,"license":["pro","ultimate","agency","elite"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.9.1 (2024-02-29)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Antispam token was passed as a simple form field, not protected from spam bots.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.9.0 (2024-02-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Compatibility with WPForms 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Save and Resume Later label was displayed in the builder preview area when there were no fields added.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: The Form Builder settings screen had visual issues when an RTL language was used.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.8.0 (2024-01-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.8.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Improve the logic of sending emails to increase performance.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Minimum WPForms version supported is 1.8.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Improved expiration error handling if multiple forms with Save and Resume enabled are embedded on a page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Form restore link could be missing from the email notification in rare cases.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Deprecation message while submitting non-AJAX forms with enabled Save and Resume.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.7.0 (2023-11-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Save and Resume 1.7.0. Failure to do that will disable WPForms Save and Resume functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Save and Resume 1.7.0. Failure to do that will disable WPForms Save and Resume functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Compatibility with WPForms 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.6.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The form with saved data was displayed when visiting via expired link.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.5.0 (2023-03-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added:\u00a0Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed:\u00a0Incorrect error message placement if multiple forms were embedded on a page.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.4.1 (2023-02-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: WPForms 1.8.0 compatibility.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Disable \"Resend Notifications\" link on the Entry page instead of hiding it.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.4.0 (2023-01-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with the Lead Forms addon.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: In the Firefox browser, Save and Resume link was displayed in the Form Builder even if the feature was not enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Dropdown, Multiple Choice, and Checkbox fields were forcing their corresponding default values in resumed forms.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Form submission has expired for non-AJAX forms after submitting the form and refreshing the page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: The resume link could have been emailed before it was generated.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Save and Resume link was not displayed alongside the \"Next\" button of the new Page Break fields in the Form Builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.3.0 (2022-09-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Minimum WPForms version is now 1.7.5.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Save and resume link representation was broken in the Block Editor on WordPress 5.2-5.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.2.0 (2022-07-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Display partial entry expiration in the \"Entry Details\" metabox when viewing entry details.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Allow copying saved entry link from the \"Entry Details\" metabox when viewing entry details.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Partial entry is now deleted immediately after completing and submitting the form.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Check GDPR settings before trying to use cookies.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Partial entries do not rely on user cookies anymore.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Improved compatibility with Twenty Twenty-Two theme and Full Site Editing (FSE).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Partial entry processing had no anti-spam protection.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Link was displayed in the Form Builder and Elementor widget preview even if the feature was not enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Incorrect saved entry link was generated on setups with mixed HTTP\/HTTPS.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Incorrect date was displayed in the resumed form.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Form field labels were underlined when Save and Resume was enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: PHP notice was generated when email notifications were sent.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.1.0 (2022-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.7.3 and Form Revisions.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.7.3 and search functionality on the Entries page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Minimum WPForms version supported is 1.7.3.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.1 (2021-10-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Improved Paragraph field text formatting when restored from the saved partial entry.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Likert Scale field values haven't been restored when multiple responses are enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Properly handle empty values for the Date \/ Time field and its Date Dropdown format.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Properly restore partial entries with dynamic and\/or multiple choices in checkboxes and dropdowns fields.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.0 (2021-10-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.6"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-save-resume.png"},"wpforms-signatures":{"title":"Signature Addon","slug":"wpforms-signatures","url":"https:\/\/wpforms.com\/addons\/signature-addon\/","version":"1.9.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/10\/wordpress-signature-form-plugin.png","excerpt":"The WPForms Signature addon makes it easy for users to sign your forms. This WordPress signature plugin will allow your users to sign contracts and other agreements with their mouse or touch screen.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-signature-addon-in-wpforms\/","id":15383,"license":["pro","elite","ultimate","agency"],"category":[],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.9.0 (2024-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: The minimum WPForms version supported is 1.8.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Signature files were not deleted on form deletion.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.8.0 (2023-11-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Signatures 1.8.0. Failure to do that will disable WPForms Signatures functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Signatures 1.8.0. Failure to do that will disable WPForms Signatures functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Signature Pad JS library is updated.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Compatibility with the Divi page builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The signature file was not deleted with the entry.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The Signature field had the wrong styles with Divi builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.7.0 (2023-03-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added:\u00a0Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed:\u00a0Form could be submitted with an empty required Signature field if it was cleared before submission.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.6.0 (2022-09-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Compatibility with WPForms 1.7.7 and its new functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Signature field was broken in the Block Editor in WordPress 5.2-5.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.5.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: WordPress 6.0 compatibility: Signature field styling fixed inside the Full Site Editor.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Signature field was reset when a viewport size changed (Portrait\/Landscape).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.4.0 (2022-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.7.3 and Form Revisions.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Signature canvas initialization when a form is used several times on a page.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.3.1 (2020-12-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Signature not displaying in the form builder correctly when using \"Small\" format.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.3.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Signature canvas scaling issue on window resize.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.2.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.1.4 (2018-12-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Signature field display priority in the form builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.1.3 (2018-08-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Support for Gutenberg editor with WPForms version 1.4.8.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.1.2 (2018-05-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Clear signature button display issues when using Base Styling only setting.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.1.1 (2018-04-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Required signatures fields not validating when inside pagebreaks.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.1.0 (2018-04-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Ink color field setting.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Refactored addon and improved code.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.4 (2017-08-01)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Signature reset when scrolling on some mobile devices<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.2 (2017-04-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: CSS not correctly applying if using only Base styling<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.1 (2016-11-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Signature is stored and created in an image file, instead of a data URI<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Signatures not working when hidden on load (conditional logic, pagination)<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Signatures not displaying in Gmail\/Google Apps<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.0 (2016-11-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.6"},"form_builder":{"category":[]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-signatures.png"},"wpforms-square":{"title":"Square Addon","slug":"wpforms-square","url":"https:\/\/wpforms.com\/addons\/square-addon\/","version":"1.9.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2021\/09\/addon-icon-square.png","excerpt":"The WPForms Square addon allows you to connect your WordPress site with Square to easily collect payments, donations, and online orders.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-square-addon-with-wpforms\/","id":1548589,"license":["ultimate","agency","elite","pro"],"category":["payments"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.9.0 (2024-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with the upcoming WPForms 1.8.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with the new version of the Square PHP library.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Updated Square PHP library to v34.0.1.20240118.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: There was a conflict with 3rd-party plugins that use the Square PHP library.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Color from the Lead Forms was not applied to the Square credit card number.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: There was no auto scrolling to the Square Credit Card field in case of an error.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: The Square Credit Card field in an Elementor popup was added twice.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.8.0 (2023-09-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Square 1.8.0. Failure to do that will disable WPForms Square functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing Square 1.8.0. Failure to do that will disable WPForms Square functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Minimum WPForms version supported is 1.8.4.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.7.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Payment field was not displayed in the Elementor Builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.6.0 (2023-06-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Compatibility with the upcoming WPForms Coupons addon release.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.5.0 (2023-06-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Compatibility with WPForms 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: JavaScript error occurred when the user was asked to enter verification information for a payment form locked with the Form Locker addon.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.4.0 (2023-03-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added:\u00a0Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Notification if the form is being saved without enabling Square settings.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Field preview in the Form Builder and Block Editor now matches the frontend look.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.7.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: On multi-page forms the field validation wasn't processed when changing pages.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Square Card field was displayed too high if used with conditional logic.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Previous page of the multi-page form could not be opened without filling the Credit Card Number.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Square field preview in the Block Editor was missing the Card subfield.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.3.0 (2022-08-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with the WPForms PayPal Commerce addon.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.2.0 (2022-07-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The form couldn't be submitted if several configured payment gateways were executed according to the Conditional Logic rules.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The wpforms_square_refresh_connection<\/code> Action Scheduler task was missing in some edge cases.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.1.0 (2022-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Compatibility with WPForms 1.7.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Minimum WPForms version supported is 1.7.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Improved Performance of the Action Scheduler.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.0 (2021-09-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.2","wpforms":"1.8.4"},"form_builder":{"category":["payments"]},"settings_integrations":{"category":["payment"],"featured":false},"recommended":false,"icon":"addon-icon-square.png"},"wpforms-stripe":{"title":"Stripe Pro Addon","slug":"wpforms-stripe","url":"https:\/\/wpforms.com\/addons\/stripe-addon\/","version":"3.3.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/03\/addon-icon-stripe-1.png","excerpt":"The Stripe Pro addon grants access to conditional logic for payments and lower transaction fees. Use it alongside our core Stripe integration to easily collect payments, donations, and online orders.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-stripe-addon-with-wpforms\/","id":1579,"license":["agency","pro","elite","ultimate"],"category":["payments"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3.3.0 (2024-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Compatibility with WPForms 1.8.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.8.6.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3.2.0 (2023-11-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Minimum WPForms version supported is 1.8.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3.1.0 (2023-09-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Stripe Pro 3.1.0. Failure to do that will disable WPForms Stripe Pro functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Stripe Pro 3.1.0. Failure to do that will disable WPForms Stripe Pro functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Multiple Subscription Plans can now be configured on the Builder screen!<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: The now deprecated wpmu_new_blog<\/code> hook was replaced with the wp_initialize_site<\/code> hook.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Stripe payment's country field was cropped off.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3.0.1 (2023-06-13)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Stripe Credit Card field was preventing email notifications about form submission to be sent in certain scenarios.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3.0.0 (2023-05-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • IMPORTANT: A significant part of the addon has been moved to the WPForms plugin due to the new Stripe Payments feature.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with WPForms 1.8.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Minimum WPForms version supported is 1.8.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2.11.0 (2023-03-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added:\u00a0Compatibility of Stripe Payment Element with the upcoming WPForms 1.8.1.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Improved compatibility with Lead Forms addon.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Form was not scrolled to the CC Number, Date and CVV fields if validation for these fields failed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Stripe Credit Card with Payment Elements worked for a first payment form only, even though there was more than one form on the same page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Fields for verification code were not visible for Stripe Element with Link.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Placeholders and labels were overlapped for Stripe Element field after page refresh with multipage form.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Payment Element in Conversational Form was not set up properly on field activation.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2.10.0 (2023-02-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Stripe Payment Element and Payment Links are supported now!<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Minimum WPForms version supported is 1.8.0.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: The previous page on the multi-page form could not be opened without filling in the Credit Card Number field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Under certain circumstances, a PHP notice was raised when a payment form was submitted.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2.9.0 (2023-02-02)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • IMPORTANT: Support of the legacy way to collect payments is deprecated and is no longer supported. Payments continue to be processed but will stop working in the future. Please upgrade your forms to the new Stripe Credit Card field to avoid disruptions or failed payments.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: The Credit Card field didn't process validation when navigating between pages in a multi-page form.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Subscription amount could be incorrect for zero-decimal currencies.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: \"Enable Stripe payments\" prompt didn't work correctly for a restored form.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2.8.0 (2022-10-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed:\u00a0Minimum WPForms version supported is 1.7.7.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: The Stripe transaction URL for test mode had the wrong format on the Entry details page.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2.7.0 (2022-10-04)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Stripe Credit Card fields are not shown anymore if Stripe Payments are not enabled or Stripe Keys are not set.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Stripe completed payment notifications are sent for completed payments only.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Entries Search by Payments Details did not work for Stripe payments for users who upgraded from v2.5.0 to v2.6.0 or v2.6.1.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.6.1 (2022-07-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Some older migrations were running in incorrect order effectively breaking the Stripe integration by switching users to an older Stripe API version.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Because of the migration bug, explained above, the Stripe Credit Card field was unavailable in the Builder and was ignored on the front end.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2.6.0 (2022-07-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms Stripe. Failure to do that will disable the new WPForms Stripe functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Show settings in the Form Builder only if they are enabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Connect button UI improvements on Settings > Payments admin page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.7.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Certain strings were not translatable.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Improved performance on the WPForms Settings pages.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: The \"Name on Card\" placeholder value is not updated in the Form Builder preview.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Some fonts were not working properly with the Credit Card field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Compatibility with WordPress Multisite installations.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2.5.0 (2021-03-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: New \"Switch Accounts\" link in the addon settings to change the Stripe account used.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Filter to apply custom styles to a Credit Card field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Email Notifications option to limit to completed payments only.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Full object is now logged instead of just a message in case of a Stripe error.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Upgrade Stripe PHP SDK to 7.72.0.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Edge case when a subscription email is still being required despite changing the payment to single by conditional logic.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Invalid characters in font-family<\/code> added by external CSS rules may break the Credit Card field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Stripe form with active Captcha fails to submit after Stripe 3DSecure validation.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2.4.3 (2020-12-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Stripe Live\/Test modal appears when clicking on any checkbox in WPForms settings while using jQuery 3.0.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2.4.2 (2020-09-02)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Improved the error rate limiting by adding file-based rate-limiting log storage.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2.4.1 (2020-08-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Card field can be mistakenly processed as hidden under some conditional logic configurations.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2.4.0 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Stripe Elements locale can be set explicitly via the filter.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Improved Stripe error handling during form processing.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Conditionally hidden Stripe field should not be processed on form submission.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2.3.4 (2020-04-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: In some edge cases Stripe payment goes through without creating a form entry.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.3.3 (2020-01-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Payment form entry details are not updated despite Stripe payment completing successfully.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2.3.2 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Improved form builder messaging when Stripe plugin settings have no been configured.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Improved messaging on Stripe plugin settings.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2.3.1 (2019-10-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: PHP notice in WPForms settings if user has no Stripe forms.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Stripe Connect issues switching between Live\/Test mode.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2.3.0 (2019-09-18)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: SCA support.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Stripe Elements.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Stripe Connect.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Rate limiting for failed payments.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Complete translations for French and Portuguese (Brazilian).<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2.1.2 (2019-03-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Stripe API key settings display order, to follow Stripe documentation.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2.1.1 (2019-02-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.0.2 (2018-11-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Include addon information when connecting to Stripe API.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2.0.1 (2018-09-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Stripe API error<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2.0.0 (2018-09-04)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Important: The addon structure has been improved and refactored. If you are extending the plugin by accessing the class instance, an update to your code will be required before upgrading (use `wpforms_stripe()`).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Recurring subscription payments! ??<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Improved metadata sent with charge details.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Removed: wpforms_stripe_instance<\/code> function and WPForms_Stripe::instance()<\/code>.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.1.3 (2018-05-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Enable Credit Card field when addon is activated; as of WPForms 1.4.6 the credit card field is now disabled\/hidden unless explicitly enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.1.2 (2018-04-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Improved enforcement of Stripe processing with required credit card fields.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.1.1 (2017-08-24)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Remove JS functionality adopted in core plugin<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.1.0 (2017-08-01)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Use settings API for WPForms v1.3.9.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.9 (2017-06-13)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Improved performance when checking for credit card fields in the form builder<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.8 (2017-03-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Updated Stripe API PHP library<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Improved Stripe class instance accessibility<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.7 (2017-01-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Check for charge object before firing transaction completed hook<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.6 (2016-12-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Support for Dropdown Items payment field<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: New action for completed transactions, wpforms_stripe_process_complete<\/code><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: New filter stored credit card information, wpforms_stripe_creditcard_value<\/code><\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.5 (2016-10-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Javascript processing method to avoid conflicts with core duplicate submit prevention feature<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.4 (2016-08-25)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Expanded support for additional currencies<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Localization issues\/bugs<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.3 (2016-07-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Conditional logic for payments<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Improved error logging<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.2 (2016-06-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Prevent plugin from running if WPForms Pro is not activated<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.1 (2016-04-01)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: PHP notices with some configurations<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.0 (2016-03-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.6"},"form_builder":{"category":["payments"]},"settings_integrations":{"category":["payment"],"featured":true},"recommended":true,"icon":"addon-icon-stripe.png"},"wpforms-surveys-polls":{"title":"Surveys and Polls Addon","slug":"wpforms-surveys-polls","url":"https:\/\/wpforms.com\/addons\/surveys-and-polls-addon\/","version":"1.12.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2018\/02\/addon-icons-surveys-polls.png","excerpt":"The WPForms Survey Addon allows you to add interactive polls and survey forms to your WordPress site. It comes with best-in-class reporting to help you make data-driven decisions.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-surveys-and-polls-addon\/","id":148223,"license":["ultimate","agency","pro","elite"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.12.0 (2023-11-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms Surveys and Polls 1.12.0. Failure to do that will disable WPForms Surveys and Polls functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms Surveys and Polls 1.12.0. Failure to do that will disable WPForms Surveys and Polls functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Compatibility with WPForms 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: The help tooltip was removed in the Form Builder for consistency.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.11.0 (2023-03-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Compatibility with the upcoming WPForms v1.8.1 release.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Several new filters were added for developers to modify the output of survey results on the front end.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Improved the way various UI elements handle longer text in different languages.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Poll results had the same ID when there was more than one field.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: The Likert Scale field values used new lines inconsistently on the Entry view page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: The Survey Results page displayed an unstyled error message instead of an error page when the form contained no entries.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: The Likert Scale field with multiple responses per row was displaying incorrect values when editing an entry.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Cache was not cleared for all fields that support Survey Reporting after editing or deleting entries.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.10.0 (2022-09-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.7.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Likert and Net Promoter fields were broken in Block Editor in WordPress 5.2-5.4.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The compatibility with the Layout field was improved.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The Likert field was displayed incorrectly on mobile devices.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.9.0 (2022-08-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Improve formatting of Likert Scale entries on the Entries List and Single Entry pages.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Likert Scale field row\/column labels are now updated in the Form Builder preview as you type.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Reduced code complexity and replaced improperly used variable.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Fallback value for the Likert Scale field wasn't populated on page refresh after a failed form submission.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Survey results were broken on mobile.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Poll results were not shown correctly when the \"Enable Poll Results\" option was enabled for dynamic choices for several fields: Dropdown, Checkbox, and Multiple Choice.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.8.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed:\u00a0Minimum WPForms version supported is 1.7.4.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: WordPress 6.0 compatibility: Likert Scale and Net Promoter Score fields styling fixed inside the Full Site Editor.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Improved compatibility with WordPress Multisite installations.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Survey results were shown even if a form was no longer available.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.7.0 (2022-03-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Compatibility with WPForms 1.7.3 and Form Revisions.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Compatibility with WPForms 1.7.3 and search functionality on the Entries page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.7.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Incorrect styling of Likert Scale field with long labels.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.6.4 (2021-03-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Replaced jQuery.ready()<\/code> function with recommended way since jQuery 3.0.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: The \"Export Entries (CSV)\" link on the Survey Results page.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.6.3 (2020-12-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Poll results not displaying correctly with AJAX forms.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Form scrolls to the top when clicking on the Likert Scale field option with some themes.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Poll results incorrectly calculate a select field with multiple selections enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.6.2 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Survey report cache not always clearing when it should.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.6.1 (2020-04-16)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Compatibility check for WPForms v1.6.0.1.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.6.0 (2020-04-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Entry editing support for Net Promoter Score and Likert Scale fields.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Survey report image exports not containing white background color.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.5.1 (2020-03-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Compatibility with a new version of Choices.js library in WPForms core plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Abandoned form entries increase survey \"skipped\" count.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.5.0 (2020-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Support for Access Controls.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Improved messaging on Stripe plugin settings.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Properly display polls results votes count in a chart using `[wpforms_poll]` shortcode when there are thousands of replies.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Question numbering on single question print page.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.4.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: Display alert when entry storage is disabled and polls are enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.3.2 (2019-02-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: PHP notice when printing survey results.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.3.1 (2019-02-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.3.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.2.2 (2018-12-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Likert and NPS field display priority in the form builder.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.2.1 (2018-10-19)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Typos with NPS form templates.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.2.0 (2018-08-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Net Promoter Score survey form templates.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.1.0 (2018-06-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Net Promoter Score field and reporting.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Minor styling adjustments to Likert to improve theme compatibility.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Survey report print preview issue hiding empty fields.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Not Recognizing false poll shortcode attribute values<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.0 (2018-02-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.5"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-surveys-polls.png"},"wpforms-user-journey":{"title":"User Journey Addon","slug":"wpforms-user-journey","url":"https:\/\/wpforms.com\/addons\/user-journey-addon\/","version":"1.2.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2020\/11\/addon-icon-user-journey.png","excerpt":"Discover the steps your visitors take before they submit your forms. Right in the WordPress dashboard, you can easily see the content that\u2019s driving the most valuable form conversions.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-user-journey-addon-in-wpforms\/","id":1071426,"license":["agency","elite","pro","ultimate"],"category":[],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.2.0 (2023-11-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms User Journey 1.2.0. Failure to do that will disable WPForms User Journey functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms User Journey 1.2.0. Failure to do that will disable WPForms User Journey functionality<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Minimum WPForms version supported is 1.8.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.1.0 (2023-08-22)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Improved compatibility with PHP 8.1.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: The user journey was not saved when a user visited a page with quote marks in the page title.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.6 (2022-10-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: No user journey details were added to new entries after clean installation.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.5 (2022-10-04)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: The {entry_user_journey}<\/code> smart tag was not rendered in re-sent email notifications when this action was performed on the single Entry view page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: A fatal error occurred during the addon activation when the core plugin was inactive.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.4 (2022-09-29)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.7.7.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: The new {entry_user_journey}<\/code> smart tag wasn't displayed in a list of available smart tags.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.3 (2022-09-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: User Journey smart tag for Confirmation message and Notification Email (HTML and plain text).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: The addon was generating too big cookies that in certain cases resulted in site being non-operational.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.2 (2022-02-10)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Improved compatibility with PHP 8.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Issue with JavaScript code on front-end in Internet Explorer 11.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.1 (2021-03-31)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Issue with JavaScript code for collecting data in cookies in Safari v14.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.0 (2020-11-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.5"},"form_builder":{"category":[]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-user-journey.png"},"wpforms-user-registration":{"title":"User Registration Addon","slug":"wpforms-user-registration","url":"https:\/\/wpforms.com\/addons\/user-registration-addon\/","version":"2.5.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/05\/addon-icon-user-registration-1.png","excerpt":"The WPForms User Registration addon lets you create custom user registration, password reset, and login forms for your website.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-user-registration-addon-with-wpforms\/","id":3280,"license":["ultimate","agency","pro","elite"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.5.0 (2024-01-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: The minimum supported WPForms version is 1.8.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: The encoded value of the Password field did not work with custom User Login Page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: The encoded value in the password did not work with the User Registration Form and Reset Password Form.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2.4.0 (2023-11-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Compatibility with WPForms 1.8.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Minimum WPForms version supported is 1.8.5.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2.3.0 (2023-10-24)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • IMPORTANT: Support for PHP 5.6 has been discontinued. If you are running PHP 5.6, you MUST upgrade PHP before installing WPForms User Registration 2.3.0. Failure to do that will disable WPForms User Registration functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • IMPORTANT: Support for WordPress 5.4 and below has been discontinued. If you are running any of those outdated versions, you MUST upgrade WordPress before installing WPForms User Registration 2.3.0. Failure to do that will disable WPForms User Registration functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed: Minimum WPForms version supported is 1.8.4.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Email notifications controls in the Form Builder were misaligned.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Compatibility with our new Calculations addon.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2.2.0 (2023-08-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Changed: The {site_name}<\/code> smart tag has been moved to the main WPForms plugin.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2.1.2 (2023-07-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Compatibility with WPForms Access controls.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2.1.1 (2023-07-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Username validation displayed a misleading error message when the username was automatically created from the email address.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2.1.0 (2022-08-29)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Added: User data can now be modified before the user registration using the new wpforms_user_registration_process_registration_get_data<\/code> filter.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Validation function for a form ID when Smart Tags are processed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Treat empty post titles and term names in Dynamic Choices the way WordPress does.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: Minimum WPForms version supported is 1.7.6.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Registration form: Conditional Logic didn't work properly.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Activation link was missed in an email if Confirmation setting was used for Email field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2.0.0 (2021-12-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: New Password Reset form template.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: New smart tags.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Ability to hide a form if the user logged in.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Registration form: enable auto-login.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Registration form: editing for email notifications (subject and message body lines).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Registration form: user activation message when already activated.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Registration form: Conditional Logic support.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: New option for site administrators to resend user activation email from the Users page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Modern Email templates support.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Login Form template now has the option to enable \"remember me\" functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Registration functionality is available on any form.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Improved compatibility with WPForms Post Submissions and payment addons.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Improved compatibility with jQuery 3.5 and no jQuery Migrate plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Improved translations by removing confusion if non-translatable placeholders are used.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Sending registration emails to user\/admin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Set an attachment author for files uploaded through a File Upload field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.3.3 (2020-12-17)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Enable antispam protection by default for all newly created forms using the User Login Form template.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Edge case where user account would be created if late form error was registered via custom code or third-party plugin.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.3.2 (2020-08-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: New filter around user meta processing for advanced customizing.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.3.1 (2020-03-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Incompatibility with Post Submissions addon.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.3.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Name field in Simple format does not pass data to user's profile.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.2.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Always show forms with Login template inside Gutenberg.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Typos, grammar, and other i18n related issues.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: nickname<\/code> user meta unable to be assigned after user registration..<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.1.2 (2018-12-20)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Remove functions deprecated in PHP 7.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.1.1 (2018-11-12)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: User account created when form contains errors.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.1.0 (2018-05-14)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Typo in user activation email.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.9 (2017-12-19)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Login form did not set proper cookie for https:\/\/ sites<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.8 (2017-08-21)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Changed: Template uses new `core` property so it displays with other core templates<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.7 (2017-08-01)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Form builder alert containing misspelling<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.0.6 (2017-02-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Capitalized letters not being allowed in custom user meta keys<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.5 (2016-12-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Emails sent to site admin\/user on account creation now use HTML email template<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: For new registration forms, the Username field is no longer required; email address used as fallback<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Additional user data is passed to wpforms_user_registered<\/code> action<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.4 (2016-10-24)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Setting for login form template that was not displaying<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.3 (2016-10-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Misnamed function causing errors<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.2 (2016-09-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: Errors indicating username\/email already exist are now filterable<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: User registration and login form templates load order so it shows after default templates<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.1 (2016-06-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: New filters to allow for email customizations<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Prevent plugin from running if WPForms Pro is not activated<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.0 (2016-05-19)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.5","php":"7.0","wpforms":"1.8.6"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-user-registration.png"},"wpforms-webhooks":{"title":"Webhooks Addon","slug":"wpforms-webhooks","url":"https:\/\/wpforms.com\/addons\/webhooks-addon\/","version":"1.3.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2020\/07\/addon-icon-webhooks-1.png","excerpt":"The WPForms Webhooks addon allows you to send form entry data to secondary tools and external services. No code required, and no need for a third party connector.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-webhooks-addon-with-wpforms\/","id":901410,"license":["elite","ultimate","agency"],"category":["settings"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.3.0 (2023-08-15)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Changed:\u00a0Minimum WPForms version supported is 1.8.3.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Long labels of the webhooks configuration in the Form Builder were moving to the next row.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.2.1 (2023-07-03)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed:\u00a0Compatibility with WPForms 1.8.2.2.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.2.0 (2022-05-26)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • IMPORTANT:\u00a0Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing the new WPForms Webhooks. Failure to do that will disable the new WPForms Webhooks functionality.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Minimum WPForms version supported is 1.7.4.2.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Changed: Extend hook arguments: make it possible to use formatted field values.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.1.0 (2021-10-28)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Process smart tags inside Request Headers and Body fields.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Added: Compatibility with WPForms 1.6.8 and the updated Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Improved compatibility with jQuery 3.5 and no jQuery Migrate plugin.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Changed: Improved compatibility with WordPress 5.9 and PHP 8.1.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Compatibility with WordPress Multisite installations.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Improve the way webhooks are disabled and displayed when disabled.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Incorrect width of setting fields in Safari.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: Issue with saving settings.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.0 (2020-07-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.8.3"},"form_builder":{"category":["settings"]},"settings_integrations":{"category":[],"featured":false},"recommended":false,"icon":"addon-icon-webhooks.png"},"wpforms-zapier":{"title":"Zapier Addon","slug":"wpforms-zapier","url":"https:\/\/wpforms.com\/addons\/zapier-addon\/","version":"1.5.0","image":"https:\/\/wpforms.com\/wp-content\/uploads\/2016\/08\/icon-provider-zapier.png","excerpt":"The WPForms Zapier addon allows you to connect your WordPress forms with over 6,000+ web apps. The integration possibilities here are just endless.","doc":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-zapier-addon-with-wpforms\/","id":9141,"license":["elite","ultimate","agency","pro"],"category":["providers"],"changelog":["

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.5.0 (2023-04-05)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Added: The Site URL needed for Zapier configuration is now displayed inside the Form Builder and on the Settings > Integrations page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: More addon strings are now translatable.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Zapier external assets are now lazy-loaded on demand, only when needed inside the Form Builder.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: The Edit Zap link is removed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Fixed: Texts in various places were rephrased and typos were fixed.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.4.0 (2022-08-29)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Minimum WPForms version supported is 1.7.5.5.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Changed: Updated the Zapier logo.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Incorrect URL to the documentation article was used on the Settings > Integrations page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Multi-select dropdown field options were not comma separated.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: '0' values were not processed correctly.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Fixed: Files were not properly uploaded to Zapier when more than 1 file was uploaded using a modern style file upload field.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.3.0 (2020-12-11)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Added: Popular Zap templates inside the form builder Zapier settings area.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.2.0 (2019-07-23)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Added: Complete translations for French and Portuguese (Brazilian).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Fixed: Incorrect checkbox value is passed to Zapier with \"Show values\" option enabled.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.1.0 (2019-02-06)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Added: Complete translations for Spanish, Italian, Japanese, and German.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Fixed: Typos, grammar, and other i18n related issues.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.0.6 (2018-01-07)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Entry ID not correctly passing to Zaps.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Fixed: Empty Checkbox field choice labels causing PHP error.<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.0.5 (2017-10-25)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: \"Live\" Zap status setting not updating correctly<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Fixed: \"Edit this Zap\" link incorrect\/broken<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.0.4 (2017-09-27)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Changed: All HTTP requests now validate target sites SSL certificates with WP bundled certificates (since 3.7)<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Properly decode forms name before sending them to Zapier to display<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Update function incorrectly named which could cause conflicts with MailChimp addon<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Fixed: Visual display of connected forms on Settings > Integrations page<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.0.3 (2017-03-09)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Changed: Adjust display order so that the providers show in alphabetical order<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.0.2 (2016-12-08)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Added: Support for Dropdown Items payment field<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.0.1 (2016-09-02)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Fixed: Error with Zapier custom field polling<\/li><\/ul>","

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.0.0 (2016-08-30)<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Initial release.<\/li><\/ul>"],"required_versions":{"wp":"5.2","php":"5.6","wpforms":"1.7.5.5"},"form_builder":{"category":["providers"]},"settings_integrations":{"category":["crm","email-marketing"],"featured":true},"recommended":false,"icon":"addon-icon-zapier.png"}} \ No newline at end of file diff --git a/static/wp-content/uploads/wpforms/cache/email-summaries.json b/static/wp-content/uploads/wpforms/cache/email-summaries.json deleted file mode 100644 index e6b8452..0000000 --- a/static/wp-content/uploads/wpforms/cache/email-summaries.json +++ /dev/null @@ -1 +0,0 @@ -{"521223":{"title":"Get More Leads","content":"Form abandonment is one of the biggest challenges you need to tackle to grow your business online.\r\n\r\nUsing the Form Abandonment Addon, you can save partial form submissions and follow up with those interested prospects with an abandonment email, even if they didn\u2019t complete the entire form. This is a smart way to invite them back to complete the form so they don\u2019t forget about you.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/addons\/form-abandonment-addon\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521223","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521223},"521225":{"title":"Give Your Forms a Fresh Look","content":"By default, your forms display fields in one column. With multi-column layout, each field has a layout setting that lets you customize how your fields are displayed.\r\n\r\nFor instance, with the multiple choice field, you can select 1, 2, or 3 columns to display your choices inside of.","button":"LEARN MORE","url":" https:\/\/wpforms.com\/docs\/how-to-create-multi-column-form-layouts-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521225","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521225},"521230":{"title":"Display a Message After Users Submit","content":"With the conditional form confirmations feature you can do things like add a Thank You note after a customer makes a purchase or donates to your cause, then provide them with next steps.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-create-conditional-form-confirmations\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521230","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521230},"520212":{"title":"Improve Your Form Completion Rates","content":"

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Conversational Forms by WPForms is the first true interactive form layout built exclusively for WordPress that is guaranteed to boost form completion and your overall form conversions.<\/p>\r\n\r\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Instead of asking all twenty questions at once, Conversational Forms takes the\u00a0one question at a time approach<\/strong>\u00a0similar to a face-to-face conversation.<\/p>","button":"LEARN MORE","url":"https:\/\/wpforms.com\/addons\/conversational-forms-addon\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=520212","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":520212},"521237":{"title":"Boost Form Completion Rates","content":"Sometimes, your forms need to collect a lot of information.\r\n\r\nIn this case, use the easy drag and drop builder to break long forms into multi-page forms and quickly improve user experience.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-create-multi-page-forms-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521237","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521237},"521239":{"title":"Customize Your Form Progress Bar","content":"Change the look of your Multi-Page Forms by customizing the Progress Indicator, also known as Breadcrumbs.\r\n\r\nWPForms offers 3 different types of breadcrumb layouts for you to choose from for your forms. Plus, you can even change the color to keep the branding of your website consistent.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-create-multi-page-forms-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521239","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521239},"521246":{"title":"Supercharge Your Forms","content":"You can do some truly amazing things with the power of Zapier + WPForms!\r\n\r\nZapier is a connector service that helps you integrate your forms to 1,400+ apps so you can get more done, faster.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/addons\/zapier-addon\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521246","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521246},"521249":{"title":"Create Distraction-Free Landing Pages","content":"One of the biggest reasons why people abandon your website without filling out your form is distraction.\r\n\r\nUse the Form Pages Addon to create completely customized and distraction-free landing pages to boost your conversions.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/form-pages-demo\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521249","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521249},"521259":{"title":"Use Ready-To-Go Forms","content":"With just one click, you can import a form demo template from nearly every niche and industry.\r\n\r\nTry using the Form Templates Pack Addon as a quick and simple hack to set up an already fully functioning and ready-to-go form today.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-form-templates-pack-addon\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521259","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521259},"521261":{"title":"Make Your Forms Private","content":"Want to increase the overall quality of your form submissions? You can set up a password using the Form Locker Addon to make sure only visitors with that password can submit to your form.\r\n\r\nYou may want to do this for a lot of reasons, including collecting reviews, success stories, or if you\u2019re accepting guest posts on your blog.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/how-to-password-protect-wordpress-forms-step-by-step\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521261","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521261},"521266":{"title":"Add Images to Your Fields","content":"If you\u2019d like to make your forms super visual, consider adding images to your forms. A great idea for order forms.\r\n\r\nWPForms makes it simple to add images to your Checkboxes, Multiple Choice, and items fields so your users can see the option or item you\u2019ve listed. That way, they can make sure they are selecting exactly what they want.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-add-image-choices-to-fields\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521266","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521266},"521269":{"title":"Find Where Your Form Users Come From","content":"You can add a Smart Tag to a Hidden Field on your form to unlock hidden user data. Smart Tags can save you time by allowing you to include useful details in your forms.\r\n\r\nFor instance, by adding the {url_referer} Smart Tag, your form will automatically insert the address of the page which referred the user to the page containing the form.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-use-smart-tags-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521269#url","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521269},"521272":{"title":"Close Forms Automatically","content":"The Form Locker Addon has tons of helpful hacks inside of it, including the ability to close forms at a specific date and time.\r\n\r\nThis is a great tool for things like job applications or any other time-sensitive forms.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-form-locker-addon-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521272","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521272},"521278":{"title":"Want GDPR Compliant Forms?","content":"Want to make sure your forms are compliant with the European Union\u2019s General Data Protection Regulation? We've got you covered.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-create-gdpr-compliant-forms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521278","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521278},"521282":{"title":"Terms of Service or Privacy Policy Too Long?","content":"You can make a scrollable Terms of Service easily! With rising privacy concerns, and the fact that privacy laws are getting more strict, we want to make it easy for you to comply and let your site visitors know their data is protected.\r\n\r\nWith a scrollable Terms of Service, you can make sure that adding your site\u2019s privacy policy or Terms of Service doesn\u2019t take away from the visual appeal of your form.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-add-a-terms-of-service-checkbox-to-a-form\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521282","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521282},"521287":{"title":"Prevent Spam","content":"We know spam is a giant issue for contact forms. So, you can use the custom CAPTCHA feature to protect your forms from spam. The Custom Captcha Addon lets you set your own questions and answers to show your visitors.\r\n\r\nOr, you can add random math questions to make sure a user is a real human. No one wants fake form submissions!","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-custom-captcha-addon-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521287","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521287},"521289":{"title":"Gather More Reliable Data","content":"Worried people are picking specific choices on your multiple choice fields\u00a0 just because one is at the top? Maybe you\u2019ve noticed a pattern where one answer is getting picked a lot.\r\n\r\nThis could happen because of something called Order Bias. So we made it easy to avoid any sort of answer bias by using randomization.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-randomize-checkbox-and-multiple-choice-options\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521289","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521289},"521293":{"title":"Avoid Multiple Entries","content":"With the Form Locker Addon, you can limit one entry per person on your forms and avoid duplicate submissions.\r\n\r\nThis can be really useful for scholarship applications, giveaways, and more.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/how-to-limit-the-number-of-wordpress-form-entries\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521293","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521293},"521295":{"title":"Re-Use Your Forms","content":"Love the way one of your forms works, looks, and converts and want to re-use it on another website you own?\r\n\r\nWPForms lets you do this with the Form Export feature so you don't have to start from scratch to build a form you already know you love.\r\n\r\n ","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-import-and-export-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521295#export-forms","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521295},"521300":{"title":"Create Forms Fast","content":"Want to add a bunch of choices to your Multiple Choice fields all at once? The Bulk Add option lets you quickly add a long list of items as options in your Multiple Choice fields.\r\n\r\nThis works great if you\u2019ve got a long list of products or departments and you\u2019re asking your visitor to select just one.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-bulk-add-choices-for-multiple-choice-checkbox-and-dropdown-fields\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521300","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521300},"521310":{"title":"Need More Content for Your Blog?","content":"Accepting guest post submissions is a great way to consistently get fresh content for your site.\r\n\r\nThe WPForms Post Submissions Addon makes it easy to collect user-submitted content in WordPress without users ever having to log in to your website\u2019s admin area.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-post-submissions-addon-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521310","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521310},"521313":{"title":"Allow WordPress Users to Register Themselves","content":"If you want to allow user registration on your WordPress site, you can quickly do this by creating a user registration form in WordPress that allows users to fill in the necessary information themselves.\r\n\r\nThe User Registration Addon lets you set this up in just minutes.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/how-to-create-a-user-registration-form-in-wordpress\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521313","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521313},"521316":{"title":"Get More Mobile Leads","content":"All forms created with WPForms are completely responsive and mobile-friendly. But did you know that you can easily add a field for a signature with the WPForms Signature Addon?\r\n\r\nBest of all, the Signature Addon is mobile-friendly, meaning you\u2019ll get more form completions, less form abandonment, and be able to your online business even faster.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-signature-addon-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521316","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521316},"521324":{"title":"Get Paid in Multiple Ways","content":"You can use both the Stripe Addon and the PayPal Standard Addon to collect payments. But did you know that you can set up your forms to let your website visitors pick from either<\/strong> payment, right on your form?\r\n\r\nWith Conditional Logic, you can give your visitors more ways to pay you so you can get more money from your site.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-allow-users-to-choose-a-payment-method-on-your-form\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521324","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521324},"521328":{"title":"Boost Your Website Income","content":"Setting up Recurring Payments with Conditional Logic + the Stripe Addon can help you earn even more.\r\n\r\nLet visitors choose between One Time or Recurring Payments.\r\n\r\nMeaning more money for you and your small business, time and again.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/how-to-accept-recurring-payments-on-your-wordpress-forms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521328","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521328},"521330":{"title":"See Where Your Leads Are Coming From","content":"You can activate Geolocation to learn more about your audience. Your user\u2019s country, state, and city information will be stored along with their submission.\r\n\r\nThe more you know about your website visitors, the easier it is to turn more of them into customers with added insight into where they live.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-use-the-geolocation-addon-with-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521330","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521330},"521332":{"title":"Create Connections with Your Audience","content":"Do you see your logo at the top of this email?\r\n\r\nA simple but super smart way to make your services stand out is by using branded email notifications. You can add your logo or any image you choose to display on your email notifications.\r\n\r\nThis way, when a customer or anyone on your team gets an email notification from your forms, they\u2019ll see the image you want them to see. You can help build trust and a relationship right inside your email notification.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-add-custom-header-image-in-your-wpforms-email-template\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521332","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521332},"521335":{"title":"Get to Know Your Customers","content":"Did you know you can use NPS Surveys to learn about your visitors? Net Promoter Score Surveys can give you valuable visual insights into what\u2019s happening with your business based on customer perception of your brand.\r\n\r\nNPS Surveys are used by some of the biggest brands around. They help you to better gauge customer loyalty and make your business more successful.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/how-to-create-a-net-promoter-score-nps-survey-in-wordpress\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521335","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521335},"521337":{"title":"Organize Events","content":"Are you planning a party or event? Then you should definitely be using a WPForms RSVP form. It\u2019s an easy way to grow your business online while also finding out who is attending your event and who isn't.\r\n\r\nAnd not to mention, making the RSVP process easy for your guests makes it easier for them to respond. You\u2019ll get a higher response rate by sharing a link to confirm rather than asking for their replies via snail mail.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/how-to-create-an-rsvp-form-in-wordpress\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521337","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521337},"521339":{"title":"Collect More Leads","content":"With the Offline Forms Addon, you\u2019ll never lose data or leads again just because someone lost their internet connection and gave up on sending you their information.\u00a0\u00a0The Offline Forms Addon allows your users to save their entered data offline. Then, they can submit it when their internet connection is restored.\r\n\r\nThis could be super helpful for you to use yourself, too. For example, if you\u2019re at a trade show collecting leads in person and the event has a spotty Wi-Fi connection.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-install-and-set-up-the-offline-forms-addon\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521339","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521339},"521175":{"title":"Improve Your Form Questions","content":"You can easily show or hide something to a website visitor on your forms once they select something that triggers this with Smart Conditional Logic. <\/span>\r\n\r\nIt\u2019s easy to customize forms to have fields automatically show or hide other fields depending on a user\u2019s selection.<\/span>","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-use-conditional-logic-with-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521175","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521175},"527323":{"title":"Create Forms That Don't Reload When Submitted","content":"Keeping a page from refreshing after someone submits on a form makes for an excellent user experience and can even help you get more leads. Ajax-enabled forms are becoming a must-have for websites of all sizes.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/wordpress-ajax-contact-form\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=527323","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":527323},"521212":{"title":"Send Form Notifications to the Right People","content":"With Conditional Notifications, you can send out different emails to different people \/ departments depending on what a user selects on your form.\r\n\r\nFor example, if a user is submitting a complaint and selects that they had an issue with billing, you could have an email go out to a billing coordinator from your team.","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-create-conditional-form-notifications-in-wpforms\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521212","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521212},"521214":{"title":"Redirect Users After They Submit","content":"Did you know you can show visitors different web pages based on which form they submit on your website?\r\n\r\nYou can apply conditional rules to trigger different things to take place when someone submits to your form!","button":"LEARN MORE","url":"https:\/\/wpforms.com\/docs\/how-to-create-conditional-form-confirmations\/?utm_source=WordPress&utm_medium=email&utm_campaign=Email+Summaries&utm_content=521214","type":["ultimate","agency","lite","basic","plus","pro","elite"],"id":521214}} \ No newline at end of file diff --git a/static/wp-content/uploads/wpforms/cache/index.html b/static/wp-content/uploads/wpforms/cache/index.html deleted file mode 100644 index e69de29..0000000 diff --git a/static/wp-content/uploads/wpforms/cache/index.php b/static/wp-content/uploads/wpforms/cache/index.php deleted file mode 100644 index a26d655..0000000 --- a/static/wp-content/uploads/wpforms/cache/index.php +++ /dev/null @@ -1,3 +0,0 @@ -