Repository navigation
Expand file tree
/
Copy pathConfigService.cs
More file actions
191 lines (152 loc) · 5.04 KB
/
Copy pathConfigService.cs
File metadata and controls
191 lines (152 loc) · 5.04 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//------------------------------------------------------------------------------
// <copyright company="LeanKit Inc.">
// Copyright (c) LeanKit Inc. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using AutoMapper;
using IntegrationService.API.Models;
using IntegrationService.Util;
using ServiceStack.ServiceHost;
namespace IntegrationService.API
{
[Route("/configuration")]
public class ConfigurationRequest : Request { }
[Route("/leankit-login")]
public class LeankitLoginRequest : Request { }
[Route("/target-login")]
public class TargetLoginRequest : Request { }
[Route("/mapping/{BoardId}")]
public class MappingRequest : BoardMappingModel { }
[Route("/settings")]
public class SettingsRequest : ConfigurationSettingsModel { }
[Route("/configuration/text")]
public class ConfigurationTextRequest { }
[Route("/activate")]
public class ActivationRequest { }
public class ConfigService : ServiceBase
{
public object Get(ConfigurationRequest request)
{
ConfigurationModel configModel;
try
{
var store = GetConfigurationStorage();
var config = store.Load() ?? new Configuration();
// map to ConfigurationModel
configModel = Mapper.Map<ConfigurationModel>(config);
// strip 'https://' from target host name
if (configModel.Target != null
&& !string.IsNullOrEmpty(configModel.Target.Host)
&& configModel.Target.Host.StartsWith("http"))
{
var uri = new Uri(configModel.Target.Host);
configModel.Target.Host = uri.Host + uri.PathAndQuery;
}
}
catch (Exception ex)
{
ex.Message.Error(ex);
return ServerError(ex.Message);
}
return OK(configModel);
}
public object Put(MappingRequest request)
{
var model = (BoardMappingModel) request;
var mapping = Mapper.Map<BoardMapping>(model);
var localStorage = GetConfigurationStorage();
var config = localStorage.Load();
// ensure the mapping collection exists
if (config.Mappings == null)
config.Mappings = new List<BoardMapping>();
// if this mapping is already in the mapping collection, delete it
var existingMapping = config.Mappings.FirstOrDefault(x => x.Identity.LeanKit == mapping.Identity.LeanKit);
if (existingMapping != null)
config.Mappings.Remove(existingMapping);
// add the revised mapping and save
config.Mappings.Add(mapping);
localStorage.Save(config);
return OK();
}
public object Delete(MappingRequest request)
{
var configStore = GetConfigurationStorage();
if (configStore == null) return ServerError("No Configuration is available");
var config = configStore.Load();
if (config == null) return ServerError("Error attempting to load configuration.");
var mapping = config.Mappings.FirstOrDefault(x => x.Identity.LeanKit == request.BoardId);
if (mapping == null)
return ServerError(string.Format("There is no mapping for board [{0}]", request.BoardId));
try
{
config.Mappings.Remove(mapping);
configStore.Save(config);
}
catch (Exception ex)
{
return ServerError("An unexpected error occurred while attempting to remove the requested mapping: " + ex.Message);
}
return OK();
}
public object Post(SettingsRequest request)
{
var configStore = GetConfigurationStorage();
if (configStore == null) return ServerError("No Configuration is available");
var config = configStore.Load();
if (config == null) return ServerError("Error attempting to load configuration.");
try
{
config.PollingFrequency = request.PollingFrequency;
config.EarliestSyncDate = request.EarliestSyncDate;
config.PollingUnits = request.PollingUnits;
if (request.PollingTime.HasValue)
config.PollingTime = request.PollingTime.Value.TimeOfDay;
else
config.PollingTime = null;
configStore.Save(config);
}
catch (Exception ex)
{
return ServerError("An unexpected error occurred while attempting to save changes: " + ex.Message);
}
return OK();
}
public object Get(ConfigurationTextRequest request)
{
var config = GetConfiguration();
var lines = config.ToString().Split('\n');
var output = lines.Aggregate("<ol>", (current, line) => current + ("<li>" + line + "</li>"));
output += "</ol>";
return OK(output);
}
public object Put(ActivationRequest request)
{
try
{
IntegrationService.Reset();
}
catch (Exception ex)
{
return ServerError(ex.Message);
}
return OK();
}
private LocalStorage<Configuration> GetConfigurationStorage()
{
var dir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory;
if (dir == null) throw new Exception("Could not access current installation directory.");
var curFolder = dir.FullName;
var storagefile = Path.Combine(curFolder, "config-edit.json");
return new LocalStorage<Configuration>(storagefile);
}
private Configuration GetConfiguration()
{
return GetConfigurationStorage().Load();
}
}
}