Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Allow usage of static encryption key - #114

Open
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master
Open

Allow usage of static encryption key#114
Skullsneeze wants to merge 1 commit into
extdn:masterfrom
Skullsneeze:master

Conversation

@Skullsneeze

Copy link
Copy Markdown

Magento allows you to specify an encryption key during the application installation. This PR aims to provide this same ability during the setup.

The reason behind this is that a client has a specific test case that relies on data generated using an encryption key. This data is partially stored (statically) in an external service. To ensure the correct outcome I need to be able to specify the encryption key so the resulting encrypted value is not random.

@fooman

fooman commented Apr 3, 2024

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Have you tried changing this with the pre/post install script already? Another thought is that you should be able to mock the encryption key value used in the decoder for your data in the individual integration test itself.

@Skullsneeze

Copy link
Copy Markdown
Author

Hi @fooman thanks for the quick response.

My initial thought was actually to set this in a post install script using the setup:config:set but that causes issues with serialized values.

I might be able to mock the decryptor, and will give this a go, but I figured that since this is an official setup:install argument it wouldn't hurt adding support for it either way 😊

@jissereitsma

Copy link
Copy Markdown
Contributor

I agree with @Skullsneeze - the PR is clean and does not seem to break anything, but just add things. And when it is handy, why not? @fooman ?

@Skullsneeze

Copy link
Copy Markdown
Author

FYI, I found that mocking and encryption are quite tricky (at least in the setup we're running). Alternatively I tried adjusting the config, but that is something which is protected by Magento's own integration test framework as it compares the config before and after each test is ran.

I ended up slightly restructuring my code and using Mockery to create a partial mock for one of the classes I was testing. I then created a specific method that would run the validation which uses the encryption and simply let it return true when called on the partial mock.

While it works I do think being able to test with the actual encryption key would be better so I do still think this PR adds value in that sense, but just letting you know that the pressure from my end is currently off ;)

@fooman

fooman commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Good stuff @Skullsneeze

And when it is handy, why not? @fooman ?

@jissereitsma happy for it to get merged, just wanted to make sure we don't add more and more options with things that could already be achieved with the existing options

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Skullsneeze@fooman@jissereitsma