Powered By Blogger

terça-feira, 30 de junho de 2009

apostrofos corretos em querys

Uma coisa boba e que toma tempo (quando não se sabe) é trocar os apostrofos ( ' ) por ( \' ) para serem usados em SQL.

Uma linha simples resolve o problema:
str.gsub!('\'') {|s| %q{\'} }

quarta-feira, 10 de junho de 2009

Upload de arquivos em rails

Como receber e escrever os arquivos passados por upload sem usar plugins?

  • Crie um form com o campo de arquivo na view


<% form_for :my_form, :html => {:multipart => true} do |f| %>
...
Escolha o arquivo : <%= c.file_field :file %
>
...
<% end %>



  • Escrever o arquivo pelo controller


#foi criada um dir temp dentro de public/ para salvar os arquivos
def recebe_arquivo
f = File.new("#{Rails.root}/public/temp/#{params[:my_form][:file].original_filename}", "w+")
f.write params[:my_form][:file].read
f.close
end



Observações:
  1. não esquecer do multipart => true
  2. pode ser usado um temp file

quarta-feira, 3 de junho de 2009

Criptografia AES no Rails

Estava fazendo uma biblioteca com 2 funções básicas de criptografia (crypt e decrypt baseada nesses 2 posts que eu tinha encontrado abaixo:
http://snippets.dzone.com/posts/show/991
e
http://rails.brentsowers.com/2007/12/aes-encryption-and-decryption-in-ruby.html

Fiz meio que uma mistura dos 2 e gerei uma biblioteca para fazer as 2 partes:


class Crypt
require 'openssl'
require 'digest/sha1'
def criptografa(dado,user,iv)
#primeiro conjunto email
saida = Array.new
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
# O SHA1 da conta do user ou uma coluna Hash única para cada user podem ser usados
c.key = Digest::SHA1.hexdigest(user.conta)
c.iv = iv
e = c.update(dado)
e << c.final
#concatena na saida o resultado cifrado do dado de entrada
saida << e
#CASO SEJA NECESSARIO CRIPTOGRAFAR MAIS DADOS...
#instancie novamente c e repita o processo concatenando na saida o novo valor
return saida
end

#metodo usado para excluir emails e verificar a seguranca da transacao feita por GET
def descriptografa(msg,user,iv)
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.decrypt
c.key = Digest::SHA1.hexdigest(user.conta)
c.iv = iv
d = c.update(msg)
d << c.final
return d
end
end

Finalmente, para se ter um valor iv único para a sessão salve o valor após o login usando um filtro ou uma chamada simples após o mesmo.


  #Criando novo valor iv e salvando na session
def new_iv
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
iv = c.random_iv
session[:valor_iv] = iv
end

Syntax Highlighting para código ruby no blogger

Só para que eu não esqueça vou anotar aqui como é feito o Syntax Highlighting

  1. Instalar a gem syntax

    gem install syntax



  2. Adicionar o CSS abaixo ao código html da página do blogger:


    pre {
    background-color: #f1f1f3;
    color: #112;
    padding: 5px;
    font-family:"bitstream vera sans mono",monaco,"lucida console","courier new",courier,serif;
    font-size: 0.9em;
    overflow: auto;
    margin: 4px 0px;
    width: 95%;
    }



    /* Syntax highlighting */
    pre .normal {}
    pre .comment { color: #005; font-style: italic; }
    pre .keyword { color: #A00; font-weight: bold; }
    pre .method { color: #077; }
    pre .class { color: #074; }
    pre .module { color: #050; }
    pre .punct { color: #447; font-weight: bold; }
    pre .symbol { color: #099; }
    pre .string { color: #944; background: #FFE; }
    pre .char { color: #F07; }
    pre .ident { color: #004; }
    pre .constant { color: #07F; }
    pre .regex { color: #B66; background: #FEF; }
    pre .number { color: #F99; }
    pre .attribute { color: #5bb; }
    pre .global { color: #7FB; }
    pre .expr { color: #227; }
    pre .escape { color: #277; }


  3. Verificar se as variáveis de ambiente GEM_HOME e RUBYOPT estão corretas

    export GEM_HOME=/usr/lib/ruby/gems/1.8/
    export RUBYOPT=rubygems


  4. Executar o script

  5. require 'syntax/convertors/html'

    convertor = Syntax::Convertors::HTML.for_syntax "ruby"
    html = convertor.convert( File.read( "program.rb" ) )

    puts html




Links
(CSS) => http://rails.brentsowers.com/2007/12/formatting-ruby-and-html-code-for-blog.html

(Documentação da GEM syntax) => http://syntax.rubyforge.org/chapter-1.html