-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
250 lines (182 loc) · 12.6 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Blog do ManuWell]]></title>
<link href="http://wjsantos.github.io/atom.xml" rel="self"/>
<link href="http://wjsantos.github.io/"/>
<updated>2015-03-07T19:36:48-03:00</updated>
<id>http://wjsantos.github.io/</id>
<author>
<name><![CDATA[Wellington Santos]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[Importando Certificado SSL No Ubuntu]]></title>
<link href="http://wjsantos.github.io/blog/2015/03/07/importando-certificado-ssl-no-ubuntu/"/>
<updated>2015-03-07T18:37:29-03:00</updated>
<id>http://wjsantos.github.io/blog/2015/03/07/importando-certificado-ssl-no-ubuntu</id>
<content type="html"><![CDATA[<p>Fala galera, blza?! Hoje vou compartilhar com vocês um problema
que passamos com certificados SSL em nosso ambiente de QA.</p>
<h2>Cenário</h2>
<p>Conversa entre duas aplicações server-side com certificado SSL gerado via comando
openssl, que chamarei neste post de certificado auto-gerado.</p>
<!-- more -->
<h2>O problema</h2>
<p>Quando a aplicação tentava conversar com nossa aplicação interna de OAuth via HTTPS,
com um certificado auto-gerado ela crashava.</p>
<p>Analisando os logs da aplicação que fazia o request, vímos uma mensagem de erro
de certificado SSL inválido.</p>
<p>Lógico que o certificado SSL era inválido, pois estávamos usando um que havíamos
gerado para nosso provedor de oauth, <code>oauth.provider.com</code>. Não eramos uma <code>CA</code> válida.
Então, como resolver esse problema?</p>
<h2>Solução</h2>
<p>Pegamos o certificado gerado pelo comando:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo openssl req -x509 -nodes -days <span class="m">365</span> -newkey rsa:2048 -keyout oauth.provider.com.key
</span><span class='line'>-out oauth.provider.com.crt
</span></code></pre></td></tr></table></div></figure>
<p>e, na máquina da aplicação que fazia o request <code>HTTPS</code> para o servidor de OAuth, importamos
o <code>.crt</code> dentro do <code>Sistema Operacional</code>.</p>
<p>Os certificados que o <code>SO</code> acredita serem válidos e de entidades certificadoras, as <code>CA</code>s,
ficam no diretório <code>/usr/share/ca-certificates</code>.</p>
<p>Todo request <code>HTTPS</code> no processo de validação de certificado olha para esse diretório.
Se o nosso certificado estivesse ali; batata! resolvido o problema.</p>
<p>Jogamos nosso certificado dentro desse diretório e avisamos o <code>SO</code> para recarregar
os certificados:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># jogando o certificado do provedor de autenticação no dir de certificados</span>
</span><span class='line'>sudo cp oauth.provider.com.crt /usr/share/ca-certificates/
</span><span class='line'>
</span><span class='line'><span class="c"># adicionando novo certificado na listagem</span>
</span><span class='line'>sudo <span class="nb">echo </span>oauth.provider.com >> /etc/ca-certificates.conf
</span><span class='line'>
</span><span class='line'><span class="c"># atualizando a lista de certificados existentes</span>
</span><span class='line'>sudo update-ca-certificates -f
</span></code></pre></td></tr></table></div></figure>
<p>Quando a aplicação realizou o request HTTPS ao nosso OAuth provider com o certificado importado.
Tudo fluiu perfeitamente bem.</p>
<p>Resolvemos um problema de comunicação no nível do <code>SO</code>. Sem precisar alterar uma linha de código da aplicação.</p>
<p>Sugestões como alterar o código para ignorar o certificado foram levantadas mas que bom,
que essa resolveu. Afinal, esse era um problema de ambiente e não queríamos comprar um certificado SSL
somente para o ambiente de <code>QA</code>.</p>
<p>É isso! E simbora!</p>
<h2>Referências</h2>
<p><a href="http://man.he.net/man8/update-ca-certificates">http://man.he.net/man8/update-ca-certificates</a></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Banalização Das Gems]]></title>
<link href="http://wjsantos.github.io/blog/2015/02/06/banalizacao-das-gems/"/>
<updated>2015-02-06T21:27:33-02:00</updated>
<id>http://wjsantos.github.io/blog/2015/02/06/banalizacao-das-gems</id>
<content type="html"><![CDATA[<p>Evite adicionar <code>gems</code> para funções específicas, ou que fazem
mais do que você necessita.</p>
<p>Vivemos uma era em que não faltam <code>gems</code> para as coisas
mais específicas possíveis. Temos <code>gems</code> para instalação de
bootstraps, deixar console colorido e por aí afora.</p>
<!-- more -->
<h2>Banalização das GEMS</h2>
<p>Com <code>gems</code> cada vez mais específicas e sem um critério para sua
instalação na aplicação, vamos cada vez mais inflando nosso projeto
com dependências externas.</p>
<p>Essas <code>gems</code> podem possuir suporte, mas por vezes não conseguem
se manter atualizada ao longo da evolução da sua <code>aplicação</code>.</p>
<p>Quando houver a necessidade de atualização de seu rails por exemplo,
e uma dessas <code>gems</code> específicas não der suporte, vc. se encontrará numa
situação difícil. Sem tempo hábil para a remoção da <code>gem</code> que quebra
sua aplicação vc. provavelmente optará por deixar de lado
a atualização de seu <code>rails</code>.</p>
<h2>Conclusão</h2>
<p>Tenha sempre o menor número de dependências em seu projeto. Abra os fontes
das <code>gems</code> que deseja instalar. Veja se a sua necessidade não é um trecho
de código que possa ser extraído em um <code>initializer</code>, <code>lib</code> dentro do rails.</p>
<p>Tenha sempre seu <code>Gemfile</code> o mais enxuto possível. Isso lhe facilitará em
manter sua aplicação atualizada e lhe gerará menos dor de cabeça no futuro.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Organizando Assets De Javascript No Rails]]></title>
<link href="http://wjsantos.github.io/blog/2015/02/06/organizando-assets-no-rails/"/>
<updated>2015-02-06T13:38:18-02:00</updated>
<id>http://wjsantos.github.io/blog/2015/02/06/organizando-assets-no-rails</id>
<content type="html"><![CDATA[<p>Sabemos que o <code>application.js</code> centraliza os javascripts
de uma aplicação rails.</p>
<p>Este arquivo permite que façamos includes de arquivos externos
e, de forma modularizada, compôr nosso javascript da aplicação.</p>
<p>O que em nenhum lugar se fala ou comenta é: <strong>como fazer scripts que rodem
em páginas específicas? Como estruturar de forma escalável seus assets?</strong></p>
<!-- more -->
<h2>Como estruturar então?</h2>
<p>Em projetos que estou trabalhando começamos a usar uma <code>lib js</code> chamada
<a href="https://github.com/lucasmazza/page.js">page.js</a> do <a href="https://github.com/lucasmazza">lucasmazza</a>.
Ela nos permite direcionar javascripts para actions de controllers específicas.</p>
<p>Esse é o primeiro passo para estruturar sua aplicação. Adicionar no
<code>vendor/assets/javascripts/</code> o arquivo <code>page.min.js</code>.</p>
<p>Tendo adicionado ao vendor, precisamos incluir no nosso <code>application.js</code>:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="c1">//= require page.min</span>
</span><span class='line'>
</span><span class='line'><span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">ready</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
</span><span class='line'> <span class="c1">// runs page js</span>
</span><span class='line'> <span class="nx">page</span><span class="p">.</span><span class="nx">dispatch</span><span class="p">();</span>
</span><span class='line'><span class="p">})</span>
</span></code></pre></td></tr></table></div></figure>
<p>Configurado nosso <code>application.js</code>, bora identificar nossas actions em nosso
template. Para isso, abra seu template <code>views/layouts/application.html.erb</code>
e insira:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt"><body</span> <span class="na">data-page=</span><span class="s">"<%= controller_path %>#<%= action_name %>"</span><span class="nt">></span>
</span></code></pre></td></tr></table></div></figure>
<h2>Estrutura de diretórios</h2>
<p>Com tudo preparado, vamos criar um diretório em:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>app/assets/javascripts/pages/
</span></code></pre></td></tr></table></div></figure>
<p>E criemos nosso primeiro script que roda somente para a rota “tweets#index”:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="c1">// pages/tweets.js</span>
</span><span class='line'>
</span><span class='line'><span class="nx">page</span><span class="p">.</span><span class="nx">at</span><span class="p">(</span><span class="s2">"tweets#index"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(){</span>
</span><span class='line'> <span class="nx">alert</span><span class="p">(</span><span class="s2">"showing my tweets"</span><span class="p">);</span>
</span><span class='line'><span class="p">})</span>
</span><span class='line'>
</span><span class='line'><span class="nx">page</span><span class="p">.</span><span class="nx">at</span><span class="p">(</span><span class="s2">"tweets#show"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(){</span>
</span><span class='line'> <span class="nx">alert</span><span class="p">(</span><span class="s2">"showing one tweet"</span><span class="p">);</span>
</span><span class='line'><span class="p">})</span>
</span></code></pre></td></tr></table></div></figure>
<p>Adicione no <code>application.js</code> o diretório de <code>/pages</code> logo abaixo
da inclusão do <code>page.min</code></p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="c1">//= require page.min</span>
</span><span class='line'><span class="c1">//= require_tree ./pages</span>
</span></code></pre></td></tr></table></div></figure>
<p>E voilá.</p>
<p>Temos tudo em uma estrutura escalável, de fácil manutenção e isolada de scripts.</p>
<p>Foi um grande aprendizado para mim que, no início, jogava meus scripts de forma
desornenada dentro do <code>application.js</code> ou em <code>arquivos</code> desconexos para inclusão direta
nas views ou com <code>ifs</code> nojentos.</p>
<p>Espero ter ajudado. ;-)</p>
]]></content>
</entry>
</feed>