41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								module.exports = authenticationBeforeRequest
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const btoa = require('btoa-lite')
							 | 
						||
| 
								 | 
							
								const uniq = require('lodash.uniq')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function authenticationBeforeRequest (state, options) {
							 | 
						||
| 
								 | 
							
								  if (!state.auth.type) {
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (state.auth.type === 'basic') {
							 | 
						||
| 
								 | 
							
								    const hash = btoa(`${state.auth.username}:${state.auth.password}`)
							 | 
						||
| 
								 | 
							
								    options.headers['authorization'] = `Basic ${hash}`
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (state.auth.type === 'token') {
							 | 
						||
| 
								 | 
							
								    options.headers['authorization'] = `token ${state.auth.token}`
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (state.auth.type === 'app') {
							 | 
						||
| 
								 | 
							
								    options.headers['authorization'] = `Bearer ${state.auth.token}`
							 | 
						||
| 
								 | 
							
								    const acceptHeaders = options.headers['accept'].split(',')
							 | 
						||
| 
								 | 
							
								      .concat('application/vnd.github.machine-man-preview+json')
							 | 
						||
| 
								 | 
							
								    options.headers['accept'] = uniq(acceptHeaders).filter(Boolean).join(',')
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  options.url += options.url.indexOf('?') === -1 ? '?' : '&'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (state.auth.token) {
							 | 
						||
| 
								 | 
							
								    options.url += `access_token=${encodeURIComponent(state.auth.token)}`
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const key = encodeURIComponent(state.auth.key)
							 | 
						||
| 
								 | 
							
								  const secret = encodeURIComponent(state.auth.secret)
							 | 
						||
| 
								 | 
							
								  options.url += `client_id=${key}&client_secret=${secret}`
							 | 
						||
| 
								 | 
							
								}
							 |