Auto-refresh OAuth 2 tokens & retry request on 401 response
[arvados.git] / lib / google / api_client / auth / pkcs12.rb
1 # Copyright 2010 Google Inc.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 module Google
16   class APIClient
17     ##
18     # Helper for loading keys from the PKCS12 files downloaded when
19     # setting up service accounts at the APIs Console.
20     #
21     module PKCS12
22       ##
23       # Loads a key from PKCS12 file, assuming a single private key
24       # is present.
25       #
26       # @param [String] keyfile
27       #    Path of the PKCS12 file to load. If not a path to an actual file,
28       #    assumes the string is the content of the file itself. 
29       # @param [String] passphrase
30       #   Passphrase for unlocking the private key
31       #
32       # @return [OpenSSL::PKey] The private key for signing assertions.
33       def self.load_key(keyfile, passphrase)
34         begin
35           if File.exists?(keyfile)
36             content = File.read(keyfile)
37           else
38             content = keyfile
39           end  
40           pkcs12 = OpenSSL::PKCS12.new(content, passphrase)
41           return pkcs12.key
42         rescue OpenSSL::PKCS12::PKCS12Error
43           raise ArgumentError.new("Invalid keyfile or passphrase")
44         end
45       end
46     end
47   end
48 end