· 6 years ago · Jan 17, 2019, 07:18 AM
1package hello;
2
3import org.springframework.boot.SpringApplication;
4import org.springframework.boot.autoconfigure.SpringBootApplication;
5import org.springframework.http.HttpHeaders;
6import javax.crypto.Mac;
7import javax.crypto.spec.SecretKeySpec;
8import java.util.*;
9
10@SpringBootApplication
11public class Application {
12
13 public static void main(String[] args) {
14 SpringApplication.run(Application.class, args);
15
16 String urlO = "https://api.twitter.com/1.1/direct_messages/events/new.json";
17 createOAuthHeader("POST", urlO, "texttt");
18 }
19
20 public static String createTwitterBody(String text, String recipients) {
21 return String.format("{\"event\": {\"type\": \"message_create\", \"message_create\": {\"target\": {\"recipient_id\": \"%s\"}, \"message_data\": {\"text\": \"%s\"}}}}", recipients, text);
22 }
23
24 public static void printMap(Map<String, String> map) {
25 //System.out.println(">>>>>>>>>>>>>>>MAP_BEGIN");
26 for (Map.Entry<String, String> entry : map.entrySet()) {
27 //System.out.println(entry.getKey() + " => " + entry.getValue());
28 }
29 //System.out.println(">>>>>>>>>>>>>>>MAP_END");
30 }
31
32 public static String createParameterString (String oauth_consumer_key, String oauth_token, String nonce, String epochTime, String text) {
33 Map<String, String> map = new TreeMap<>(new Comparator<String>() {
34 public int compare(String o1, String o2) {
35 return o1.toLowerCase().compareTo(o2.toLowerCase());
36 }
37 });
38
39 map.put(HTTPClient.percentEncode("oauth_consumer_key"), HTTPClient.percentEncode(oauth_consumer_key));
40 map.put(HTTPClient.percentEncode("oauth_nonce"), HTTPClient.percentEncode(nonce));
41 map.put(HTTPClient.percentEncode("oauth_signature_method"), HTTPClient.percentEncode("HMAC-SHA1"));
42 map.put(HTTPClient.percentEncode("oauth_timestamp"), HTTPClient.percentEncode(epochTime));
43 map.put(HTTPClient.percentEncode("oauth_token"), HTTPClient.percentEncode(oauth_token));
44 map.put(HTTPClient.percentEncode("oauth_version"), HTTPClient.percentEncode("1.0"));
45
46 //debug:
47 printMap(map);
48
49 StringBuilder sb = new StringBuilder("");
50 for (Map.Entry<String, String> entry : map.entrySet()) {
51 String a;
52 if(sb.toString().equals("")) {
53 a = entry.getKey() + "=" + entry.getValue();
54 }
55 else {
56 a = "&" + entry.getKey() + "=" + entry.getValue();
57 }
58 sb.append(a);
59 }
60
61 //debug
62 //System.out.println(">>>>>parameterString: " + sb.toString());
63
64 return sb.toString();
65 }
66
67 public static String createOAuthBaseString(String httpMethod, String url, String parameterString) {
68 StringBuilder sb = new StringBuilder(httpMethod.toUpperCase());
69 sb.append("&");
70 sb.append(HTTPClient.percentEncode(url));
71 sb.append("&");
72 sb.append(HTTPClient.percentEncode(parameterString));
73
74 //debug
75 //System.out.println(">>>>>baseString: " + sb.toString());
76
77 return sb.toString();
78 }
79
80 public static String createOAuthSigningKey(String oauth_consumer_secret, String oauth_token_secret) {
81 StringBuilder sb = new StringBuilder(HTTPClient.percentEncode(oauth_consumer_secret));
82 sb.append("&");
83 sb.append(HTTPClient.percentEncode(HTTPClient.percentEncode(oauth_token_secret)));
84
85 //debug
86 //System.out.println(">>>>>signingKey: " + sb.toString());
87
88 return sb.toString();
89 }
90
91 public static String createSignatureBase64(String baseString, String signingKey) {
92
93 byte[] signature = null;
94 try {
95 Mac mac = Mac.getInstance("HmacSHA1");
96 SecretKeySpec spec = new SecretKeySpec(signingKey.getBytes(), "HmacSHA1");
97 mac.init(spec);
98 signature = mac.doFinal(baseString.getBytes());
99 }
100 catch (Exception e) {
101 e.printStackTrace();
102 return "error";
103 }
104
105 //System.out.println(">>>>>>>>>signature: " + HTTPClient.bytesToString(signature));
106
107 String signatureBase64 = HTTPClient.bytesBase64Encode(signature);
108
109 System.out.println(">>>>>>>>>signature_Base64: " + signatureBase64);
110
111 return signatureBase64;
112 }
113
114 private static String generateNonce() {
115 return HTTPClient.generateRandomLettersString(42);
116 }
117
118 //https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html
119 public static HttpHeaders createOAuthHeader(String httpMethod, String url, String text) {
120
121 String oauth_consumer_keyA = "xvz1evFS4wEEPTGEFPHBog";
122 String oauth_tokenA = "370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb";
123
124 String epochO = HTTPClient.getCurrentEpochTimeAsString();
125 String epochA = "1318622958";
126
127 String nonce = generateNonce();
128 String nonceA = "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg";
129 String parameterString = createParameterString(oauth_consumer_keyA, oauth_tokenA, nonceA, epochA, text);
130
131 //String baseString = createOAuthBaseString(httpMethod, url, parameterString);
132 String baseString = "POST&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521";
133
134 String oauth_consumer_secretA = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw";
135 String oauth_token_secretA = "LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE";
136
137 String signingKey = createOAuthSigningKey(oauth_consumer_secretA, oauth_token_secretA);
138
139 //String signature = generateSignature(baseString, oauth_consumer_secret, oauth_token_secret);
140 String signatureBase64 = createSignatureBase64(baseString, signingKey);
141
142 //model: OAuth oauth_consumer_key="YOUR_CONSUMER_KEY", oauth_nonce="AUTO_GENERATED_NONCE", oauth_signature="AUTO_GENERATED_SIGNATURE", oauth_signature_method="HMAC-SHA1", oauth_timestamp="AUTO_GENERATED_TIMESTAMP", oauth_token="USERS_ACCESS_TOKEN", oauth_version="1.0"
143 String headerText = "OAuth oauth_consumer_key=\"" + oauth_consumer_keyA + "\", oauth_nonce=\"" + nonceA + "\", oauth_signature=\"" + signatureBase64 + "\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"" + epochA + "\", oauth_token=\"" + oauth_tokenA + "\", oauth_version=\"1.0\"";
144
145 //System.out.println(">>>>>>>>>header: " + headerText);
146
147 HttpHeaders httpHeaders = new HttpHeaders();
148 httpHeaders.add("Authorization", headerText);
149
150 return httpHeaders;
151 }
152
153
154}