mirror of
				https://kkgithub.com/actions/setup-node.git
				synced 2025-11-04 04:31:55 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
module.exports = authenticationBeforeRequest
 | 
						|
 | 
						|
const btoa = require('btoa-lite')
 | 
						|
 | 
						|
const withAuthorizationPrefix = require('./with-authorization-prefix')
 | 
						|
 | 
						|
function authenticationBeforeRequest (state, options) {
 | 
						|
  if (typeof state.auth === 'string') {
 | 
						|
    options.headers['authorization'] = withAuthorizationPrefix(state.auth)
 | 
						|
 | 
						|
    // https://developer.github.com/v3/previews/#integrations
 | 
						|
    if (/^bearer /i.test(state.auth) && !/machine-man/.test(options.headers['accept'])) {
 | 
						|
      const acceptHeaders = options.headers['accept'].split(',')
 | 
						|
        .concat('application/vnd.github.machine-man-preview+json')
 | 
						|
      options.headers['accept'] = acceptHeaders.filter(Boolean).join(',')
 | 
						|
    }
 | 
						|
 | 
						|
    return
 | 
						|
  }
 | 
						|
 | 
						|
  if (state.auth.username) {
 | 
						|
    const hash = btoa(`${state.auth.username}:${state.auth.password}`)
 | 
						|
    options.headers['authorization'] = `Basic ${hash}`
 | 
						|
    if (state.otp) {
 | 
						|
      options.headers['x-github-otp'] = state.otp
 | 
						|
    }
 | 
						|
    return
 | 
						|
  }
 | 
						|
 | 
						|
  if (state.auth.clientId) {
 | 
						|
    // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as
 | 
						|
    // Basic Authorization instead of query parameters. The only routes where that applies share the same
 | 
						|
    // URL though: `/applications/:client_id/tokens/:access_token`.
 | 
						|
    //
 | 
						|
    //  1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization)
 | 
						|
    //  2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization)
 | 
						|
    //  3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application)
 | 
						|
    //
 | 
						|
    // We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token"
 | 
						|
    // as well as "/applications/123/tokens/token456"
 | 
						|
    if (/\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/.test(options.url)) {
 | 
						|
      const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`)
 | 
						|
      options.headers['authorization'] = `Basic ${hash}`
 | 
						|
      return
 | 
						|
    }
 | 
						|
 | 
						|
    options.url += options.url.indexOf('?') === -1 ? '?' : '&'
 | 
						|
    options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`
 | 
						|
    return
 | 
						|
  }
 | 
						|
 | 
						|
  return Promise.resolve()
 | 
						|
 | 
						|
    .then(() => {
 | 
						|
      return state.auth()
 | 
						|
    })
 | 
						|
 | 
						|
    .then((authorization) => {
 | 
						|
      options.headers['authorization'] = withAuthorizationPrefix(authorization)
 | 
						|
    })
 | 
						|
}
 |