-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCallBackListener.cs
More file actions
77 lines (69 loc) · 2.19 KB
/
CallBackListener.cs
File metadata and controls
77 lines (69 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System.Net;
using System.Text.RegularExpressions;
using SpotiSharpBackend;
namespace SpotiSharpBackend;
public class CallBackListener
{
private static CallBackListener _callBackListener;
public static CallBackListener Instance => _callBackListener ??= new CallBackListener();
private HttpListener _httpListener = new HttpListener();
private CallBackListener()
{
_httpListener.Prefixes.Add("http://127.0.0.1:5000/callback/");
_httpListener.Start();
var _responseThread = new Thread(ResponseThread);
_responseThread.Start();
}
~CallBackListener()
{
if (_httpListener.IsListening)
{
_httpListener.Close();
}
}
private void ResponseThread()
{
HttpListenerContext context = _httpListener.GetContext();
var respURL = context.Request.Url.ToString();
var code = Regex.Match(respURL, "(?<=code=).*").ToString();
byte[] _responseArray;
if (code != string.Empty)
{
_responseArray =
"""
<html>
<head>
<title>
Authentication Successful
</title>
</head>
<body>
The Spotify Authentication was Successful. You can now close this page.
</body>
</html>
"""u8.ToArray();
Authentication.GetCallback(code);
}
else
{
_responseArray =
"""
<html>
<head>
<title>
Authentication Failed
</title>
</head>
<body>
The Spotify Authentication Failed.
</body>
</html>
"""u8.ToArray();
}
context.Response.OutputStream.Write(_responseArray, 0, _responseArray.Length);
context.Response.KeepAlive = false;
context.Response.Close();
_httpListener.Close();
_callBackListener = null;
}
}