<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pereira, Thiago Santos.</title>
	<atom:link href="https://thiagosantos.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://thiagosantos.com/blog/</link>
	<description>the fun of code.</description>
	<lastBuildDate>Sat, 02 Mar 2024 17:58:23 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5</generator>
	<item>
		<title>Microsoft Teams: Deeplink pro seu App através da Notificação</title>
		<link>https://thiagosantos.com/blog/856/javascript/microsoft-teams-deeplink-pro-seu-app-atraves-da-notificacao/</link>
					<comments>https://thiagosantos.com/blog/856/javascript/microsoft-teams-deeplink-pro-seu-app-atraves-da-notificacao/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Sat, 02 Mar 2024 17:47:33 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Deeplink]]></category>
		<category><![CDATA[Deeplink Microsoft Teams]]></category>
		<category><![CDATA[Microsoft Teams]]></category>
		<category><![CDATA[Notificação]]></category>
		<category><![CDATA[Teams]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=856</guid>

					<description><![CDATA[<p>Uma sacada de como passar parâmetros para o seu aplicativo no Microsoft Teams</p>
<p>The post <a href="https://thiagosantos.com/blog/856/javascript/microsoft-teams-deeplink-pro-seu-app-atraves-da-notificacao/">Microsoft Teams: Deeplink pro seu App através da Notificação</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Desenvolvendo recentemente um meio de integrar um aplicativo web já existente ao Microsoft Teams, me deparei com a necessidade de que a notificação do Teams ao direcionar para o aplicativo instalado dentro do Teams também passasse um parâmetro extra para que o aplicativo existente pudesse tratar esse parâmetro e redirecionar o usuário para área correta.</p>



<p>Foi custoso achar uma resposta para isso, mas acabei com a ajuda de um colega e dessa maravilhosa página <a href="https://microsoft.github.io/app-camp/aad/Deeplink/" target="_blank" rel="noreferrer noopener">https://microsoft.github.io/app-camp/aad/Deeplink/</a>  conseguir passar parâmetro para dentro da aplicação quando abre através da Notificação.</p>



<span id="more-856"></span>



<p>Quando você envia uma notificação para o usuário do seu aplicativo no Teams você tem a possibilidade de estabelecer duas formas de ao clicar na notificação o usuário ser direcionado para o seu aplicativo direto utilizando o source no item topic como text ou entityURL e passando o value ou o webUrl como no exemplo abaixo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
//Corpo do envio da notificação
//POST https://graph.microsoft.com/v1.0/teamwork/sendActivityNotificationToRecipients
{    
   &quot;topic&quot;: {
       &quot;source&quot;: &quot;entityUrl&quot;,
       &quot;value&quot;: &quot;https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teams_app_id}&quot;
   },

    &quot;activityType&quot;: &quot;novaNotificacao&quot;,
    &quot;previewText&quot;: {
        &quot;content&quot;: &quot;Temos uma nova informação para você!!&quot;
    },
    &quot;recipients&quot;: &#x5B;
        {
            &quot;@odata.type&quot;: &quot;microsoft.graph.aadUserNotificationRecipient&quot;,
            &quot;userId&quot;: &quot;617310a6-9d5d-4459-b268-07802596d419&quot;
        }
    ]
}
</pre></div>


<p>Utilizando o entityUrl é o jeito mais simples de ao clicar na notificação o seu usuário seja redirecionado para o seu aplicativo dentro do Teams. Acontece que através desse método não é possível passar parâmetros nem especificar em qual das abas do seu aplicativo você quer que abra inicialmente. O jeito é usar o modo text passando o weburl. O webURL é uma url do Teams que no entanto utiliza o ID do Teams que é gerado quando envia o aplicativo para a loja de aplicativos da organização, seguido do entityId é que a aba a qual você quer abrir dentro do seu aplicativo. No código abaixo fica mais fácil de entender.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
//Corpo do envio da notificação
//POST https://graph.microsoft.com/v1.0/teamwork/sendActivityNotificationToRecipients
{
    &quot;topic&quot;: {
        &quot;source&quot;: &quot;text&quot;,
        &quot;webUrl&quot;: &quot;https://teams.microsoft.com/l/entity/{uploaded_teams_app_id}/{entity_id}?context=%7B%22subEntityId%22:%22https://exemplo.com.br/timeline/post/1406%22%7D&quot;
    },
    &quot;activityType&quot;: &quot;novaNotificacao&quot;,
    &quot;previewText&quot;: {        
        &quot;content&quot;: &quot;Temos uma nova informação para você!!&quot;
    ]},   
    &quot;recipients&quot;: &#x5B;
        {
            &quot;@odata.type&quot;: &quot;microsoft.graph.aadUserNotificationRecipient&quot;,
            &quot;userId&quot;: &quot;617310a6-9d5d-4459-b268-07802596d419&quot;
        }
    ]
}
</pre></div>


