aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2017-11-12 17:50:56 +0100
committerTeddy Wing2017-11-12 17:50:56 +0100
commite0190cac41daa901349c7e10e42ef0c4067d3f7b (patch)
treeaacf4bfecf1137f8851b639f912b248d5d40b181 /src
parent42647c89062168851438f861bb84c7f6e14440f5 (diff)
downloadkipper-e0190cac41daa901349c7e10e42ef0c4067d3f7b.tar.bz2
auth_credentials(): Get credentials from arguments
Remove the hard-coded user ID and token values. Instead, take these from arguments to the function. In order to not have to pass those arguments through to both `get_jobs()` and `request_job()`, make a new private function that builds a 'reqwest' client with the required auth header.
Diffstat (limited to 'src')
-rw-r--r--src/jenkins.rs47
1 files changed, 28 insertions, 19 deletions
diff --git a/src/jenkins.rs b/src/jenkins.rs
index 6bc1d8d..0e70af9 100644
--- a/src/jenkins.rs
+++ b/src/jenkins.rs
@@ -30,7 +30,7 @@ use std::thread;
use std::thread::sleep;
use std::time::{Duration, Instant};
-use self::reqwest::header::{Authorization, Basic};
+use self::reqwest::header;
use self::url::Url;
use af83;
@@ -87,11 +87,15 @@ pub fn find_and_track_build_and_update_status(
jenkins_token: &String,
github_token: &String,
) -> Result<(), Box<Error>> {
- let jobs = get_jobs(commit_ref.repo.as_ref())?;
+ let jenkins_client = jenkins_request_client(
+ &jenkins_user_id,
+ &jenkins_token
+ )?;
+ let jobs = get_jobs(&jenkins_client, commit_ref.repo.as_ref())?;
let t20_minutes = 60 * 20;
for job_url in jobs {
- let mut job = request_job(job_url.as_ref())?;
+ let mut job = request_job(&jenkins_client, job_url.as_ref())?;
// Does `displayName` match
if job_for_commit(&job, &commit_ref) {
@@ -149,6 +153,7 @@ pub fn find_and_track_build_and_update_status(
sleep(Duration::from_secs(30));
let updated_job = request_job(
+ &jenkins_client,
job_url.as_ref()
).expect(
format!("Failed to request job '{}'.", job_url).as_ref()
@@ -184,20 +189,15 @@ pub fn find_and_track_build_and_update_status(
Ok(())
}
-pub fn auth_credentials() -> Basic {
- Basic {
- username: "username".to_string(),
- password: Some("token".to_string()),
+pub fn auth_credentials(user_id: String, token: String) -> header::Basic {
+ header::Basic {
+ username: user_id,
+ password: Some(token),
}
}
-pub fn get_jobs(repo_name: &str) -> Result<Vec<String>, Box<Error>> {
- let client = reqwest::Client::new();
-
- let credentials = auth_credentials();
-
+pub fn get_jobs(client: &reqwest::Client, repo_name: &str) -> Result<Vec<String>, Box<Error>> {
let mut response = client.get(&format!("{}/job/{}-branches/api/json", API_URL, repo_name))
- .header(Authorization(credentials))
.send()?;
let body = response.text()?;
@@ -213,15 +213,10 @@ pub fn get_jobs(repo_name: &str) -> Result<Vec<String>, Box<Error>> {
)
}
-pub fn request_job(url: &str) -> Result<Job, Box<Error>> {
+pub fn request_job(client: &reqwest::Client, url: &str) -> Result<Job, Box<Error>> {
let url = Url::parse(url.as_ref())?;
- let client = reqwest::Client::new();
-
- let credentials = auth_credentials();
-
let mut response = client.get(&format!("{}{}/api/json", API_URL, url.path()))
- .header(Authorization(credentials))
.send()?;
let body = response.text()?;
@@ -255,6 +250,20 @@ pub fn result_from_job(status: Option<String>) -> JobStatus {
}
+fn jenkins_request_client(user_id: &String, token: &String) -> Result<reqwest::Client, Box<Error>> {
+ let credentials = auth_credentials(user_id.to_owned(), token.to_owned());
+
+ let mut headers = header::Headers::new();
+ headers.set(header::Authorization(credentials));
+
+ let client = reqwest::Client::builder()
+ .default_headers(headers)
+ .build()?;
+
+ Ok(client)
+}
+
+
#[cfg(test)]
mod tests {
use self::mockito::mock;