Ukrywanie pliku z Api_key i Api_secret poza publicznym repozytorium

Witam,
Tak jak w temacie wdrożyłem logowanie przez portale społecznościowe i chciałem zadbać bardziej o bezpieczeństwo i ukryć plik omniauth.rb poza publicznym repozytorium.
Czy ktoś już z was to robił ?
Podobno można go trzymać poza repozytorium w pliku

 .sh

i wydobyć go przez

source plik.sh

tyle wiem w teorii hmm a jak to wygląda w praktyce ?
Pozdrawiam

** dodam jeszcze że ważne jest aby sposób działał na heroku :wink:

Popatrz na kofiguracje zmiennych srodowiskowych w heroku:

Oraz na https://github.com/fastestforward/heroku_san

Z linka pierwszego dowiesz się, że wcale nie potrzebujesz pliku do tego
Z drugiego dowiesz się jak troche sobie ułatwić pracę :wink:

jeśli trzymasz to na heroku, to najlepiej ustawić klucze dostępowe w tamtejszych zmiennych.

używasz ich z poziomu kodu ENV[‘name’]

7 sekund :wink:

hmm okey staram się użyć config vars
dodaje klucze przez

heroku config:add

pomyślnie dodane
i jeśli dobrze rozumiem to mój omniauth.rb powinien wyglądać tak

use OmniAuth::Builder do provider :facebook, ENV['facebook_KEY'], ENV['facebook_SECRET'] provider :github, ENV['github_KEY'], ENV['github_SECRET'] end

Możesz to zamknąć w jakiejś klasie. Jeżeli kiedyś będziesz chciał przenieść tą konfigurację gdzieś indziej (do bazy, pliku yaml itd) nie będziesz musiał szukać i zmieniać całej aplikacji

[code=ruby]# app_config.rb
class ApplicationConfig
def github
OpenStruct.new(key: ENV[‘github_KEY’], secret: ENV[‘github_SECRET’])
end

def facebook
OpenStruct.new(key: ENV[‘facebook_KEY’], secret: ENV[‘facebook_SECRET’])
end
end

AppConfig = ApplicationConfig.new

omniauth.rb

use OmniAuth::Builder do
provider :facebook, AppConfig.facebook.key, AppConfig.facebook.secret
provider :github, AppConfig.github.key, AppConfig.github.secret
end[/code]

[quote=zlw]Możesz to zamknąć w jakiejś klasie. Jeżeli kiedyś będziesz chciał przenieść tą konfigurację gdzieś indziej (do bazy, pliku yaml itd) nie będziesz musiał szukać i zmieniać całej aplikacji

[code=ruby]# app_config.rb
class ApplicationConfig
def github
OpenStruct.new(key: ENV[‘github_KEY’], secret: ENV[‘github_SECRET’])
end

def facebook
OpenStruct.new(key: ENV[‘facebook_KEY’], secret: ENV[‘facebook_SECRET’])
end
end

AppConfig = ApplicationConfig.new

omniauth.rb

use OmniAuth::Builder do
provider :facebook, AppConfig.facebook.key, AppConfig.facebook.secret
provider :github, AppConfig.github.key, AppConfig.github.secret
end[/code]
[/quote]
OpenStruct jest zasobo- i pamięciożerny, w tym przypadku ma to małe znaczenie, ale definiując więcej takich otwartych struktur znacząco wpływa się na szybkość działania aplikacji i jej zajęcie pamięci. Nie lepiej po prostu użyć hasha lub struktury?

hmm coś namieszałem ;/
dostaje dziwny log