<p>A sacada para o envio de um parâmetro seu para dentro do seu aplicativo é utilizar o parâmetro &#8220;context&#8221; onde um JSON no formato {&#8220;subEntityId&#8221;:&#8221;XXXXX&#8221;} é passado o valor do subEntityId que pode ser um valor número, uma string ou até um objeto é recuperado através do Teams JS SDK, mas para confusão geral o parâmetro dentro do objeto do contexto é &#8220;context.page.subPageId&#8221;, chora.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
//dentro da sua aplicação
//....
try{

    await app.initialize();
    const context = app.getContext();
    const parametro_passado = context.page.subPageId; //:)        

}
//...
</pre></div>


<p>Resumindo: você passa o contexto utilizando o subEntityId e recupera através do Teams JS SDK utilizando o objeto de contexto no &#8220;context.page.subPageId&#8221;.</p>



<p>Dai com o parâmetro em mãos você faz o que precisa fazer antes da aplicação carregar. No contexto você pode passar uma URL e configurar o seu app para redirecionar o parametro_passado com o valor da URl. Isso simplifica bastante o desenvolvimento e redirecionamento interno.</p>



<p></p>
<p>The post <a href="https://thiagosantos.com/blog/856/javascript/microsoft-teams-deeplink-pro-seu-app-atraves-da-notificacao/">Microsoft Teams: Deeplink pro seu App através da Notificação</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/856/javascript/microsoft-teams-deeplink-pro-seu-app-atraves-da-notificacao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rodando o Elastic Search no Docker</title>
		<link>https://thiagosantos.com/blog/788/docker/rodando-o-elastic-search-no-docker/</link>
					<comments>https://thiagosantos.com/blog/788/docker/rodando-o-elastic-search-no-docker/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Sun, 22 Oct 2023 22:03:20 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[ElasticSearch]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[elasticsearch]]></category>
		<category><![CDATA[installing docker]]></category>
		<category><![CDATA[rodando o docker]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=788</guid>

					<description><![CDATA[<p>Tive a impressão, lendo alguns tutoriais em português, que o material estava um tanto desatualizado. Isso me fez perder algum tempo tentando entender o que eu estava fazendo de errado até entender que: eu não estava fazendo nada errado. O passo a passo estava correto, mas a forma de chamar as APIs do Elastic Search [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/788/docker/rodando-o-elastic-search-no-docker/">Rodando o Elastic Search no Docker</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Tive a impressão, lendo alguns tutoriais em português, que o material estava um tanto desatualizado. Isso me fez perder algum tempo tentando entender o que eu estava fazendo de errado até entender que: eu não estava fazendo nada errado. O passo a passo estava correto, mas a forma de chamar as APIs do Elastic Search é que haviam mudados. Faço esse post para não me deixar esquecer de como funciona e também para facilitar a vida de quem quer subir um container local para desenvolvimento ou para brincar antes de jogar para produção.</p>



<span id="more-788"></span>



<h2 class="wp-block-heading"><strong>Instalando</strong></h2>



<p>É necessário que você já tenha o Docker instalado e rodando na sua máquina. Antes de começar o primeiro passo tenha certeza de que o Docker está rodando! Todas as instruções são via linha de comando e funcionam igualmente no PowerShell e no terminal do Linux (eu uso o Ubuntu 22.04).</p>



<p>O primeiro passo aqui é baixar a imagem do Elastic Search que atualmente está na 8.10.4. Vou usar o repositório de imagens do próprio Elastic pois no repositório do Docker a última versão é a 8.10.2 no dia de hoje e quero usar a última porquê sim. Você pode verificar outras versões aqui <a href="https://www.docker.elastic.co/r/elasticsearch">https://www.docker.elastic.co/r/elasticsearch</a>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.4
</pre></div>


<p>Se tudo der certo o resultado vai ser algo parecido com a imagem abaixo. No meu caso rodando no Ubuntu tive que rodar o comando com o<mark style="background-color:#e6e6e6" class="has-inline-color"> sudo </mark> .</p>



<figure class="wp-block-image size-full is-style-default"><img fetchpriority="high" decoding="async" width="810" height="298" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image.png" alt="Docker Pull na imagem do Elastic Search" class="wp-image-789" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image.png 810w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-300x110.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-768x283.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-624x230.png 624w" sizes="(max-width: 810px) 100vw, 810px" /><figcaption class="wp-element-caption">docker pull na imagem do Elastic Search</figcaption></figure>



<p>Podemos ver que na minha lista de imagens salvas localmente temos lá o Elastic Search na versão 8.10.4. Lembrando que no meu caso tive que adicionar o<mark style="background-color:#e6e6e6" class="has-inline-color"> sudo </mark>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
docker image ls
</pre></div>


<figure class="wp-block-image size-full"><img decoding="async" width="860" height="108" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-1.png" alt="Docker Image LS para listar as imagens baixadas e mostrando a imagem do Elastic Search" class="wp-image-793" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-1.png 860w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-1-300x38.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-1-768x96.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-1-624x78.png 624w" sizes="(max-width: 860px) 100vw, 860px" /></figure>



<h2 class="wp-block-heading">Rodando</h2>



<p>Até aqui todos os tutoriais foram bem. Alguns instalando diredo do repositório do Docker outros do repositório do ElasticSearch, mas daqui em diante é o que estava me confundindo um tanto, mas que vai ficar bem claro aqui.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
docker run --name elasticboladao -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.10.4
</pre></div>


<h3 class="wp-block-heading">Deu erro?</h3>



<p>Em alguns tutoriais o container subia e tudo funcionava magicamente bem, mas quando eu tentei encontrava alguns erros e que seguindo o tutorial me dava a entender de que eu estava fazendo alguma coisa errada. Seguindo o passo a passo até aqui dava um erro tanto rodando no Windows quanto rodando no Ubuntu, então se você rodou até aqui e se esbarrou com o erro <mark style="background-color:#f8ed04" class="has-inline-color">node validation exception\n[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.\nbootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]</mark> siga a recomendação abaixo, caso não tenha tido problema e o comando tenha rodado pode pular direto para o tópico &#8220;Testando&#8221;.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="246" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-2-1024x246.png" alt="Erro ao rodar o comando docker run com a imagem do Elastic Search" class="wp-image-815" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-2-1024x246.png 1024w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-2-300x72.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-2-768x184.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-2-1536x369.png 1536w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-2-624x150.png 624w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-2.png 1907w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Significa que você precisa aumentar o valor do vm.max_map_count para o valor minimo de 262144, como recomendando pelo Elastic Search. No Ubuntu basta rodar o comando baixo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sysctl -w vm.max_map_count=262144
</pre></div>


<p>Se você quiser deixar esse valor minimo definido como padrão no seu sistema sempre você só precisa editar o arquivo <mark style="background-color:#e6e6e6" class="has-inline-color">/etc/sysctl.conf</mark> e adicionar ao final dele o <em>vm.max_map_count=262144</em>.</p>



<h3 class="wp-block-heading">Deu bom?</h3>



<p>Se você não teve o problema acima, ou fez o ajuste necessário, depois de rodar o comando docker run e ao final da processo de inicialização do container você provavelmente vai ver essa tela na primeira.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="912" height="425" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-4.png" alt="Docker Run rodado com sucesso mostrando as informações de senha do Elastic Search e outras informações" class="wp-image-818" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-4.png 912w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-4-300x140.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-4-768x358.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-4-624x291.png 624w" sizes="(max-width: 912px) 100vw, 912px" /></figure>



<h2 class="wp-block-heading">Testando</h2>



<p>Esse foi um outro ponto confuso em que cheguei depois de seguir os tutoriais. O pessoal simplesmente lançava na URL <mark style="background-color:#e6e6e6" class="has-inline-color">http://localhost:9200</mark> e entrava com uma autenticação básica e conseguia fazer algumas consultas direto no navegador. No entanto temos ai duas possibilidade: No Windows, rodando o Docker Desktop com WSL ativado, não consegui acessar a URL diretamente pelo navegador. Só consegui fazer as requisições usando o Postman/Insomnia ou pelo CURL. No Ubuntu funcionou com https, mas não com o http e até aí tudo bem, pois não pretendo usar o navegador mesmo. Acessar via navegador era mais um teste simples para verificar se estava funcionando.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="851" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-5-1024x851.png" alt="Elastic Search sendo acessado via navegador na porta 9200" class="wp-image-820" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-5-1024x851.png 1024w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-5-300x249.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-5-768x638.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-5-624x518.png 624w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-5.png 1218w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Depois de autenticar com o usuário <mark style="background-color:#e6e6e6" class="has-inline-color">elastic</mark> e com a senha que é gerada quando o elastic é iniciado (da uma olhada na imagem do Deu Bom?).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="641" height="410" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-6.png" alt="Retorno efetivo com as informações do Elastic Search" class="wp-image-821" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-6.png 641w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-6-300x192.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-6-624x399.png 624w" sizes="(max-width: 641px) 100vw, 641px" /></figure>



<h3 class="wp-block-heading">Insomnia/Postman</h3>



<p>Tanto usando o Insomnia quanto o Postman talvez seja necessário desabilitar a validação de certificados SSL, ao menos tive que fazer isso, já que o certificado gerado localmente não é realmente reconhecido.</p>



<p>Antes de você realizar uma requisição você precisa configurar a autenticação do tipo basic e há duas formas de fazer isso a primeira é usando o recurso direto do Postman ou do Insomina que basicamente é ir na aba de <em>Authorization</em>, escolher a opção <em>Basic</em> preencher o usuário com o <mark style="background-color:#e6e6e6" class="has-inline-color">elastic</mark> e a senha com aquela que já sabemos. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="967" height="388" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-7.png" alt="" class="wp-image-823" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-7.png 967w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-7-300x120.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-7-768x308.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-7-624x250.png 624w" sizes="(max-width: 967px) 100vw, 967px" /><figcaption class="wp-element-caption">Autenticação Basic direto no Insomnia</figcaption></figure>



<p>A outra forma é configurar diretamente no Headers o cabeçalho <em>Authorization</em> com o usuário e senha separado por &#8220;:&#8221; encodados na <em>base64</em>. Eu particularmente prefiro essa pois já fica mais baixo nível e mais próximo da chamada que vou precisar fazer via código. Algo como <mark style="background-color:#e6e6e6" class="has-inline-color">elastic:O*<em>ZMpUEhF*</em>+5cHAYW3yR</mark> viraria <mark style="background-color:#e6e6e6" class="has-inline-color">ZWxhc3RpYzpPKlpNcFVFaEYqKzVjSEFZVzN5Ug==</mark>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1017" height="367" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-8.png" alt="" class="wp-image-824" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-8.png 1017w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-8-300x108.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-8-768x277.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-8-624x225.png 624w" sizes="(max-width: 1017px) 100vw, 1017px" /></figure>



<p>É isso, objetivo aqui foi alcançado que era deixar rodando o ElasticSearch com Docker. Fiquem a vontade pra tirar dúvidas dessa instalação ou mesmo outras coisas que tenha dito e não tenha ficado claro.</p>



<h2 class="wp-block-heading">Pra fechar</h2>



<p>Se você precisar gerar uma nova senha para o usuário elastic você pode em um outro terminal enviar um comando para essa troca.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
docker exec -it elasticboladao bin/elasticsearch-reset-password -u elastic
</pre></div>


<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="892" height="150" src="https://thiagosantos.com/blog/wp-content/uploads//2023/10/image-9.png" alt="" class="wp-image-832" srcset="https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-9.png 892w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-9-300x50.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-9-768x129.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2023/10/image-9-624x105.png 624w" sizes="(max-width: 892px) 100vw, 892px" /></figure>



<h2 class="wp-block-heading">Referências</h2>



<p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html</a><br><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html</a></p>
<p>The post <a href="https://thiagosantos.com/blog/788/docker/rodando-o-elastic-search-no-docker/">Rodando o Elastic Search no Docker</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/788/docker/rodando-o-elastic-search-no-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker Cron</title>
		<link>https://thiagosantos.com/blog/755/linux/docker-cron/</link>
					<comments>https://thiagosantos.com/blog/755/linux/docker-cron/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 18 May 2023 03:15:26 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker cron]]></category>
		<category><![CDATA[infinite cron]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=755</guid>

					<description><![CDATA[<p>Pod com cron rodando de forma infinita. Sim é possível.</p>
<p>The post <a href="https://thiagosantos.com/blog/755/linux/docker-cron/">Docker Cron</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Uma demanda bem diferente, um container cujo único proposito em vida é ter o cron rodando. Na verdade, um pouco mais que isso, mas não vem ao caso. O ponto é como fazer um container chamador de cron?</p>



<p>Para os apressados a solução é rodar o cron em foreground. Dessa forma ele segura o container e ele não morre de cara.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
ENTRYPOINT &#x5B;&quot;cron&quot;, &quot;-f&quot;]
</pre></div>


<span id="more-755"></span>



<p>Para quem curte uma solução mais completa abaixo está o Dockerfile que usei para resolver essa tarefa. No container deveria haver dois scripts, o primeiro que consultava uma API e retornava uma lista contendo um GUID, data da ultima alteração e a periodicidade que esse GUID deveria ser chamado. O segundo script que era chamado pelo cron passando o GUID respeitando a periodicidade definida.</p>



<p>Assim o primeiro script, deveria acessar uma API a cada 15 minutos, verificar localmente se aqueles GUID recebidos já tinham seus respectivos arquivos cron gerados. A solução foi que para cada GUID recebido criariamos arquivos na pasta do cron.d no formato abaixo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; highlight: [2]; title: ; notranslate">
#/etc/cron.d/run_primeiro_script
*/15 * * * * root /app/primeiro_script.py
</pre></div>


<p>O segundo script precisa ser chamado dada uma periodicidade e passando um ID como parâmetro.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; highlight: [2]; title: ; notranslate">
#/etc/cron.d/426c3f18-8f87-4ca7-98a9-aaa865ae46d1
*/5 * * * * root /app/segundo_script.py --id 426c3f18-8f87-4ca7-98a9-aaa865ae46d1
</pre></div>


<p>O Dockerfile ficou assim. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; highlight: [5]; title: ; notranslate">
FROM ubuntu:23.04 AS base

WORKDIR /app
RUN apt-get update &amp;&amp; apt-get install -y cron python3
RUN echo &quot;*/15 * * * * root python3 /app/primeiro_script.py &gt; /proc/1/fd/1 2&gt;/proc/1/fd/2&quot; &gt; /etc/cron.d/run_primeiro_script

COPY . .

ENTRYPOINT &#x5B;&quot;cron&quot;, &quot;-f&quot;]
</pre></div>


<p>Eu ressalto que como a tarefa do cron é executado em um bash as mensagens da aplicação não saem no bash principal e como consequência não é possível ver essas mensagens no log. Por isso redirecionamos o stdout e o stderr do &#8220;primeiro_script.py&#8221; para o processo de PID 1 que é o comando executado pelo entrypoint.</p>



<p>Essa é uma solução interessante também para manter o log quando o cron executar scripts, programas e aplicações que tenham muita saída no stdout e que normalmente estivessem rodando em foreground seriam enviados para o log do pod.</p>
<p>The post <a href="https://thiagosantos.com/blog/755/linux/docker-cron/">Docker Cron</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/755/linux/docker-cron/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Swap File &#8211; Por quê?</title>
		<link>https://thiagosantos.com/blog/735/linux/swap-file-por-que/</link>
					<comments>https://thiagosantos.com/blog/735/linux/swap-file-por-que/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 19 May 2022 12:35:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[swap]]></category>
		<category><![CDATA[swapon]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=735</guid>

					<description><![CDATA[<p>Tenha. Quando você pega uma VM você paga pela RAM e pelo espaço em disco e a cloud te aluga RAM e espaço em disco. No entanto, se a VM vier automaticamente com um swap ativo a cloud vai precisar dispor de mais disco swap + o acordado. Se uma VM tem 512mb de RAM [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/735/linux/swap-file-por-que/">Swap File &#8211; Por quê?</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Tenha.</p>



<p>Quando você pega uma VM você paga pela RAM e pelo espaço em disco e a cloud te aluga RAM e espaço em disco. No entanto, se a VM vier automaticamente com um swap ativo a cloud vai precisar dispor de mais disco swap + o acordado. Se uma VM tem 512mb de RAM e 20Gb de disco, teria que dispor de pelo menos 256mb de swap, imagina essa escala para uma cloud com milhões de VMs. Por isso as VMs de diversas clouds vem sem SWAP File e deixa para você a responsabilidade de ativar! &lt;3</p>



<span id="more-735"></span>



<p><strong>O que afinal é o SWAP e para que serve?</strong></p>



<p>O swap file nada mais é que um espaço no seu disco destinado a receber dados que estão na memória quando o seu sistema está ficando sem para continuar rodandos as aplicações. O kernel notando que vai dar merda pega uma sessão da RAM que está destinada a um programa que está com baixa prioridade ou em espera e coloca temporariametne dentro do swap. Liberando assim a memória RAM para continuar funcionando.</p>



<p>Imagina que o seu sistema está rodando, tem pouca memória, precisa executar novos processos, mas não tem SWAP configurado. O que acontece? Sim, dá merda. O kernel vem matando os processos através do <em><a href="https://rakeshjain-devops.medium.com/linux-out-of-memory-killer-31e477a45759" target="_blank" rel="noreferrer noopener">OOM Killer</a></em>, mas antes ele lança essa bela imagem.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="580" src="https://thiagosantos.com/blog/wp-content/uploads//2022/05/image-1-1024x580.png" alt="" class="wp-image-739" srcset="https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-1024x580.png 1024w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-300x170.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-768x435.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-624x354.png 624w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1.png 1163w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Criar um SWAP file</strong></p>



<p>O comando abaixo aloca um gigabyte para o swap localizado na raiz do sistema no arquivo <em>swapfile</em>. Minha sugestão é que você coloque o seu arquivo numa partição que tenha um disco rápido.</p>



<pre class="wp-block-code"><code>sudo fallocate -l 1G /swapfile
</code></pre>



<p>Restrinja a manipulação somente ao usuário ROOT</p>



<pre class="wp-block-code"><code>sudo chmod 600 /swapfile
</code></pre>



<p>Formatamos o nosso arquivo para o formato SWAP</p>



<pre class="wp-block-code"><code>sudo mkswap /swapfile</code></pre>



<p>Ativamos o swap que acabamos de criar</p>



<pre class="wp-block-code"><code>sudo swapon /swapfile</code></pre>



<p>Para ver rodando basta dar um &#8220;TOP&#8221; ou &#8220;HTOP&#8221; e vai ver lá o swap, é possível que assim que você crie e habilite o swap não esteja sendo utulizado, mas com o passar de algum tempo vai estar lá ele sendo utilizado.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="937" height="74" src="https://thiagosantos.com/blog/wp-content/uploads//2022/05/image.png" alt="" class="wp-image-742" srcset="https://thiagosantos.com/blog/wp-content/uploads/2022/05/image.png 937w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-300x24.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-768x61.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-624x49.png 624w" sizes="(max-width: 937px) 100vw, 937px" /></figure>



<p>Pode também rodar o swapon &#8211;show para listar os swaps ativos</p>



<pre class="wp-block-code"><code>sudo swapon --show</code></pre>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="279" height="33" src="https://thiagosantos.com/blog/wp-content/uploads//2022/05/image-2.png" alt="" class="wp-image-744"/></figure>



<p>Fonte:</p>



<p><a href="https://rakeshjain-devops.medium.com/linux-out-of-memory-killer-31e477a45759">https://rakeshjain-devops.medium.com/linux-out-of-memory-killer-31e477a45759</a></p>



<p><a href="https://diolinux.com.br/tutoriais/como-trabalhar-com-swap-files-no-ubuntu.html">https://diolinux.com.br/tutoriais/como-trabalhar-com-swap-files-no-ubuntu.html</a></p>
<p>The post <a href="https://thiagosantos.com/blog/735/linux/swap-file-por-que/">Swap File &#8211; Por quê?</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/735/linux/swap-file-por-que/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress &#8211; Perdendo Qualidade de Imagem e Deixando as Opacas</title>
		<link>https://thiagosantos.com/blog/697/php/wordpress-perdendo-qualidade-de-imagem-e-deixando-as-opacas/</link>
					<comments>https://thiagosantos.com/blog/697/php/wordpress-perdendo-qualidade-de-imagem-e-deixando-as-opacas/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 09 May 2019 13:30:13 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[image loosing quality]]></category>
		<category><![CDATA[imagens perdendo qualidade]]></category>
		<category><![CDATA[loosing quality]]></category>
		<category><![CDATA[opaque]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=697</guid>

					<description><![CDATA[<p>Se você é apressado: instale o modulo &#8220;imagick&#8221; do PHPNo Ubuntu/Debian: apt install imagick-php7.2PECL : pecl install imagick O WordPress tem uma classe abstrata chamada WP_Image_Editor. Há duas outras classes que a estendem chamadas WP_Image_Editor_GD e WP_Image_Editor_Imagick. Para que nós não tenhamos que criar uma função para escolher entre as classes há uma no core [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/697/php/wordpress-perdendo-qualidade-de-imagem-e-deixando-as-opacas/">WordPress &#8211; Perdendo Qualidade de Imagem e Deixando as Opacas</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Se você é apressado: instale o modulo &#8220;imagick&#8221; do PHP<br>No Ubuntu/Debian: apt install imagick-php7.2<br>PECL : pecl install imagick</p>



<p>O WordPress tem uma classe abstrata chamada WP_Image_Editor. Há duas outras classes que a estendem chamadas  WP_Image_Editor_GD e WP_Image_Editor_Imagick.  Para que nós não tenhamos que criar uma função para escolher entre as classes há uma no core do WP chamada wp_get_image_editor(), que automáticamente escolhe uma das duas classes disponíveis.</p>



<span id="more-697"></span>



<p>Mas como exatamente o WordPress escolhe? Existe hierarquia?</p>



<p>Há uma segunda função chamada  _wp_image_editor_choose() que faz o trabalho de escolher entre as duas classes disponíveis e nos retorna a que podemos usar. A escolha é simples, conforme a imagem, o código escolhe a que estiver disponível dando prioridade para a WP_Image_Editor_Imagick. No entanto, no meu caso eu não tinha o modulo do imagick habilitado por isso o WordPress estava usando a WP_Image_Editor_GD o que estava me fazendo perder qualidade na imagem e as deixando sem vida. Essa é a primeira vez que tenho esse tipo de problema com a biblioteca GD, vale até dar uma estudada a fundo.</p>



<p>Entenda, que toda imagem enviada para o WordPress é comprimida com excessão da imagem original. Logo, todas as variações das imagens que você usa no seu código é manipulada usando uma das classes disponíveis. Recomendo por tanto usar a classe do modulo imagick quando você trabalhar com imagens de agências, em sites de notícias, blogs onde a qualidade da foto precisa ser boa!<br></p>
<p>The post <a href="https://thiagosantos.com/blog/697/php/wordpress-perdendo-qualidade-de-imagem-e-deixando-as-opacas/">WordPress &#8211; Perdendo Qualidade de Imagem e Deixando as Opacas</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/697/php/wordpress-perdendo-qualidade-de-imagem-e-deixando-as-opacas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Google Analytics &#8211; GA event tracking não funcionando</title>
		<link>https://thiagosantos.com/blog/675/javascript/google-analytics-ga-event-tracking-nao-funcionando/</link>
					<comments>https://thiagosantos.com/blog/675/javascript/google-analytics-ga-event-tracking-nao-funcionando/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Mon, 09 Apr 2018 23:08:59 +0000</pubDate>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Javascript]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=675</guid>

					<description><![CDATA[<p>Olá! Se você veio aqui por quê você acabou de colocar as novas tags do Google Analytics e achou que a antiga função do &#8220;ga()&#8221; para enviar eventos iria funciona e não funcionou você veio ao lugar certo! O Google Analytics está liberando uma nova versão do seu script de tracking chamado gtag.js. Para o [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/675/javascript/google-analytics-ga-event-tracking-nao-funcionando/">Google Analytics &#8211; GA event tracking não funcionando</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá!<br />
Se você veio aqui por quê você acabou de colocar as novas tags do Google Analytics e achou que a antiga função do &#8220;ga()&#8221; para enviar eventos iria funciona e não funcionou você veio ao lugar certo!<span id="more-675"></span></p>
<p>O Google Analytics está liberando uma nova versão do seu script de tracking chamado gtag.js. Para o gtag.js monitorar os seus eventos você precisa trocar o seu antigo esquema de GA por GATAG, conforme o código abaixo.</p>
<p>Ao invés de usar</p>
<pre lang="js">ga('send', 'event', 'Comprar', 'click');
</pre>
<p>deveria ser</p>
<pre lang="js">gtag('event', 'click', {
    'event_category': 'Comprar'
});
</pre>
<p>Se você usa o parametro label pode adicionar uma outra propriedade chamada &#8216;event_label&#8217;, conforme código abaixo.</p>
<pre lang="js">gtag('event', 'click', {
    'event_category': 'Comprar',
    'event_label':'Campanha de natal'
});
</pre>
<p>Boa sorte!</p>
<p>Fonte:</p>
<p>Ana K no <a href="https://www.en.advertisercommunity.com/t5/Google-Analytics-Tracking-Goals/Google-Analytics-Custom-Event-Not-Working/td-p/1250680#M11141">Advertiser Community</a></p>
<p>The post <a href="https://thiagosantos.com/blog/675/javascript/google-analytics-ga-event-tracking-nao-funcionando/">Google Analytics &#8211; GA event tracking não funcionando</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/675/javascript/google-analytics-ga-event-tracking-nao-funcionando/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Magento 2 &#8211; alterar a quantidade mínima de caracteres da senha</title>
		<link>https://thiagosantos.com/blog/666/ecommerce/magento/magento-2-alterar-a-quantidade-minima-de-caracteres-da-senha/</link>
					<comments>https://thiagosantos.com/blog/666/ecommerce/magento/magento-2-alterar-a-quantidade-minima-de-caracteres-da-senha/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Sun, 25 Mar 2018 02:03:51 +0000</pubDate>
				<category><![CDATA[Ecommerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=666</guid>

					<description><![CDATA[<p>Introdução Em um post anterior montei um passo a passo de como alterar a complexidade da regra de validação da senha dos usuários no Magento 2. Para complementar aquele, estou postando esse em que eu faço um passo a passo de como alterar a quantidade mínima de caracteres da senha. Administrador Já logado no admin [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/666/ecommerce/magento/magento-2-alterar-a-quantidade-minima-de-caracteres-da-senha/">Magento 2 &#8211; alterar a quantidade mínima de caracteres da senha</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introdução</h2>
<p>Em um post anterior montei um passo a passo de como <a href="http://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/">alterar a complexidade da regra de validação da senha</a> dos usuários no Magento 2. Para complementar aquele, estou postando esse em que eu faço um passo a passo de como alterar a quantidade mínima de caracteres da senha.<span id="more-666"></span></p>
<h2>Administrador</h2>
<p>Já logado no admin do Magento 2, vá em <strong>Store -&gt; Configuration</strong>, depois acesse no menu lateral <strong>Customers &#8211; &gt; Customer Configuration</strong> e depois em <strong>Password Options</strong></p>
<p><figure id="attachment_667" aria-describedby="caption-attachment-667" style="width: 909px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-667" src="http://thiagosantos.com/blog/wp-content/uploads//2018/03/Screen-Shot-2018-03-24-at-21.05.40.png" alt="Alterar a quantidade minima de caracteres" width="909" height="97" srcset="https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-21.05.40.png 909w, https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-21.05.40-300x32.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-21.05.40-768x82.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-21.05.40-624x67.png 624w" sizes="(max-width: 909px) 100vw, 909px" /><figcaption id="caption-attachment-667" class="wp-caption-text">Campo para alterar a quantidade minima de caracteres para o usuário do magento</figcaption></figure></p>
<p>Por padrão o Magento define como 8 caracteres a quantidade minima de uma senha, esse valor pode ser alterado para mais ou para menos. Faço a recomendação para que caso seja para menos de 8 caracteres tenha no mínimo <a href="http://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/">duas classes de caracteres</a> como obrigatório para a senha.</p>
<h2>Senhas</h2>
<p>Quanto mais fáceis permitimos que a senha seja menos forte a senha será digitada pelo usuário. Temos uma ligação direta com a proteção dos dados dos usuário. Precisamos ter em mente que há uma real necessidade de manter os usuários salvos deles mesmos. Por isso válido a necessidade de uma senha com no mínimo de duas classes de caracteres e com 8 dígitos.</p>
<p>The post <a href="https://thiagosantos.com/blog/666/ecommerce/magento/magento-2-alterar-a-quantidade-minima-de-caracteres-da-senha/">Magento 2 &#8211; alterar a quantidade mínima de caracteres da senha</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/666/ecommerce/magento/magento-2-alterar-a-quantidade-minima-de-caracteres-da-senha/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Magento 2 &#8211; alterar a complexidade da regra de validação da senha</title>
		<link>https://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/</link>
					<comments>https://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Sat, 24 Mar 2018 23:23:15 +0000</pubDate>
				<category><![CDATA[Ecommerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[alterar complexidade]]></category>
		<category><![CDATA[magento 2]]></category>
		<category><![CDATA[regras de validação de senha]]></category>
		<category><![CDATA[senha]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=656</guid>

					<description><![CDATA[<p>Introdução Agora com o Magento 2 ficou muito fácil alterar a complexidade da regra de validação da senha cadastrada pelo usuário. Por padrão o Magento 2 usa três tipos de caracteres entre (letras caixa baixa, letras caixa alta, números e caracteres especiais). No entanto é possível simplificar essa regra de validação, lembrando que não é [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/">Magento 2 &#8211; alterar a complexidade da regra de validação da senha</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introdução</h2>
<p>Agora com o Magento 2 ficou muito fácil alterar a complexidade da regra de validação da senha cadastrada pelo usuário. Por padrão o Magento 2 usa três tipos de caracteres entre (letras caixa baixa, letras caixa alta, números e caracteres especiais).<span id="more-656"></span></p>
<p>No entanto é possível simplificar essa regra de validação, lembrando que não é uma boa ideia fazer isso! Quanto mais complexa a senha menor a chance de alguém conseguir quebrar e ter acesso aos dados do seu usuário. Se todos nós, desenvolvedores e administradores de sites, forçarmos aos nossos usuários padrões de senhas mais complexas ocorrerá, sem sombras de dúvidas, uma melhora da força das senhas e em seguida uma menor chance de quebra.</p>
<h2>Administrador</h2>
<p>Já logado no admin do Magento 2, va em <strong>Store -&gt; Configuration</strong>, depois acesse no menu lateral <strong>Customers &#8211; &gt; Customer Configuration</strong> e depois em <strong>Password Options</strong></p>
<p><figure id="attachment_657" aria-describedby="caption-attachment-657" style="width: 909px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-657 size-full" title="Campo em &quot;Password Options&quot; para alterar a quantidade de caracteres" src="http://thiagosantos.com/blog/wp-content/uploads//2018/03/Screen-Shot-2018-03-24-at-19.47.02.png" alt="Campo em &quot;Password Options&quot; para alterar a quantidade de caracteres" width="909" height="95" srcset="https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-19.47.02.png 909w, https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-19.47.02-300x31.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-19.47.02-768x80.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2018/03/Screen-Shot-2018-03-24-at-19.47.02-624x65.png 624w" sizes="(max-width: 909px) 100vw, 909px" /><figcaption id="caption-attachment-657" class="wp-caption-text">Campo em &#8220;Password Options&#8221; para alterar a quantidade de caracteres</figcaption></figure></p>
<h2>Como funciona</h2>
<p>A regra é bem simples: a quantidade de dígitos corresponde a quantidade de classes de caracteres são eles: letras em caixa baixa, letras em caixa alta, números e caracteres especiais. Quanto maior a quantidade de caracteres maior a complexidade da senha. Por exemplo:</p>
<p>1 &#8211; será aceito senhas unicamente com números, letras caixa baixa, letras caixa alta e caracteres especiais:</p>
<ul>
<li><span style="color: #000000;"><strong>09151987</strong></span></li>
<li><span style="color: #000000;"><strong>senhasenha</strong></span></li>
<li><span style="color: #000000;"><strong>SENHASENHA</strong></span></li>
<li><span style="color: #000000;"><strong>!@#$@!#$%</strong></span></li>
</ul>
<p>2 &#8211; só serão aceitos senhas com duas classes de caracteres ( o que deixa um pouco mais seguro):</p>
<ul>
<li><span style="color: #000000;"><strong>05151987<span style="color: #ff9900;">senha</span></strong></span></li>
<li><span style="color: #000000;"><strong>senha</strong><span style="color: #ff9900;"><strong>SENHA</strong></span></span></li>
<li><span style="color: #000000;"><strong>senha</strong><span style="color: #ff9900;"><strong>@!$</strong></span></span></li>
</ul>
<p>3 &#8211; só serão aceitas senhas com três classes de caracteres, o que deixa a senha ainda mais segura!</p>
<ul>
<li><strong><span style="color: #ff9900;">09051987</span><span style="color: #000000;">SE</span><span style="color: #0000ff;">nha</span></strong></li>
<li><strong>senha<span style="color: #ff9900;">PASS</span><span style="color: #0000ff;">$#!</span></strong></li>
<li><strong>#$@<span style="color: #ff9900;">TEE</span><span style="color: #0000ff;">1234</span></strong></li>
</ul>
<p>4 &#8211; só serão aceitas senhas com quatro classes de caracteres, deixando a senha fuderoza!</p>
<ul>
<li><strong><span style="color: #ff9900;">09051987</span><span style="color: #000000;">SE</span><span style="color: #0000ff;">nha<span style="color: #339966;">!@#$</span></span></strong></li>
<li><strong>senha<span style="color: #ff9900;">PASS</span><span style="color: #0000ff;">$#!<span style="color: #339966;">9013</span></span></strong></li>
<li><strong>#$@<span style="color: #ff9900;">TEE</span><span style="color: #0000ff;">1234<span style="color: #339966;">vamos</span></span></strong></li>
</ul>
<p>É isso, bem simples!<br />
Colori as classes para destacar as cadeias de caracteres das classes envolvidas. Vale lembrar que para o Magento 2 define como padrão 8 a quantidade minima de caracteres para uma senha. Se é possível alterar a <a href="http://thiagosantos.com/blog/666/php/magento-2-alterar-a-quantidade-minima-de-caracteres-da-senha/">quantidade minima de caracteres? Sim! É possível!</a></p>
<p>Fontes:<br />
<a href="https://magento.stackexchange.com/questions/117449/magento-2-how-to-change-password-length-validation">https://magento.stackexchange.com/questions/117449/magento-2-how-to-change-password-length-validation</a></p>
<p>The post <a href="https://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/">Magento 2 &#8211; alterar a complexidade da regra de validação da senha</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/656/ecommerce/magento/magento-2-alterando-a-complexidade-da-regra-de-validacao-da-senha/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
