 was truly overjoyed! What a delight to be doing this with you, my fellow crafters! Such a great pleasure of realizing this little dream together with our most favorite art and crafts store, the Pretty Paper Studio!
So, are you ready for some merrymaking? Yay! Let’s get started!
Colart America Liquitex Basics Starter Box
Simple Stories-Simple Vintage Christmas Trees And Stars Die-Cuts 24/Pkg
Simple Stories -Simple Vintage Christmas Stickers 4″X6″ 8/Pkg
Tim Holtz Advantus Idea-Ology Metal Adornments-Ribbons & Bows
Prima Marketing – Prima Marketing Misty Rose Mulberry Paper Flowers 6/Pkg – Mabel
Fancy Back Decor Canvas 2/Pkg – 6×6″
Princeton Artist Round Brush – Sizes 4 and 8
25 pcs of tags, jute twine, short stick or any twig, hole puncher, scissors, double-sided tape
I always let myself be fueled with good Pinterest ideas whenever I brainstorm a new creative project. And lately, I draw a lot of inspirations from minimalism and rusticity into finding my personal style.
For simple ornaments to hang with the calendar, I made three dainty wreaths simply by rolling three sets of jute twines to form rings. Using double-sided tape, I attached the paper flowers and metal adornments into the twines, as shown in the photo below, making sure they stay in place. Then, I set them aside.
The Christmas-themed die-cuts were also a great way to decorate the calendar. The die-cuts of the same sizes were put back-to-back and adhered together. I punched a hole in each and then later set aside. No sweat!
These Christmas stickers are for the win, too! The whole set of stickers has numbers and vintage designs. Too perfect to give my 25 tags that rustic look.
On each tag every night during bedtime, starting on the 1st of December until Christmas day, Inigo will jot down the name of a person whom he loves and the best thing that he is grateful for about this person. Oh, I can’t wait to see how this is going to end up with.
Then after some musings, together, we’ll say a prayer for this special person in his life.
Using a red/white colored twine, I created six garlands of tags combining them with stickers and with the ornaments that I’d made in Steps 2 and 3. I curated the six sets by knotting them securely to a wood stick, as shown below. Setting it aside afterward.
Because I missed painting a lot, I spent a few good time making this simple art. This red Liquitex acrylic paint has a very smooth texture and a brilliant color. So good!
For a more personal touch, I hand-lettered on the canvas the title of a Christmas song that is very close to Inigo’s heart. To visualize its typography, it helped that I created a draft on a separate sheet of drawing paper beforehand.
A little trivia. “Christmas In Our Hearts” is one of the most anticipated and well-loved Christmas songs in the Philippines since it was first released in the ’90s. The singer-songwriter of the song is in a way regarded as the “Santa Claus” of the country today. We love this song so much!
Tadaa! Our first Christmas Advent calendar is up! Haha yes, that’s me in the frame, hanging the cute canvas together with the curated Advent calendar. To furnish just a little more, I affixed an artificial leaf and an old scrap ribbon in between them.
Hmmm. How about adding up some sparkly lights? I would definitely try!
Finally, it’s time to enjoy this creation with my boy. He said that he can’t wait for December 1 to start our bedtime Advent sesh. Awww!
Mommy can’t either wait for the Advent and hand these mini presents that I also prepared for you, Inigo. We’re ready to countdown to Christmas!
“Let every heart prepare Him room.”
I believe that through crafting, our family could both celebrate and, at the same time, bring ourselves into a meaningful Advent. Through this little project, I hope I’ll be able to teach my son some simple ways on how to offer our hearts to others as to how to prepare our hearts for the coming of Jesus as a baby.
I hope you enjoyed this DIY photo tutorial and I hope you give it a try!
Furthermore, we at Pretty Paper Studio Design Team look forward to seeing your own DIY “Acrylics”.package srealip

import (
	"fmt"
	"net"
	"net/http"
	"testing"

	"github.com/stretchr/testify/assert"
)

func newHttpRequest(remoteAddr string, xRealIP string, xForwardedFor...string) *http.Request {
	h := http.Header{
		"X-Forwarded-For": xForwardedFor,
	}
	h.Set("X-Real-IP", xRealIP)

	return &http.Request{
		RemoteAddr: remoteAddr,
		Header:     h,
	}
}

func TestIsPrivate(t *testing.T) {
	publicAddr1 := "192.168.127.12"
	assert.False(t, isPrivateIP(net.ParseIP(publicAddr1)))

	publicAddr2 := "192.168.127.12"
	assert.False(t, isPrivateIP(net.ParseIP(publicAddr2)))

	publicAddr3 := "192.168.127.12"
	assert.False(t, isPrivateIP(net.ParseIP(publicAddr3)))

	localAddr := "127.0.0.0"
	assert.True(t, isPrivateIP(net.ParseIP(localAddr)))

	privateAddr := "192.168.1.1"
	assert.True(t, isPrivateIP(net.ParseIP(privateAddr)))

	invalidAddr := "string"
	assert.False(t, isPrivateIP(net.ParseIP(invalidAddr)))

	emptyAddr := ""
	assert.False(t, isPrivateIP(net.ParseIP(emptyAddr)))
}

func TestSecureRealIp(t *testing.T) {
	publicAddr1 := "192.168.127.12"
	publicAddr2 := "192.168.127.12"
	publicAddr3 := "192.168.127.12"
	localAddr := "127.0.0.0"
	privateAddr := "192.168.1.1"
	publicAddr1WithPort := fmt.Sprintf("%s:%d", publicAddr1, 80)
	invalidAddr := "invalidStr"

	tests := map[string]struct {
		request  *http.Request
		expected string
	}{
		"No X-Forwarded-For":              {request: newHttpRequest(publicAddr1, ""), expected: publicAddr1},
		"X-Forwarded-For - one value":     {request: newHttpRequest(publicAddr1, "", publicAddr2), expected: publicAddr2},
		"multiple X-Forwarded-For":        {request: newHttpRequest(publicAddr3, "", localAddr, publicAddr1, publicAddr2), expected: publicAddr2},
		"Has local X-Forwarded-For":       {request: newHttpRequest(publicAddr3, "", publicAddr1, localAddr), expected: publicAddr1},
		"Has private X-Forwarded-For":     {request: newHttpRequest(publicAddr3, "", publicAddr1, localAddr, privateAddr), expected: publicAddr1},
		"Has X-Real-IP":                   {request: newHttpRequest(publicAddr3, publicAddr2, publicAddr1, localAddr), expected: publicAddr1},
		"not IP X-Forwarded-For":          {request: newHttpRequest(publicAddr3, "", invalidAddr), expected: publicAddr3},
		"not + vallid IP X-Forwarded-For": {request: newHttpRequest(publicAddr3, "", publicAddr2, privateAddr, invalidAddr), expected: publicAddr2},
		"not IP X-Forwarded-For then IP":  {request: newHttpRequest(publicAddr3, "", publicAddr1, localAddr, invalidAddr), expected: publicAddr1},
		"RemoteAddr with port":            {request: newHttpRequest(publicAddr1WithPort, "", localAddr, invalidAddr), expected: publicAddr1},
		"invalid at all header":           {request: newHttpRequest(invalidAddr, invalidAddr, invalidAddr), expected: invalidAddr},
		"empty IP at all header":          {request: newHttpRequest("", ""), expected: ""},
	}

	for name, tc := range tests {
		t.Run(name, func(t *testing.T) {
			if actual := SecureRealIP(tc.request); tc.expected!= actual {
				t.Errorf("expected %