1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
package org.xwiki.platform.wiki.creationjob.script; |
21 |
|
|
22 |
|
import javax.inject.Inject; |
23 |
|
import javax.inject.Named; |
24 |
|
import javax.inject.Provider; |
25 |
|
import javax.inject.Singleton; |
26 |
|
|
27 |
|
import org.apache.commons.lang3.StringUtils; |
28 |
|
import org.slf4j.Logger; |
29 |
|
import org.xwiki.component.annotation.Component; |
30 |
|
import org.xwiki.context.Execution; |
31 |
|
import org.xwiki.extension.ExtensionId; |
32 |
|
import org.xwiki.extension.distribution.internal.DistributionManager; |
33 |
|
import org.xwiki.job.Job; |
34 |
|
import org.xwiki.job.event.status.JobStatus; |
35 |
|
import org.xwiki.model.reference.WikiReference; |
36 |
|
import org.xwiki.platform.wiki.creationjob.WikiCreationRequest; |
37 |
|
import org.xwiki.platform.wiki.creationjob.WikiCreator; |
38 |
|
import org.xwiki.platform.wiki.creationjob.WikiCreationException; |
39 |
|
import org.xwiki.script.service.ScriptService; |
40 |
|
import org.xwiki.security.authorization.AccessDeniedException; |
41 |
|
import org.xwiki.security.authorization.AuthorizationManager; |
42 |
|
import org.xwiki.security.authorization.Right; |
43 |
|
import org.xwiki.wiki.descriptor.WikiDescriptorManager; |
44 |
|
|
45 |
|
import com.xpn.xwiki.XWikiContext; |
46 |
|
|
47 |
|
|
48 |
|
|
49 |
|
|
50 |
|
@version |
51 |
|
@since |
52 |
|
|
53 |
|
@Component |
54 |
|
@Singleton |
55 |
|
@Named("wiki.creationjob") |
|
|
| 94.1% |
Uncovered Elements: 2 (34) |
Complexity: 13 |
Complexity Density: 0.62 |
|
56 |
|
public class WikiCreationJobScriptServices implements ScriptService |
57 |
|
{ |
58 |
|
|
59 |
|
|
60 |
|
|
61 |
|
private static final String ERROR_KEY = "scriptservice.wikicreationjob.error"; |
62 |
|
|
63 |
|
@Inject |
64 |
|
private WikiCreator wikiCreator; |
65 |
|
|
66 |
|
@Inject |
67 |
|
private Execution execution; |
68 |
|
|
69 |
|
@Inject |
70 |
|
private AuthorizationManager authorizationManager; |
71 |
|
|
72 |
|
@Inject |
73 |
|
private WikiDescriptorManager wikiDescriptorManager; |
74 |
|
|
75 |
|
@Inject |
76 |
|
private Provider<XWikiContext> xcontextProvider; |
77 |
|
|
78 |
|
@Inject |
79 |
|
private DistributionManager distributionManager; |
80 |
|
|
81 |
|
@Inject |
82 |
|
private Logger logger; |
83 |
|
|
84 |
|
|
85 |
|
|
86 |
|
|
87 |
|
@param |
88 |
|
@return |
89 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (16) |
Complexity: 5 |
Complexity Density: 0.42 |
|
90 |
6 |
public Job createWiki(WikiCreationRequest request)... |
91 |
|
{ |
92 |
6 |
try { |
93 |
|
|
94 |
6 |
XWikiContext xcontext = xcontextProvider.get(); |
95 |
6 |
WikiReference mainWikiReference = new WikiReference(wikiDescriptorManager.getMainWikiId()); |
96 |
6 |
authorizationManager.checkAccess(Right.CREATE_WIKI, xcontext.getUserReference(), mainWikiReference); |
97 |
|
|
98 |
|
|
99 |
5 |
if (request.getExtensionId() != null) { |
100 |
3 |
if (!isAuthorizedExtension(request.getExtensionId())) { |
101 |
1 |
throw new WikiCreationException(String.format("The extension [%s] is not authorized.", |
102 |
|
request.getExtensionId())); |
103 |
|
} |
104 |
|
} |
105 |
4 |
return wikiCreator.createWiki(request); |
106 |
|
|
107 |
|
} catch (WikiCreationException e) { |
108 |
1 |
setLastError(e); |
109 |
1 |
logger.warn("Failed to create a new wiki.", e); |
110 |
|
} catch (AccessDeniedException e) { |
111 |
1 |
setLastError(e); |
112 |
|
} |
113 |
|
|
114 |
2 |
return null; |
115 |
|
} |
116 |
|
|
|
|
| 66.7% |
Uncovered Elements: 2 (6) |
Complexity: 3 |
Complexity Density: 0.75 |
|
117 |
3 |
private boolean isAuthorizedExtension(ExtensionId extensionId)... |
118 |
|
{ |
119 |
3 |
ExtensionId defaultExtension = getDefaultWikiExtensionId(); |
120 |
3 |
if (defaultExtension != null && StringUtils.isNotBlank(defaultExtension.getId())) { |
121 |
|
|
122 |
3 |
return defaultExtension.equals(extensionId); |
123 |
|
} else { |
124 |
|
|
125 |
|
|
126 |
0 |
return true; |
127 |
|
} |
128 |
|
} |
129 |
|
|
130 |
|
|
131 |
|
@return |
132 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
133 |
4 |
public ExtensionId getDefaultWikiExtensionId()... |
134 |
|
{ |
135 |
4 |
return distributionManager.getWikiUIExtensionId(); |
136 |
|
} |
137 |
|
|
138 |
|
|
139 |
|
@param |
140 |
|
@return |
141 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
142 |
75 |
public JobStatus getJobStatus(String wikiId)... |
143 |
|
{ |
144 |
75 |
return wikiCreator.getJobStatus(wikiId); |
145 |
|
} |
146 |
|
|
147 |
|
|
148 |
|
@return |
149 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
150 |
4 |
public WikiCreationRequest newWikiCreationRequest()... |
151 |
|
{ |
152 |
4 |
return new WikiCreationRequest(); |
153 |
|
} |
154 |
|
|
155 |
|
|
156 |
|
|
157 |
|
@return |
158 |
|
@since |
159 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
160 |
3 |
public Exception getLastError()... |
161 |
|
{ |
162 |
3 |
return (Exception) this.execution.getContext().getProperty(ERROR_KEY); |
163 |
|
} |
164 |
|
|
165 |
|
|
166 |
|
@link |
167 |
|
|
168 |
|
@param |
169 |
|
@see |
170 |
|
@since |
171 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
172 |
2 |
private void setLastError(Exception e)... |
173 |
|
{ |
174 |
2 |
this.execution.getContext().setProperty(ERROR_KEY, e); |
175 |
|
} |
176 |
|
} |