commit b54e35f960f78cd09030f573f3f6c06ae98c60b2
parent e2e2bad3bce7ca43b0087ae8de448a27baa48855
Author: MTRNord <mtrnord1@gmail.com>
Date: Thu, 13 Apr 2017 10:53:38 +0200
cleanup code structure
Diffstat:
4 files changed, 102 insertions(+), 100 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -8,4 +8,4 @@ Cargo.lock
target/
**/*.rs.bk
Cargo.lock
-src/proto/**/*
+src/hangups/proto/**/*
diff --git a/Cargo.toml b/Cargo.toml
@@ -7,7 +7,5 @@ authors = ["MTRNord"]
yup-oauth2 = "1.0.5"
hyper = "0.10.2"
hyper-native-tls = "0.2.2"
-serde = "0.9"
-serde_json = "0.9"
protobuf = "1.2.2"
rand = "0.3"
diff --git a/src/hangups/mod.rs b/src/hangups/mod.rs
@@ -0,0 +1,93 @@
+#[path = "proto/hangouts.rs"] mod hangouts;
+
+pub mod hangups {
+ use hangups::hangouts::{MessageContent, Segment, SegmentType, RequestHeader, EventRequestHeader,
+ SendChatMessageRequest, DeliveryMediumType, OffTheRecordStatus,
+ EventType, SendChatMessageResponse, DeliveryMedium, ConversationId};
+ use protobuf::RepeatedField;
+ use rand::random;
+ use hyper::header::Headers;
+ use hyper::header::Cookie;
+ use hyper::client::Client;
+ header! { (ContentType, "content-type") => [String] }
+ header! {
+ (XGoogEncodeResponseIfExecutable, "X-Goog-Encode-Response-If-Executable") => [String]
+ }
+
+ fn get_auth_headers() {}
+
+ fn api_request(endpoint_url: String,
+ content_type: String,
+ cookies: String,
+ payload: SendChatMessageRequest) {
+ let mut headers = Headers::new();
+ headers.set(Cookie(vec![String::from(cookies.to_owned())]));
+ headers.set(ContentType(String::from(content_type.to_owned())));
+ headers.set(XGoogEncodeResponseIfExecutable(String::from("base64".to_owned())));
+ let client = Client::new();
+ let post_request = client.post(&*endpoint_url).headers(headers);
+ }
+
+ fn protobuf_api_request(api_endpoint: String,
+ request_struct: SendChatMessageRequest,
+ response_struct: SendChatMessageResponse) {
+ let url = format!("https://clients6.google.com/chat/v1/{}", api_endpoint);
+ let output = api_request(url,
+ String::from("application/x-protobuf"),
+ String::from("proto"),
+ request_struct);
+ }
+
+ pub fn send_message(message: String, conv_id_raw: String) {
+ //Prepare message
+ let segment_type = SegmentType::SEGMENT_TYPE_TEXT;
+ let mut segment_raw = Segment::new();
+ segment_raw.set_field_type(segment_type);
+ segment_raw.set_text(message);
+ let mut segment = RepeatedField::new();
+ segment.push(segment_raw);
+ let mut message_content = MessageContent::new();
+ message_content.set_segment(segment);
+
+
+ //Prepare Request
+ let mut request_header = RequestHeader::new();
+ request_header.set_language_code(String::from("en"));
+
+ let mut delivery_medium = DeliveryMedium::new();
+ delivery_medium.set_medium_type(DeliveryMediumType::DELIVERY_MEDIUM_BABEL);
+ let expected_otr = OffTheRecordStatus::OFF_THE_RECORD_STATUS_ON_THE_RECORD;
+ let client_generated_id = random::<u64>();
+ let event_type = EventType::EVENT_TYPE_REGULAR_CHAT_MESSAGE;
+ let mut event_request_header = EventRequestHeader::new();
+ let mut conv_id = ConversationId::new();
+ conv_id.set_id(conv_id_raw);
+ event_request_header.set_conversation_id(conv_id);
+ event_request_header.set_delivery_medium(delivery_medium);
+ event_request_header.set_expected_otr(expected_otr);
+ event_request_header.set_client_generated_id(client_generated_id);
+ event_request_header.set_event_type(event_type);
+
+ let mut request = SendChatMessageRequest::new();
+ request.set_request_header(request_header);
+ request.set_message_content(message_content);
+ request.set_event_request_header(event_request_header);
+
+ //Prepare response
+ let response = SendChatMessageResponse::new();
+
+ let err = protobuf_api_request(String::from("conversations/sendchatmessage"), request, response);
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn test_send_message() {
+ use super::hangups::send_message;
+
+ let test_message = String::from("TEST!");
+ let test_conv = String::from("Ugxu9JRlbNPSqk5Ye1V4AaABAQ");
+ send_message(test_message, test_conv);
+ }
+}
diff --git a/src/lib.rs b/src/lib.rs
@@ -1,9 +1,8 @@
+#![allow(unused_variables)]
#[macro_use]
extern crate hyper;
extern crate hyper_native_tls;
extern crate yup_oauth2 as oauth2;
-extern crate serde;
-extern crate serde_json;
extern crate protobuf;
extern crate rand;
@@ -13,7 +12,7 @@ pub mod auth {
use hyper::net::HttpsConnector;
use hyper_native_tls::NativeTlsClient;
use oauth2::{Authenticator, DefaultAuthenticatorDelegate, MemoryStorage, GetToken,
- ApplicationSecret};
+ ApplicationSecret, FlowType};
use std::io::{stdin, stdout, Write};
let ssl = NativeTlsClient::new().unwrap();
@@ -24,7 +23,7 @@ pub mod auth {
let client_secret = String::from("KWsJlkaMn1jGLxQpWxMnOox-");
let token_uri = String::from("https://accounts.google.com/o/oauth2/token");
let auth_uri = String::from("https://accounts.google.com/o/oauth2/programmatic_auth");
- let redirect_uri = String::from("");
+ let redirect_uri = String::from("urn:ietf:wg:oauth:2.0:oob");
if client_email == String::from("") {
let mut client_email = String::new();
println!("Please enter Google Email: ");
@@ -48,7 +47,7 @@ pub mod auth {
auth_uri: auth_uri,
redirect_uris: vec![redirect_uri],
project_id: None,
- client_email: None,
+ client_email: Some(client_email),
auth_provider_x509_cert_url: None,
client_x509_cert_url: None,
};
@@ -56,12 +55,12 @@ pub mod auth {
DefaultAuthenticatorDelegate,
client,
<MemoryStorage as Default>::default(),
- None)
- .token(&["https://www.googleapis.com/auth/userinfo.email"]);
+ Some(FlowType::InstalledInteractive))
+ .token(&["https://www.google.com/accounts/OAuthLogin", "https://www.googleapis.com/auth/userinfo.email"]);
match res {
Ok(t) => {
println!("Acquired access_token: {}", t.access_token);
- println!("Acquired access_token: {}", t.refresh_token);
+ println!("Acquired refresh_token: {}", t.refresh_token);
}
Err(err) => println!("Failed to acquire token: {}", err),
}
@@ -69,85 +68,7 @@ pub mod auth {
}
}
-#[path = "."]
-pub mod hangups {
- #[path = "proto/hangouts.rs"] mod hangouts;
- use self::hangouts::{MessageContent, Segment, SegmentType, RequestHeader, EventRequestHeader,
- SendChatMessageRequest, DeliveryMediumType, OffTheRecordStatus,
- EventType, SendChatMessageResponse, DeliveryMedium, ConversationId};
- use protobuf::RepeatedField;
- use rand::random;
- use hyper::header::Headers;
- use hyper::header::Cookie;
- use hyper::client::Client;
- header! { (ContentType, "content-type") => [String] }
- header! {
- (XGoogEncodeResponseIfExecutable, "X-Goog-Encode-Response-If-Executable") => [String]
- }
-
- fn get_auth_headers() {}
-
- fn api_request(endpoint_url: String,
- content_type: String,
- cookies: String,
- payload: SendChatMessageRequest) {
- let mut headers = Headers::new();
- headers.set(Cookie(vec![String::from(cookies.to_owned())]));
- headers.set(ContentType(String::from(content_type.to_owned())));
- headers.set(XGoogEncodeResponseIfExecutable(String::from("base64".to_owned())));
- let client = Client::new();
- let post_request = client.post(&*endpoint_url).headers(headers);
- }
-
- fn protobuf_api_request(api_endpoint: String,
- request_struct: SendChatMessageRequest,
- response_struct: SendChatMessageResponse) {
- let url = format!("https://clients6.google.com/chat/v1/{}", api_endpoint);
- let output = api_request(url,
- String::from("application/x-protobuf"),
- String::from("proto"),
- request_struct);
- }
-
- pub fn send_message(message: String, conv_id_raw: String) {
- //Prepare message
- let segment_type = SegmentType::SEGMENT_TYPE_TEXT;
- let mut segment_raw = Segment::new();
- segment_raw.set_field_type(segment_type);
- segment_raw.set_text(message);
- let mut segment = RepeatedField::new();
- segment.push(segment_raw);
- let mut message_content = MessageContent::new();
- message_content.set_segment(segment);
-
-
- //Prepare Request
- let mut request_header = RequestHeader::new();
- request_header.set_language_code(String::from("en"));
-
- let mut delivery_medium = DeliveryMedium::new();
- delivery_medium.set_medium_type(DeliveryMediumType::DELIVERY_MEDIUM_BABEL);
- let expected_otr = OffTheRecordStatus::OFF_THE_RECORD_STATUS_ON_THE_RECORD;
- let client_generated_id = random::<u64>();
- let event_type = EventType::EVENT_TYPE_REGULAR_CHAT_MESSAGE;
- let mut event_request_header = EventRequestHeader::new();
- let mut conv_id = ConversationId::new();
- conv_id.set_id(conv_id_raw);
- event_request_header.set_conversation_id(conv_id);
- event_request_header.set_delivery_medium(delivery_medium);
- event_request_header.set_expected_otr(expected_otr);
- event_request_header.set_client_generated_id(client_generated_id);
- event_request_header.set_event_type(event_type);
-
- let mut request = SendChatMessageRequest::new();
- request.set_request_header(request_header);
- request.set_message_content(message_content);
- request.set_event_request_header(event_request_header);
-
- //Prepare response
- let response = SendChatMessageResponse::new();
- }
-}
+pub mod hangups;
#[cfg(test)]
mod tests {
@@ -158,7 +79,6 @@ mod tests {
use std::env;
match env::var_os("CI") {
- #[allow(unused_variables)]
Some(env) => println!("CI's currently not supported at this test"),
None => {
let mut client_email = String::new();
@@ -177,13 +97,4 @@ mod tests {
}
}
}
-
- #[test]
- fn test_send_message() {
- use super::hangups::send_message;
-
- let test_message = String::from("TEST!");
- let test_conv = String::from("Ugxu9JRlbNPSqk5Ye1V4AaABAQ");
- send_message(test_message, test_conv);
- }
}