1use json::{array, JsonValue, object};
2use crate::applet::Applet;
3use crate::wecom::WeCom;
4use lazy_static::lazy_static;
5use std::sync::Mutex;
6use std::collections::HashMap;
7
8pub mod wecom;
9pub mod applet;
10
11
12lazy_static! {
13 pub static ref ACCESS_TOKEN: Mutex<HashMap<String,JsonValue>> =Mutex::new(HashMap::new());
14}
15
16#[derive(Clone)]
17pub enum Wechat {
18 WeCom(WeCom),
19 Applet(Applet),
20 None,
21}
22
23impl Wechat {
24 pub fn new(data: JsonValue) -> Self {
25 let is_none = ACCESS_TOKEN.lock().unwrap().get(&*data["appid"].to_string()).is_none();
26 let access_token = if is_none {
27 "".to_string()
28 } else {
29 ACCESS_TOKEN.lock().unwrap().get(&*data["appid"].to_string()).unwrap().clone()["access_token"].to_string()
30 };
31 let expires_in = if is_none {
32 0
33 } else {
34 ACCESS_TOKEN.lock().unwrap().get(&*data["appid"].to_string()).unwrap().clone()["expires_in"].as_i64().unwrap()
35 };
36 match data["mode"].as_str().unwrap_or("") {
37 "wecom" => {
38 Wechat::WeCom(WeCom {
39 corp_id: data["appid"].to_string(),
40 agent_id: data["agent_id"].to_string(),
41 secret: data["secret"].to_string(),
42 access_token,
43 expires_in,
44 })
45 }
46 "applet" => Wechat::Applet(Applet {
47 appid: data["appid"].to_string(),
48 secret: data["secret"].to_string(),
49 access_token,
50 expires_in,
51 }),
52 _ => Wechat::None
53 }
54 }
55 pub fn check(&mut self) -> bool {
56 match self {
57 Wechat::WeCom(e) => e.check(),
58 Wechat::Applet(e) => e.check(),
59 Wechat::None => false
60 }
61 }
62 pub fn getuserinfo(&mut self, code: &str) -> JsonValue {
64 match self {
65 Wechat::WeCom(e) => e.getuserinfo(code),
66 Wechat::Applet(e) => e.getuserinfo(code),
67 Wechat::None => object! {}
68 }
69 }
70 pub fn code2_session(&mut self, code: &str) -> JsonValue {
72 match self {
73 Wechat::WeCom(_) => object! {},
74 Wechat::Applet(e) => e.code2_session(code),
75 Wechat::None => object! {}
76 }
77 }
78 pub fn get_phone_number(&mut self, iv: &str, encrypted_data: &str, session_key: &str) -> JsonValue {
80 match self {
81 Wechat::WeCom(_) => object! {},
82 Wechat::Applet(e) => e.get_phone_number(iv, encrypted_data, session_key),
83 Wechat::None => object! {}
84 }
85 }
86 pub fn get_department(&mut self) -> JsonValue {
88 match self {
89 Wechat::WeCom(e) => e.get_department(),
90 Wechat::Applet(_) => array![],
91 Wechat::None => array![]
92 }
93 }
94 pub fn get_simplelist(&mut self,department_id:&str) -> JsonValue {
96 match self {
97 Wechat::WeCom(e) => e.get_simplelist(department_id),
98 Wechat::Applet(_) => array![],
99 Wechat::None => array![]
100 }
101 }
102 pub fn convert_to_openid(&mut self,userid:&str) -> JsonValue {
104 match self {
105 Wechat::WeCom(e) => e.convert_to_openid(userid),
106 Wechat::Applet(_) => array![],
107 Wechat::None => array![]
108 }
109 }
110 pub fn get_simplelist_details(&mut self,department_id:&str) -> JsonValue {
112 match self {
113 Wechat::WeCom(e) => e.get_simplelist_details(department_id),
114 Wechat::Applet(_) => array![],
115 Wechat::None => array![]
116 }
117 }
118}