2012-11-17T20:25:01+00:00 heroku[slugc]: Slug compilation started 2012-11-17T20:25:33+00:00 heroku[slugc]: Slug compilation finished 2012-11-17T20:25:34+00:00 heroku[web.1]: Starting process with command `bundle exec rails server -p 51751` 2012-11-17T20:25:41+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5) 2012-11-17T20:25:41+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5) 2012-11-17T20:25:41+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5) 2012-11-17T20:25:42+00:00 app[web.1]: => Booting WEBrick 2012-11-17T20:25:42+00:00 app[web.1]: => Rails 3.2.2 application starting in production on http://0.0.0.0:51751 2012-11-17T20:25:42+00:00 app[web.1]: => Call with -d to detach 2012-11-17T20:25:42+00:00 app[web.1]: => Ctrl-C to shutdown server 2012-11-17T20:25:42+00:00 app[web.1]: Exiting 2012-11-17T20:25:42+00:00 app[web.1]: /app/config/initializers/facebook.rb:1:in `<top (required)>': uninitialized constant AWS (NameError) 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/engine.rb:588:in `block (2 levels) in <class:Engine>' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/engine.rb:587:in `each' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/engine.rb:587:in `block in <class:Engine>' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/initializable.rb:30:in `run' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/initializable.rb:30:in `instance_exec' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/initializable.rb:54:in `each' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/initializable.rb:54:in `run_initializers' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/config.ru:4:in `block in <main>' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/config.ru:1:in `new' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/application.rb:136:in `initialize!' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/config/environment.rb:5:in `<top (required)>' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/initializable.rb:55:in `block in run_initializers' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/config.ru:1:in `<main>' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/railtie/configurable.rb:30:in `method_missing' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:200:in `app' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands/server.rb:46:in `app' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:252:in `start' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands/server.rb:70:in `start' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:55:in `block in <top (required)>' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:50:in `tap' 2012-11-17T20:25:42+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:50:in `<top (required)>' 2012-11-17T20:25:42+00:00 app[web.1]: from script/rails:6:in `require' 2012-11-17T20:25:42+00:00 app[web.1]: from script/rails:6:in `<main>' 2012-11-17T20:25:43+00:00 heroku[web.1]: Process exited with status 1 2012-11-17T20:25:55+00:00 heroku[web.1]: State changed from starting to crashed 2012-11-17T20:26:32+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=napsterug.herokuapp.com fwd= dyno= queue= wait= connect= service= status=503 bytes= 2012-11-17T20:26:34+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=napsterug.herokuapp.com fwd= dyno= queue= wait= connect= service= status=503 bytes=

[quote=konole]OpenStruct jest zasobo- i pamięciożerny, w tym przypadku ma to małe znaczenie, ale definiując więcej takich otwartych struktur znacząco wpływa się na szybkość działania aplikacji i jej zajęcie pamięci. Nie lepiej po prostu użyć hasha lub struktury?

http://stackoverflow.com/a/4459132[/quote]
:rolleyes:

[code=ruby]class ApplicationConfig
class OmniAuthProvider < Struct.new(:key, :secret)
end

def github
OmniAuthProvider.new(ENV[‘github_KEY’], ENV[‘github_SECRET’])
end

def facebook
OmniAuthProvider.new(ENV[‘facebook_KEY’], ENV[‘facebook_SECRET’])
end
end

AppConfig = ApplicationConfig.new[/code]

Pokaż app/config/initializers/facebok.rb

[quote=m1l05z]/app/config/initializers/facebook.rb:1:in `<top (required)>': uninitialized constant AWS (NameError)
[/quote]
https://gist.github.com/1274666

wciąż nie działa mi sam omniauth.rb
poprawiłem tamten błąd i otrzymałem taki

/app/config/initializers/omniauth.rb:1:in `<top (required)>': undefined method `use' for main:Object (NoMethodError)

więc zmieniłem początek pliku na taki

Rails.application.config.middlew are.use OmniAuth::Builder do

i błąd zmienił się na taki

/app/config/initializers/omniauth.rb:1:in `<top (required)>': undefined local variable or method `are' for main:Object (NameError)

dla wyjaśnienia plik facebook.rb wgl nie był mi potrzebny coś wcześniej kombinowałem i to była pozostałość którą usunąłem

=========================================================
Znalazłem rozwiązanie
ostatecznie pliki poprawnie powinny wyglądać tak"

[code=ruby] # app_config.rb

class ApplicationConfig
class OmniAuthProvider < Struct.new(:key, :secret)
end

def github
OmniAuthProvider.new(ENV[‘github_KEY’], ENV[‘github_SECRET’])
end

def facebook
OmniAuthProvider.new(ENV[‘facebook_KEY’], ENV[‘facebook_SECRET’])
end
end

AppConfig = ApplicationConfig.new[/code]

[code=ruby] # omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, AppConfig.facebook.key, AppConfig.facebook.secret
provider :github, AppConfig.github.key, AppConfig.github.secret
end[/code]
Jak zwykle Bardzo Dziękuje za nieocenioną pomoc bez was bym nie dał rady :slight_smile:
Pozdrawiam