49 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # Copyright 2010 Google Inc.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #      http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| module Google
 | |
|   class APIClient
 | |
|     ##
 | |
|     # Helper for loading keys from the PKCS12 files downloaded when
 | |
|     # setting up service accounts at the APIs Console.
 | |
|     #
 | |
|     module PKCS12
 | |
|       ##
 | |
|       # Loads a key from PKCS12 file, assuming a single private key
 | |
|       # is present.
 | |
|       #
 | |
|       # @param [String] keyfile
 | |
|       #    Path of the PKCS12 file to load. If not a path to an actual file,
 | |
|       #    assumes the string is the content of the file itself. 
 | |
|       # @param [String] passphrase
 | |
|       #   Passphrase for unlocking the private key
 | |
|       #
 | |
|       # @return [OpenSSL::PKey] The private key for signing assertions.
 | |
|       def self.load_key(keyfile, passphrase)
 | |
|         begin
 | |
|           if File.exists?(keyfile)
 | |
|             content = File.read(keyfile)
 | |
|           else
 | |
|             content = keyfile
 | |
|           end  
 | |
|           pkcs12 = OpenSSL::PKCS12.new(content, passphrase)
 | |
|           return pkcs12.key
 | |
|         rescue OpenSSL::PKCS12::PKCS12Error
 | |
|           raise ArgumentError.new("Invalid keyfile or passphrase")
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |