/o//commerce-media/accounts/-1/images/18531455?download=true
TwoWay Premium is a plugin providing Two Steps Authentication to
access you Liferay portal instance.
Two steps verification adds an
extra security layer for your Liferay Portal account by requiring user
to enter a one-time verification code in addition to your username and
password, when signing in to your account. Our code is based on
well-know libraries, open algorithms and standards and fit perfectly
in Liferay Portal, so is possibile to enable it together with other
authentication provider like LDAP.
Into portal control panel, Admin can:
- enable TwoWay
Authentication per portal as for embedded Liferay's methods
-
choose which OTP delivery channels enable for portal users (check
below for possible methods)
- set two-step authentication as
mandatory for all the users
- add IP white lists in order to
disable OTP from company network or other trusted zone (you can
disable IP's checks setting the specific portal properties
"twowayauthentication.webserver.headers.forwardedfor" to
"skip".)
- disable Backup Codes functionality
-
enable "Force authentication by email", that can be useful
if a user forget it's phone
Into personal control panel, User can:
- enable or disable
TwoWay for its specific account
- choose how to obtain the OTP
choosing from Admin's enabled channel set
- manage Backup Codes,
useful if a user forgot or changed it's phone
- manage Application
Passwords in order to grant access to specific applications like
Liferay Sync
OTP delivery methods:
- Email
- SMS: in this case you
have to configure a Twilio account
- Apps: Google Authenticator,
Authy, LastPass or other similar apps free available on platform
specific store
Encryption:
- user's Hashcode is stored as encrypted
-
user's Backup code are stored as encrypted
The following has evaluated to null or missing: ==> channel.items [in template "3192443#3192485#null" at line 18, column 30] ---- 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: #assign channelId = channel.items[0].id [in template "3192443#3192485#null" at line 18, column 9] ----
1<#if themeDisplay?has_content>
2 <#assign scopeGroupId = themeDisplay.getScopeGroupId() />
3</#if>
4
5<#if currentURL?has_content>
6 <#if currentURL?contains('web')>
7 <#assign
8 index = 2
9 partsUrl = currentURL?split('/')
10 siteName = partsUrl[index..index]?join('/')
11 />
12 </#if>
13</#if>
14
15<#assign channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${scopeGroupId}'") />
16
17<#if channel?has_content>
18 <#assign channelId = channel.items[0].id />
19</#if>
20
21<#if (CPDefinition_cProductId.getData())??>
22 <#assign productId = CPDefinition_cProductId.getData() />
23</#if>
24
25<#assign
26 product = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/"+ channelId +"/products/"+ productId +"?accountId=-1&nestedFields=productSpecifications")
27 specifications = product.productSpecifications![]
28/>
29
30<div>
31 <#if specifications?has_content>
32
33 <#assign
34 specificationCPUs = specifications?filter(item -> stringUtil.equals(item.specificationKey, "cpu"))
35 specificationRAMs = specifications?filter(item -> stringUtil.equals(item.specificationKey, "ram"))
36 cpuQuantity = ""
37 memoryQuantity = ""
38 />
39
40 <#if specificationCPUs?has_content>
41 <#list specificationCPUs as cpu>
42 <#assign cpuQuantity = cpu.value />
43
44 <#if cpuQuantity?has_content>
45 ${cpuQuantity}
46 <#if cpuQuantity?eval gt 1>
47 CPUS
48 </#if>
49
50 <#if cpuQuantity?eval lt 2>
51 CPU
52 </#if>
53 </#if>
54 </#list>
55 </#if>
56
57 <#if specificationRAMs?has_content>
58 <#list specificationRAMs as ram>
59 <#assign memoryQuantity = ram.value />
60
61 <#if cpuQuantity?has_content && memoryQuantity?has_content >, </#if>
62
63 <#assign memoryQuantity = ram.value />
64
65 <#if memoryQuantity?has_content>
66 ${memoryQuantity} GB RAM
67 </#if>
68 </#list>
69 </#if>
70 </#if>
71</div>
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.