/o//commerce-media/accounts/-1/images/30454912?download=false

Liferay CE Portal Security SSO NTLM
30454881
Leírás

NTLM (NT LAN Manager) is a suite of Microsoft protocols that provide authentication, integrity, and confidentiality for users. Though Microsoft has adopted Kerberos in modern versions of Windows server, NTLM is still used when authenticating to a workgroup. @product@ supports NTLM v2 authentication. NTLM v2 is more secure and has a stronger authentication process than NTLMv1.
Note: NTLM authentication is deprecated in Liferay 7.1 and may be removed in future versions. Users should migrate to Kerberos.

NTLM (NT LAN Manager) is a suite of Microsoft protocols that provide authentication, integrity, and confidentiality for users. Though Microsoft has adopted Kerberos in modern versions of Windows server, NTLM is still used when authenticating to a workgroup. @product@ supports NTLM v2 authentication. NTLM v2 is more secure and has a stronger authentication process than NTLMv1.
Note: NTLM authentication is deprecated in Liferay 7.1 and may be removed in future versions. Users should migrate to Kerberos.

DEVELOPER
Hiba jelentkezett a sablon feldolgozása során.
The following has evaluated to null or missing:
==> sku.skuOptions  [in template "3192443#3192485#null" at line 116, column 32]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #list sku.skuOptions as opt  [in template "3192443#3192485#null" at line 116, column 25]
	~ Reached through: #nested  [in template "3192443#3192485#null" in macro "section" at line 208, column 17]
	~ Reached through: @section title=languageUtil.get(local...  [in template "3192443#3192485#null" at line 101, column 1]
----
1<#assign 
2	channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${themeDisplay.getScopeGroupId()}'") 
3 
4	product = restClient.get( 
5		"/headless-commerce-delivery-catalog/v1.0/channels/" + channel.items[0].id + 
6		"/products/" + CPDefinition_cProductId.getData() + 
7		"?accountId=-1&nestedFields=categories,productSpecifications,skus&skus.accountId=-1&skus.currencyCode=USD" 
8
9 
10	catalogName = product.catalogName!"" 
11	categories = product.categories![] 
12	createDate = product.createDate!0 
13	productSpecifications = product.productSpecifications![] 
14   
15	liferayVersions = productSpecifications?filter(item -> stringUtil.equals(item.specificationKey, "liferay-version")) 
16	platformOffering = categories?filter(item -> stringUtil.equals(item.vocabulary?replace(" ", "-"), "marketplace-liferay-platform-offering")) 
17
18 
19<#assign publisherDetailsResponse = restClient.get("/c/publisherdetailses?filter=publisherName eq '${catalogName}'") /> 
20<#assign redirectPath="https://marketplace.liferay.com/e/publisher-details/29282497"/> 
21 
22<#if publisherDetailsResponse.items?has_content> 
23	<#assign 
24		publisherDetails = publisherDetailsResponse.items[0] 
25		profileImageURL = publisherDetails.publisherProfileImage?replace("https://", "http://") 
26	/> 
27</#if> 
28 
29<#assign 
30  appUsageTerms = getSpecificationValue("appusagetermsurl")			  
31	cpuValue = getSpecificationValue("cpu") 
32	developerName = getSpecificationValue("developer-name", catalogName) 
33	publisherURL = (getSpecificationValue("publisherwebsiteurl")?trim?replace(" ", ""))!"" 
34	ramValue = getSpecificationValue("ram") 
35	supportEmail = getSpecificationValue("supportemailaddress") 
36	supportPhone = getSpecificationValue("supportphone") 
37	type = getSpecificationValue("type")?lower_case 
38
39<@section title = languageUtil.get(locale, "developer")> 
40	<#if publisherDetails?has_content> 
41	  <a class="bg-neutral-8" href="${redirectPath}/${publisherDetails.id}"> 
42		   ${developerName} 
43		</a> 
44	<#else> 
45	  <a class="bg-neutral-8" 	href="/?q=${developerName}"> 
46			 ${developerName} 
47		</a> 
48	</#if> 
49</@section> 
50 
51<@section title=languageUtil.get(locale, "publisher-date", "Publisher Date")> 
52    <#if createDate?has_content> 
53        <#assign parsedDate = createDate?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")> 
54        <p>${parsedDate?string("MMMM d, yyyy")}</p> 
55    </#if> 
56</@section> 
57 
58<@section title = languageUtil.get(locale, "deployment-method", "Deployment Method")> 
59	<#list platformOffering as offering> 
60		<p>${offering.name}</p> 
61	</#list> 
62</@section> 
63 
64<@section title = languageUtil.get(locale, "app-type", "App Type")> 
65 	<#if type == 'client-extension'> Client Extension </#if> 
66 	<#if type == 'cloud'> Cloud </#if> 
67 	<#if type == 'composite-app'> Composite App </#if> 
68 	<#if type == 'dxp'> DXP </#if> 
69 	<#if type == 'low-code-configuration'> Low Code Configuration </#if> 
70</@section> 
71 
72<@section title = languageUtil.get(locale, "version")> 
73	${getSpecificationValue("latest-version", "1.0.0")} 
74</@section> 
75 
76<#if liferayVersions?has_content> 
77	<@section title = languageUtil.get(locale, "supported-versions", "Supported Versions")> 
78		<#list liferayVersions as version> 
79			${version.value}<#if version?has_next>, </#if> 
80		</#list> 
81	</@section> 
82</#if> 
83 
84<#if cpuValue?has_content> 
85	<@section title = languageUtil.get(locale, "resource-requirements", "Resource Requirements")> 
86		<p> 
87			<#if cpuValue?has_content> 
88				${cpuValue} 
89				<#assign cpuNumber = cpuValue?number?default(0) /> 
90				<#if cpuValue?eval gt 1> 
91					CPUS 
92				</#if> 
93				<#if cpuValue?eval lt 2> 
94					CPU 
95				</#if> 
96			</#if>, <#if ramValue?has_content>${ramValue} GB RAM</#if> 
97		</p> 
98	</@section> 
99</#if> 
100 
101<@section title = languageUtil.get(locale, "standard-price", "Standard Price")> 
102	<div> 
103		<#assign purchasableSkus = [] /> 
104 
105		<#list product.skus as sku> 
106			<#if sku.purchasable?? && sku.purchasable> 
107				<#assign purchasableSkus = purchasableSkus + [sku] /> 
108			</#if> 
109		</#list> 
110 
111		<#assign standardSku = {} /> 
112 
113		<#list purchasableSkus as sku> 
114			<#assign matched = false /> 
115 
116			<#list sku.skuOptions as opt> 
117				<#if stringUtil.equals(opt.skuOptionValueKey, "standard")> 
118					<#assign 
119						matched = true 
120						standardSku = sku 
121					/> 
122 
123					<#break> 
124				</#if> 
125			</#list> 
126			<#if matched><#break></#if> 
127		</#list> 
128 
129		<#if standardSku.price?? && standardSku.price.price?eval gt 0> 
130			<div class="bg-neutral-8">${standardSku.price.priceFormatted!""}</div> 
131		<#else> 
132			${languageUtil.get(locale, "free", "Free")} 
133		</#if> 
134	</div> 
135</@section> 
136 
137<@section title = languageUtil.get(locale, "help-and-support", "Help and Support")> 
138	<div class="d-flex flex-column mt-4"> 
139		<div class="d-flex"> 
140			<span class="help-and-support-link-icon"> 
141				<@clay["icon"] symbol="document" /> 
142			</span> 
143 
144       <a 
145				class="d-flex w-100 justify-content-between help-and-support-link" 
146				href="${(appUsageTerms?has_content)?then(appUsageTerms, 'https://www.liferay.com/en/legal/marketplace-terms-of-service')}" 
147				target="_blank"> 
148	      <span class="copy-text ml-1 help-and-support-link"> 
149					${languageUtil.get(locale, "terms-and-conditions", "Terms & Conditions")} 
150				</span> 
151 
152				<@clay["icon"] 
153					className="help-and-support-link-arrow link-arrow ml-auto" 
154					height="12" 
155					symbol="angle-right" 
156				/> 
157			</a> 
158		</div> 
159 
160		<div class="d-flex"> 
161			<span class="help-and-support-link-icon"> 
162				<@clay["icon"] symbol="document" /> 
163			</span> 
164 
165			<a class="d-flex w-100 justify-content-between help-and-support-link" href="javascript:void(0)" onClick="openModal()"> 
166				<span class="copy-text ml-1 help-and-support-link"> 
167					${languageUtil.get(locale, "publisher-contact-info", "Publisher Contact Info")} 
168				</span> 
169 
170				<@clay["icon"] 
171					className="help-and-support-link-arrow link-arrow ml-auto" 
172					height="12" 
173					symbol="angle-right" 
174				/> 
175			</a> 
176		</div> 
177	</div> 
178</@section> 
179 
180<@section 
181	showLine = false 
182	title = languageUtil.get(locale, "share-link") 
183
184	<a class="align-items-center copy-text d-flex font-weight-bold ml-1 text-decoration-none text-primary" href="#copy-share-link" onclick="copyToClipboard(Liferay.ThemeDisplay.getCanonicalURL())"> 
185		<span class="help-and-support-link-icon mr-1"> 
186			<@clay["icon"] symbol="link" /> 
187		</span> 
188		Copy & Share 
189	</a> 
190</@section> 
191 
192<#function getSpecificationValue key default=""> 
193	<#local spec = productSpecifications?filter(productSpecification -> 
194		stringUtil.equals(productSpecification.specificationKey, key)) /> 
195 
196	<#return (spec?first.value)!default /> 
197</#function> 
198 
199<#macro section 
200	title 
201	showLine=true 
202
203	<p> 
204		<strong>${title}</strong> 
205	</p> 
206 
207	<div> 
208		<#nested> 
209	</div> 
210 
211	<#if showLine> 
212		<hr /> 
213	</#if> 
214</#macro> 
215 
216<script ${nonceAttribute}> 
217	function modalBody() { 
218		return ` 
219			<div class="align-items-center d-flex flex-row mb-3"> 
220				<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
221					<#if profileImageURL?? && profileImageURL?length gt 0> 
222						<img src="${profileImageURL}" alt="Publisher Image" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%;" /> 
223					<#else> 
224						<@clay["icon"] 
225							style="fill:#6B6C7E;" 
226							symbol="picture" 
227						/> 
228					</#if> 
229				</span> 
230 
231				<div class="d-flex flex-column"> 
232					<h3 class="font-weight-bold mb-0"> 
233						${catalogName} 
234					</h3> 
235				</div> 
236			</div> 
237 
238			<#if publisherURL?has_content> 
239				<div class="align-items-center d-flex flex-row mb-3"> 
240				<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
241						<@clay["icon"] 
242							style="fill:#6B6C7E;" 
243							symbol="globe" 
244						/> 
245					</span> 
246 
247					<div class="d-flex flex-column"> 
248						<span class="text-black-50">${languageUtil.get(locale, "publisher-website", "Publisher Website")}</span> 
249 
250						<a href="${publisherURL}" target="_blank" class="font-weight-bold"> 
251							${publisherURL} 
252						</a> 
253					</div> 
254				</div> 
255			</#if> 
256 
257			<#if supportEmail?has_content> 
258				<div class="align-items-center d-flex flex-row mb-3"> 
259					<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
260						<@clay["icon"] style="fill:#6B6C7E;"symbol="envelope-closed" /> 
261					</span> 
262 
263					<div class="d-flex flex-column"> 
264						<span class="text-black-50">${languageUtil.get(locale, "support-email", "Support Email")}</span> 
265 
266						<a class="font-weight-bold" href="mailto:${supportEmail}" target="_blank"> 
267							${supportEmail} 
268						</a> 
269					</div> 
270				</div> 
271			</#if> 
272 
273			<#if supportPhone?has_content> 
274				<div class="d-flex flex-row align-items-center mb-3"> 
275					<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
276						<@clay["icon"] 
277							style="fill:#6B6C7E;" 
278							symbol="phone" 
279						/> 
280					</span> 
281 
282					<div class="d-flex flex-column"> 
283						<span class="text-black-50">${languageUtil.get(locale, "phone")}</span> 
284 
285						<a class="font-weight-bold" href="tel:${supportPhone}" target="_blank"> 
286							${supportPhone} 
287						</a> 
288					</div> 
289				</div> 
290			</#if> 
291		`; 
292
293 
294	function openModal() { 
295		Liferay.Util.openModal({ 
296			bodyHTML: modalBody(), 
297			center: true, 
298			headerHTML: "<h2>Publisher Support Contact Info</h2>", 
299			size: "md" 
300		}); 
301
302</script> 
303 
304<script ${nonceAttribute}> 
305	function copyToClipboard(text) { 
306		if (navigator && navigator.clipboard && navigator.clipboard.writeText) { 
307			navigator.clipboard.writeText(text); 
308 
309			Liferay.Util.openToast({ message: "Copied link to the clipboard" }); 
310
311
312</script> 
313 
314<style ${nonceAttribute}> 
315	.copy-text { 
316		color: #282934; 
317		font-size: 16px; 
318
319 
320	.help-and-support-link { 
321		color: inherit; 
322		text-decoration: none; 
323
324 
325	.help-and-support-link-arrow { 
326		fill: rgb(133, 140, 148); 
327
328 
329	.help-and-support-link:hover { 
330		color: inherit; 
331		text-decoration: none; 
332
333 
334	.help-and-support-link-icon { 
335		color: rgb(133, 140, 148); 
336
337 
338	.help-and-support-svg mask, 
339	.link-arrow mask { 
340		mask-type: alpha; 
341
342</style> 
DEVELOPER
2025.09.17. 20:33
Published date
2025.09.17. 20:33
Published Date
2025.09.17. 20:33
SUPPORTED OFFERINGS
Supported Versions
7.2
Resource Requirements
Edition
Community
PRICE
Free
help & support
SHARE LINK
Copy & Share

HTML Example

A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.