source: osm/applications/editors/josm/plugins/MicrosoftStreetside/javadoc/src-html/org/openstreetmap/josm/plugins/streetside/oauth/OAuthPortListener.html@ 34416

Last change on this file since 34416 was 34416, checked in by renerr18, 7 years ago

Post official release refactoring and bug fixes (ImageInfoPanel)

  • Property svn:eol-style set to native
File size: 8.6 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html lang="en">
3<head>
4<title>Source code</title>
5<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
6</head>
7<body>
8<div class="sourceContainer">
9<pre><span class="sourceLineNo">001</span>// License: GPL. For details, see LICENSE file.<a name="line.1"></a>
10<span class="sourceLineNo">002</span>package org.openstreetmap.josm.plugins.streetside.oauth;<a name="line.2"></a>
11<span class="sourceLineNo">003</span><a name="line.3"></a>
12<span class="sourceLineNo">004</span><a name="line.4"></a>
13<span class="sourceLineNo">005</span>import java.io.IOException;<a name="line.5"></a>
14<span class="sourceLineNo">006</span>import java.io.InputStreamReader;<a name="line.6"></a>
15<span class="sourceLineNo">007</span>import java.io.OutputStreamWriter;<a name="line.7"></a>
16<span class="sourceLineNo">008</span>import java.io.PrintWriter;<a name="line.8"></a>
17<span class="sourceLineNo">009</span>import java.net.BindException;<a name="line.9"></a>
18<span class="sourceLineNo">010</span>import java.net.ServerSocket;<a name="line.10"></a>
19<span class="sourceLineNo">011</span>import java.net.Socket;<a name="line.11"></a>
20<span class="sourceLineNo">012</span>import java.util.Scanner;<a name="line.12"></a>
21<span class="sourceLineNo">013</span>import java.util.regex.Matcher;<a name="line.13"></a>
22<span class="sourceLineNo">014</span>import java.util.regex.Pattern;<a name="line.14"></a>
23<span class="sourceLineNo">015</span><a name="line.15"></a>
24<span class="sourceLineNo">016</span>import org.apache.log4j.Logger;<a name="line.16"></a>
25<span class="sourceLineNo">017</span>import org.openstreetmap.josm.Main;<a name="line.17"></a>
26<span class="sourceLineNo">018</span>import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties;<a name="line.18"></a>
27<span class="sourceLineNo">019</span>import org.openstreetmap.josm.tools.I18n;<a name="line.19"></a>
28<span class="sourceLineNo">020</span><a name="line.20"></a>
29<span class="sourceLineNo">021</span>/**<a name="line.21"></a>
30<span class="sourceLineNo">022</span>* Listens to the OAuth port (8763) in order to get the access token and sends<a name="line.22"></a>
31<span class="sourceLineNo">023</span>* back a simple reply.<a name="line.23"></a>
32<span class="sourceLineNo">024</span>*<a name="line.24"></a>
33<span class="sourceLineNo">025</span>* @author nokutu<a name="line.25"></a>
34<span class="sourceLineNo">026</span>*<a name="line.26"></a>
35<span class="sourceLineNo">027</span>*/<a name="line.27"></a>
36<span class="sourceLineNo">028</span>public class OAuthPortListener extends Thread {<a name="line.28"></a>
37<span class="sourceLineNo">029</span>public static final int PORT = 8763;<a name="line.29"></a>
38<span class="sourceLineNo">030</span><a name="line.30"></a>
39<span class="sourceLineNo">031</span>final static Logger logger = Logger.getLogger(OAuthPortListener.class);<a name="line.31"></a>
40<span class="sourceLineNo">032</span><a name="line.32"></a>
41<span class="sourceLineNo">033</span>protected static final String RESPONSE = String.format(<a name="line.33"></a>
42<span class="sourceLineNo">034</span> "&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;meta charset=\"utf8\"&gt;&lt;title&gt;%s&lt;/title&gt;&lt;/head&gt;&lt;body&gt;%s&lt;/body&gt;&lt;/html&gt;",<a name="line.34"></a>
43<span class="sourceLineNo">035</span> I18n.tr("Streetside login"),<a name="line.35"></a>
44<span class="sourceLineNo">036</span> I18n.tr("Login successful, return to JOSM.")<a name="line.36"></a>
45<span class="sourceLineNo">037</span>);<a name="line.37"></a>
46<span class="sourceLineNo">038</span>private final StreetsideLoginListener callback;<a name="line.38"></a>
47<span class="sourceLineNo">039</span><a name="line.39"></a>
48<span class="sourceLineNo">040</span>public OAuthPortListener(StreetsideLoginListener loginCallback) {<a name="line.40"></a>
49<span class="sourceLineNo">041</span> callback = loginCallback;<a name="line.41"></a>
50<span class="sourceLineNo">042</span>}<a name="line.42"></a>
51<span class="sourceLineNo">043</span><a name="line.43"></a>
52<span class="sourceLineNo">044</span>@Override<a name="line.44"></a>
53<span class="sourceLineNo">045</span>public void run() {<a name="line.45"></a>
54<span class="sourceLineNo">046</span> try (<a name="line.46"></a>
55<span class="sourceLineNo">047</span> ServerSocket serverSocket = new ServerSocket(PORT);<a name="line.47"></a>
56<span class="sourceLineNo">048</span> Socket clientSocket = serverSocket.accept();<a name="line.48"></a>
57<span class="sourceLineNo">049</span> PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8"), true);<a name="line.49"></a>
58<span class="sourceLineNo">050</span> Scanner in = new Scanner(new InputStreamReader(clientSocket.getInputStream(), "UTF-8"))<a name="line.50"></a>
59<span class="sourceLineNo">051</span> ) {<a name="line.51"></a>
60<span class="sourceLineNo">052</span> String s;<a name="line.52"></a>
61<span class="sourceLineNo">053</span> String accessToken = null;<a name="line.53"></a>
62<span class="sourceLineNo">054</span> while (in.hasNextLine()) {<a name="line.54"></a>
63<span class="sourceLineNo">055</span> s = in.nextLine();<a name="line.55"></a>
64<span class="sourceLineNo">056</span> Matcher tokenMatcher = Pattern.compile("^.*&amp;access_token=([^&amp;]+)&amp;.*$").matcher('&amp;'+s+'&amp;');<a name="line.56"></a>
65<span class="sourceLineNo">057</span> if (tokenMatcher.matches()) {<a name="line.57"></a>
66<span class="sourceLineNo">058</span> accessToken = tokenMatcher.group(1);<a name="line.58"></a>
67<span class="sourceLineNo">059</span> break;<a name="line.59"></a>
68<span class="sourceLineNo">060</span> } else if (s.contains("keep-alive")) {<a name="line.60"></a>
69<span class="sourceLineNo">061</span> break;<a name="line.61"></a>
70<span class="sourceLineNo">062</span> }<a name="line.62"></a>
71<span class="sourceLineNo">063</span> }<a name="line.63"></a>
72<span class="sourceLineNo">064</span><a name="line.64"></a>
73<span class="sourceLineNo">065</span> writeContent(out);<a name="line.65"></a>
74<span class="sourceLineNo">066</span> out.flush();<a name="line.66"></a>
75<span class="sourceLineNo">067</span><a name="line.67"></a>
76<span class="sourceLineNo">068</span> StreetsideUser.reset();<a name="line.68"></a>
77<span class="sourceLineNo">069</span><a name="line.69"></a>
78<span class="sourceLineNo">070</span> logger.info(I18n.tr("Successful login with Streetside, the access token is: {0}", accessToken));<a name="line.70"></a>
79<span class="sourceLineNo">071</span> // Saves the access token in preferences.<a name="line.71"></a>
80<span class="sourceLineNo">072</span> StreetsideUser.setTokenValid(true);<a name="line.72"></a>
81<span class="sourceLineNo">073</span> if (Main.main != null) {<a name="line.73"></a>
82<span class="sourceLineNo">074</span> StreetsideProperties.ACCESS_TOKEN.put(accessToken);<a name="line.74"></a>
83<span class="sourceLineNo">075</span> String username = StreetsideUser.getUsername();<a name="line.75"></a>
84<span class="sourceLineNo">076</span> logger.info(I18n.tr("The username is: {0}", username));<a name="line.76"></a>
85<span class="sourceLineNo">077</span> if (callback != null) {<a name="line.77"></a>
86<span class="sourceLineNo">078</span> callback.onLogin(username);<a name="line.78"></a>
87<span class="sourceLineNo">079</span> }<a name="line.79"></a>
88<span class="sourceLineNo">080</span> }<a name="line.80"></a>
89<span class="sourceLineNo">081</span> } catch (BindException e) {<a name="line.81"></a>
90<span class="sourceLineNo">082</span> logger.warn(e);<a name="line.82"></a>
91<span class="sourceLineNo">083</span> } catch (IOException e) {<a name="line.83"></a>
92<span class="sourceLineNo">084</span> logger.error(e);<a name="line.84"></a>
93<span class="sourceLineNo">085</span> }<a name="line.85"></a>
94<span class="sourceLineNo">086</span>}<a name="line.86"></a>
95<span class="sourceLineNo">087</span><a name="line.87"></a>
96<span class="sourceLineNo">088</span>private static void writeContent(PrintWriter out) {<a name="line.88"></a>
97<span class="sourceLineNo">089</span> out.println("HTTP/1.1 200 OK");<a name="line.89"></a>
98<span class="sourceLineNo">090</span> out.println("Content-Length: " + RESPONSE.length());<a name="line.90"></a>
99<span class="sourceLineNo">091</span> out.println("Content-Type: text/html" + "\r\n\r\n");<a name="line.91"></a>
100<span class="sourceLineNo">092</span> out.println(RESPONSE);<a name="line.92"></a>
101<span class="sourceLineNo">093</span>}<a name="line.93"></a>
102<span class="sourceLineNo">094</span>}<a name="line.94"></a>
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163</pre>
164</div>
165</body>
166</html>
Note: See TracBrowser for help on using the repository browser.